1 Star 0 Fork 89

1k树 / hybridclr

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

HybridCLR

license

logo



HybridCLR是一个特性完整、零成本、高性能、低内存近乎完美的Unity全平台原生c#热更方案。

HybridCLR扩充了il2cpp的代码,使它由纯AOT runtime变成‘AOT+Interpreter’ 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在Android平台,也能在IOS、Consoles等限制了JIT的平台上高效地以AOT+interpreter混合模式执行,从底层彻底支持了热更新。

文档

特性

  • 特性完整。 近乎完整实现了ECMA-335规范,除了 下文中"限制和注意事项" 之外的特性都支持。
  • 零学习和使用成本。 HybridCLR将纯AOT runtime增强为完整的runtime,使得热更新代码与AOT代码无缝工作。脚本类与AOT类在同一个运行时内,可以随意写继承、反射、多线程(volatile、ThreadStatic、Task、async)之类的代码。不需要额外写任何特殊代码、没有代码生成,也没有什么特殊限制。
  • 执行高效。实现了一个极其高效的寄存器解释器,所有指标都大幅优于其他热更新方案。性能测试报告
  • 内存高效。 热更新脚本中定义的类跟普通c#类占用一样的内存空间,远优于其他热更新方案。内存占用报告
  • 由于对泛型的完美支持,使得因为AOT泛型问题跟il2cpp不兼容的库现在能够完美地在il2cpp下运行
  • 支持一些il2cpp不支持的特性,如__makeref、 __reftype、__refvalue指令
  • 原生支持hotfix修复AOT部分代码。几乎不增加任何开发和运行开销。

工作原理

HybridCLR从mono的 hybrid mode execution 技术中得到启发,为unity的il2cpp之类的AOT runtime额外提供了interpreter模块,将它们由纯AOT运行时改造为"AOT + Interpreter"混合运行方式。

icon

更具体地说,HybridCLR做了以下几点工作:

  • 实现了一个高效的元数据(dll)解析库
  • 改造了元数据管理模块,实现了元数据的动态注册
  • 实现了一个IL指令集到自定义的寄存器指令集的compiler
  • 实现了一个高效的寄存器解释器
  • 额外提供大量的instinct函数,提升解释器性能
  • 提供hotfix AOT的支持

与其他流行的c#热更新方案的区别

HybridCLR是原生的c#热更新方案。通俗地说,il2cpp相当于mono的aot模块,HybridCLR相当于mono的interpreter模块,两者合一成为完整mono。HybridCLR使得il2cpp变成一个全功能的runtime,原生(即通过System.Reflection.Assembly.Load)支持动态加载dll,从而支持ios平台的热更新。

正因为HybridCLR是原生runtime级别实现,热更新部分的类型与主工程AOT部分类型是完全等价并且无缝统一的。可以随意调用、继承、反射、多线程,不需要生成代码或者写适配器。

其他热更新方案则是独立vm,与il2cpp的关系本质上相当于mono中嵌入lua的关系。因此类型系统不统一,为了让热更新类型能够继承AOT部分类型,需要写适配器,并且解释器中的类型不能为主工程的类型系统所识别。特性不完整、开发麻烦、运行效率低下。

兼容性

  • 支持2019.4.x、2020.3.x、2021.3.x系列LTS版本
  • 支持所有il2cpp支持的平台。目前测试支持 PC(Win32和Win64)、macOS(x86、x64、Arm64)、Android(armv7、armv8)、iOS(64bit)、NS(64bit)、WebGL(有少量bug)平台,剩余平台有待测试。
  • 测试过大量游戏常见库,未发现跟il2cpp原生兼容但使用HybridCLR后不兼容性的库。只要能在il2cpp backend下工作的库都可以在HybridCLR下正常工作。甚至那些与il2cpp因为AOT问题不兼容的库,现在因为HybridCLR对il2cpp的能力扩充,反而可以正常运行了。

稳定性状况

目前PC(x86及x64)、macOS(x86、x64、Arm64)、Android(arm v7及v8)、iOS(64bit) 可稳定使用。已经有数百个大中小型商业游戏项目完成接入,其中一些在紧锣密鼓作上线前测试。

鉴于在多个重度上线(准上线)项目上有超过4个月的稳定表现,预计于10月份发布正式版本

上线的商业项目

目前有超过7款上线商业项目及多款(未详细统计)对外测试的商业手游项目(非独立游戏!)。

  • 2022.6.7上线第一款Android+iOS双端三消类型手游
  • 2022.8.5上线第二款双端重度RPG卡牌手游
  • 2022.8.8上线第三款双端重度RPG塔防手游
  • 2022.9上线第4款双端传奇类MMORPG手游
  • 其他参见收集的一些 已经上线的商业项目

支持与联系

  • QQ群:651188171 HybridCLR(wolong)技术交流群 (官方主群)。可以反馈bug,但不要在群里咨询基础使用问题
  • QQ群:428404198 HybridCLR(wolong)新手群 (新手群)。新手使用过程中遇到问题,都可以在群里咨询。
  • 邮箱:hybridclr@focus-creative-games.com
  • 商业化支持

后续开发规划

  • 指令优化,执行性能将有大幅提升 (2022.10 -)
  • 支持增量式GC (2022.10 -)
  • 支持extern函数
  • 支持 Hybrid Dll 技术
  • godot引擎 添加.net 7 + HybridCLR支持

关于作者

walonfocus-creative-games 创始人

毕业于清华大学物理系,2006年CMO金牌,奥数国家集训队成员,保送清华基科班。专注于游戏技术,擅长开发架构和基础技术设施。

license

HybridCLR is licensed under the MIT license

MIT License Copyright (c) 2022 focus-creative-games Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

HybridCLR是零成本、高性能的unity c#的热更新方案。 Zero-cost, high-performance unity c# hot update solution 展开 收起
C++
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/1ktree/hybridclr.git
git@gitee.com:1ktree/hybridclr.git
1ktree
hybridclr
hybridclr
main

搜索帮助

344bd9b3 5694891 D2dac590 5694891