✦

烜的小屋

烜的小屋
✦首页⌘项目◷归档♫音乐☁杂谈♡关于
封面

LuminCLR:用 C++17 探索 .NET Runtime 与 AOT

写作时间:2026-07-24 22:00:00
# C++17
# .NET Runtime
# AOT
# ECMA-335
◉0 次浏览

一个实验性 .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 后端共享同一套运行时基础,而不是成为两套互不一致的系统。

项目源码:TheLight-233/LuminCLR

💬

评论区准备中

已移除模板中存在安全风险的旧 Gitalk 依赖。新的 GitHub Discussions 评论系统接入前,可以通过邮箱与我交流。

发送邮件
avatar

Light

专注高性能 C#、.NET Runtime、Unity 与网络基础设施,把对性能的执着写进每一行代码。

RECOMMENDED

LuminNet:从传输层到强类型 RPC 的高性能网络框架

2026-07-18 19:45:00

LuminPack:为 C# 与 Unity 打造的高性能序列化

2026-08-01 21:30:00

LuminTask:低分配 async/await 的一次系统化实践

2026-07-29 20:10:00

Table of Contents