{"repo":"focus-creative-games/hybridclr","free":true,"listed":false,"github":"https://github.com/focus-creative-games/hybridclr","clone":"git clone https://github.com/focus-creative-games/hybridclr.git","description":"HybridCLR是一个特性完整、零成本、高性能、低内存的Unity全平台原生c#热更新解决方案。 HybridCLR is a fully featured, zero-cost, high-performance, low-memory solution for Unity's all-platform native c# hotupdate.","language":"C++","stars":7947,"topics":["csharp","framework","hot","hot-update","hotfix","hotupdate","huatuo","il2cpp","ios","unity","update"],"license":"MIT","category":"game_engine_tool","readme_excerpt":"- [README 中文](./README.md)\n- [README English](./README_EN.md)\n\n# HybridCLR\n\n[![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/focus-creative-games/hybridclr/blob/main/LICENSE)\n\n![logo](./docs/images/logo.jpg)\n\n<br/>\n<br/>\n\nHybridCLR是一个**特性完整、零成本、高性能、低内存**的**近乎完美**的Unity全平台原生c#热更新解决方案。\n\nHybridCLR扩充了il2cpp运行时代码，使它由纯[AOT](https://en.wikipedia.org/wiki/Ahead-of-time_compilation) runtime变成AOT+Interpreter 混合runtime，进而原生支持动态加载assembly，从底层彻底支持了热更新。使用HybridCLR技术的游戏不仅能在Android平台，也能在IOS、Consoles、WebGL等所有il2cpp支持的平台上高效运行。\n\n由于HybridCLR对ECMA-335规范 的良好支持以及对Unity开发工作流的高度兼容，Unity项目在接入HybridCLR后，可以几乎无缝地获得C#代码热更新的能力，开发者不需要改变日常开发习惯和要求。HybridCLR首次实现了将Unity平台的全平台代码热更新方案的工程难度降到几乎为零的水平。\n\n欢迎拥抱现代原生C#热更新技术 ！！！\n\n## 文档\n\n- [官方文档](https://www.hybridclr.cn/docs/intro)\n- [快速上手](https://www.hybridclr.cn/docs/beginner/quickstart)\n- [商业项目案例](https://www.hybridclr.cn/docs/other/businesscase)\n- [LeanCLR](https://github.com/focus-creative-games/leanclr)\n\n## 特性\n\n- 近乎完整实现了[ECMA-335规范](https://www.ecma-international.org/publications-and-standards/standards/ecma-335/)，只有极少量的[不支持的特性](https://www.hybridclr.cn/docs/basic/notsupportedfeatures)。\n- 零学习和使用成本。对绝大多数开发者来说写代码近乎没有限制。 热更新代码与AOT代码无缝工作，可以随意写继承、**泛型**、**反射**之类的代码。不需要额外写任何特殊代码、没有代码生成\n- 完全支持多线程，包含但不限于 volatile、ThreadStatic、async Task等相关功能和特性。这是其他所有热更新方案都不支持的\n- 几乎完全兼容Unity的工作流。包括且不限于支持热更新**MonoBehaviour**、ScriptableObject、**DOTS**技术，资源上挂载的热更新脚本可以正确实例化，这是其他所有热更新方案都不支持的\n- 执行高效。实现了一个极其高效的寄存器解释器，所有指标都大幅优于其他热更新方案。[性能测试报告](https://www.hybridclr.cn/docs/basic/performance)\n- 内存高效。 热更新脚本中定义的类跟普通c#类占用一样的内存空间，远优于其他热更新方案。[内存占用报告](https://www.hybridclr.cn/docs/basic/memory)\n- 支持MonoPInvokeCallback，可以与native代码或者其他语言如lua、javascript、python良好交互\n- 支持一些il2cpp不支持的特性，如__makeref、 __reftype、__refvalue指令\n- 支持独创的 **Differential Hybrid Execution(DHE)** 差分混合执行技术，即可以对AOT dll任意增删改，会智能地让未改动的函数以AOT方式运行，变化或者新增的函数以interpreter模式运行，让热更新的游戏逻辑的运行性能基本达到原生AOT的水平\n- 支持 **热重载** 技术，可以100%卸载程序集\n- 支持 **热修复** 技术，不需要重启游戏即可无感修复bug\n- 支持现代的dll加密技术，有效保障代码安全\n\n## 支持的版本与平台\n\n- 支持2019.4.x、2020.3.x、2021.3.x、2022.3.x、2023.2.x、6000.x.y全系列LTS版本\n- 支持所有il2cpp支持的平台\n- 支持团结引擎和鸿蒙平台\n\n## 工作原理\n\nHybridCLR从mono的 [mixed mode execution](https://www.mono-project.com/news/2017/11/13/mono-interpreter/) 技术中得到启发，为unity的il2cpp之类的AOT runtime额外提供了interpreter模块，将它们由纯AOT运行时改造为\"AOT + Interpreter\"混合运行方式。\n\n![icon](docs/images/architecture.png)\n\n更具体地说，HybridCLR做了以下几点工作：\n\n- 实现了一个高效的元数据(dll)解析库\n- 改造了元数据管理模块，实现了元数据的动态注册\n- 实现了一个IL指令集到自定义的寄存器指令集的compiler\n- 实现了一个高效的寄存器解释器\n- 额外提供大量的instinct函数，提升解释器性能\n\n## 稳定性状况\n\nHybridCLR已经被广泛验证是非常高效、稳定的Unity热更新解决方案，良好满足大中型商业项目的稳定和性能要求。\n\n目前已经有数千个商业游戏项目接入了HybridCLR，其中有超过千个已经在App Store和Google Player上线，仅仅iOS免费榜前500名中就有近百款使用了HybridCLR。上线的项目中包括MMORPG、重度卡牌、重度塔防之类的游戏。国内绝大多数**Top游戏公司**都已经在使用HybridCLR。\n\n可查看我们已知的头部公司中使用HybridCLR并且已经上线的[项目列表](https://www.hybridclr.cn/docs/other/businesscase)。\n\n## 支持与联系\n\n- 官方1群（3000人）：651188171（满）\n- 新手1群（3000人）：428404198（满）\n- 新手2群（2000人）：680274677（满）\n- 新手3群（2000人）：**920714552（推荐）**\n- discord频道：<https://discord.gg/BATfNfJnm2>\n- 商业合作邮箱： business#code-philosophy.com\n- [商业化支持](https://www.hybridclr.cn/docs/business/intro)\n\n## 相关项目 LeanCLR\n\nhybridclr仅是一个解释器模块，如果你需要一个完整小巧的适合发布到移动和小游戏平台的开源CLR实现，[LeanCLR](https://github.com/focus-creative-games/leanclr) 是当前最合适的方案。\n\nLeanCLR 是一个面向全平台的精益 CLR（Common Language Runtime）实现。LeanCLR 在高度符合 ECMA-335 规范的前提下，提供更紧凑、易嵌入、低内存占用的运行时，实现对移动端、H5 与小游戏等资源受限平台的友好支持。LeanCLR原生支持 AOT + Interpreter 混合执行模式，内置 IL 与 IR 双解释器。\n\nLeanCLR既可以独立嵌入到任何app和游戏项目，发布到任何平台，也可以**替代il2cpp作为Unity（团结引擎）发布到webgl和小游戏平台的运行时**。大幅缩减包体和内存开销。\n\n## 关于作者\n\n**walon** ：**Code Philosophy（代码哲学）** 创始人\n\n毕业于清华大学物理系，2006年CMO金牌，奥数国家集训队成员，保送清华基科班。专注于游戏技术，擅长开发架构和基础技术设施。\n\n## license\n\nHybridCLR is licensed under the [MIT](https://github.com/focus-creative-games/hybridclr/blob/main/LICENSE) license\n","default_branch":"main","files":91,"tree":[".github/FUNDING.yml",".github/ISSUE_TEMPLATE/bug_report.md",".gitignore","LICENSE","README.md","README_EN.md","docs/_config.yml","docs/images/architecture.png","docs/images/logo.jpg","docs/sponsor/weixin.JPG","docs/sponsor/zhifubao.JPG","hybridclr/CommonDef.cpp","hybridclr/CommonDef.h","hybridclr/Il2CppCompatibleDef.cpp","hybridclr/Il2CppCompatibleDef.h","hybridclr/Runtime.cpp","hybridclr/Runtime.h","hybridclr/RuntimeApi.cpp","hybridclr/RuntimeApi.h","hybridclr/RuntimeConfig.cpp","hybridclr/RuntimeConfig.h","hybridclr/generated/AssemblyManifest.cpp","hybridclr/generated/MethodBridge.cpp","hybridclr/generated/UnityVersion.h","hybridclr/interpreter/Engine.cpp","hybridclr/interpreter/Engine.h","hybridclr/interpreter/InstrinctDef.h","hybridclr/interpreter/Instruction.cpp","hybridclr/interpreter/Instruction.h","hybridclr/interpreter/Interpreter.cpp","hybridclr/interpreter/Interpreter.h","hybridclr/interpreter/InterpreterDefs.cpp","hybridclr/interpreter/InterpreterDefs.h","hybridclr/interpreter/InterpreterModule.cpp","hybridclr/interpreter/InterpreterModule.h","hybridclr/interpreter/InterpreterUtil.cpp","hybridclr/interpreter/InterpreterUtil.h","hybridclr/interpreter/Interpreter_Execute.cpp","hybridclr/interpreter/MemoryUtil.h","hybridclr/interpreter/MethodBridge.cpp","hybridclr/interpreter/MethodBridge.h","hybridclr/metadata/AOTHomologousImage.cpp","hybridclr/metadata/AOTHomologousImage.h","hybridclr/metadata/Assembly.cpp","hybridclr/metadata/Assembly.h","hybridclr/metadata/BlobReader.h","hybridclr/metadata/ClassFieldLayoutCalculator.cpp","hybridclr/metadata/ClassFieldLayoutCalculator.h","hybridclr/metadata/Coff.h","hybridclr/metadata/ConsistentAOTHomologousImage.cpp","hybridclr/metadata/ConsistentAOTHomologousImage.h","hybridclr/metadata/CustomAttributeDataWriter.h","hybridclr/metadata/Image.cpp","hybridclr/metadata/Image.h","hybridclr/metadata/InterpreterImage.cpp","hybridclr/metadata/InterpreterImage.h","hybridclr/metadata/MetadataDef.h","hybridclr/metadata/MetadataModule.cpp","hybridclr/metadata/MetadataModule.h","hybridclr/metadata/MetadataPool.cpp","hybridclr/metadata/MetadataPool.h","hybridclr/metadata/MetadataReader.h","hybridclr/metadata/MetadataUtil.cpp","hybridclr/metadata/MetadataUtil.h","hybridclr/metadata/MethodBodyCache.cpp","hybridclr/metadata/MethodBodyCache.h","hybridclr/metadata/Opcodes.cpp","hybridclr/metadata/Opcodes.h","hybridclr/metadata/PDBImage.cpp","hybridclr/metadata/PDBImage.h","hybridclr/metadata/RawImage.cpp","hybridclr/metadata/RawImage.h","hybridclr/metadata/RawImageBase.cpp","hybridclr/metadata/RawImageBase.h","hybridclr/metadata/SuperSetAOTHomologousImage.cpp","hybridclr/metadata/SuperSetAOTHomologousImage.h","hybridclr/metadata/Tables.h","hybridclr/metadata/VTableSetup.cpp","hybridclr/metadata/VTableSetup.h","hybridclr/transform/BasicBlockSpliter.cpp","hybridclr/transform/BasicBlockSpliter.h","hybridclr/transform/TemporaryMemoryArena.cpp","hybridclr/transform/TemporaryMemoryArena.h","hybridclr/transform/Transform.cpp","hybridclr/transform/Transform.h","hybridclr/transform/TransformContext.cpp","hybridclr/transform/TransformContext.h","hybridclr/transform/TransformContext_CallCommon.cpp","hybridclr/transform/TransformContext_Instinct.cpp","hybridclr/transform/TransformModule.cpp","hybridclr/transform/TransformModule.h"],"storefront":"/r/focus-creative-games","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/focus-creative-games/hybridclr/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}