一个实验性 .NET Runtime
LuminCLR 是使用 C++17 编写的实验性 .NET 运行时基础设施,面向程序集解析、运行时类型系统和 AOT 执行等场景。
它不是对完整 .NET API 的兼容性承诺,而是一条可以持续验证的实现路径:每个子系统都通过原生测试与托管回归测试推进。
两个核心部分
LuminCLR Runtime
运行时负责 PE/CLI 元数据、类型布局、对象模型、垃圾回收、异常处理、基础 BCL 原语与内部调用。这里的关键不是简单“读取 IL”,而是建立一致的类型身份、布局规则与执行期对象语义。
LuminAot
LuminAot 读取 .NET 程序集,把当前可处理的 IL 方法翻译为 C++,并生成对应的运行时注册代码。生成结果与 Runtime 共享类型系统、对象模型、异常和 ICall 层。
构建与验证
Runtime 只需要 CMake 3.16+ 与 C++17 编译器:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
ctest --test-dir build --output-on-failure
运行内置自检:
./build/lumin --demo
AOT 后端使用 .NET SDK 构建:
dotnet build ./luminaot/src/LuminAot/LuminAotNg.csproj -c Release
dotnet run --project ./luminaot/src/LuminAot/LuminAotNg.csproj -- --help
当前覆盖范围
仓库测试正在覆盖元数据解析、泛型、虚方法与接口分派、反射、GC、线程、互操作,以及主要 BCL / ICall 路径。架构文档描述的是当前实现状态,实际支持范围始终以源码与测试结果为准。
这种“先定义验证边界”的方式很重要:运行时工程很容易在少量 Demo 上看起来可用,但只有持续扩大的回归测试才能暴露组合语义中的缺口。
路线图
接下来会继续推进解释器执行引擎、扩大 ECMA-335 覆盖范围,并建立 Unity 集成与自动化兼容性测试矩阵。最终希望让解释器与 AOT 后端共享同一套运行时基础,而不是成为两套互不一致的系统。
