Chibil:针对.NET IL的C编译器

Hacker News Top 工具

摘要

Chibil 是一个用C#编写的C编译器,针对.NET IL,能将C代码编译为.NET可执行文件。它基于chibicc,并能运行DOOM。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/31 16:35

MichalStrehovsky/chibil

源码:https://github.com/MichalStrehovsky/chibil

Chibil C 编译器

什么是 Chibil

Chibil 是一款基于 chibicc (https://github.com/rui314/chibicc) 的 C 编译器,使用 C# 重写并更新为面向 .NET IL (MSIL)。

它已足够完整,能够运行 DOOM (PureDOOM)。

管线

Chibil 接收 C 源文件并生成 COFF OBJ 文件。这些 OBJ 文件与 MSVC 编译器在 /clr 模式下生成的 OBJ 文件二进制兼容。使用 Visual Studio 的 link.exe 将这些目标文件链接在一起,生成最终的可执行文件。实际上,你可以混合使用 C++/CLI 和 Chibil 生成的目标文件。

Chibil 日后可能会自带链接器,原因之一至少是为了摆脱对 Windows 的依赖。

调试

行号和局部变量按预期工作。你可以在 .NET 调试器中单步调试 C 代码。

标准 C 库

没有标准 C 库。

crt 目录下有一个最小化的 C 运行时库存根。它提供了一个可运行的 main,接受 string[] 参数并分发给标准的 C 语言 main(带 argcargv)。生成的程序集通过 asm2obj 工具转换为 COFF 目标文件,可以与 C 代码链接在一起,形成带有可运行 main 的程序。

从 .NET 代码中使用 C 代码

此功能尚未完成。代码被生成到全局命名空间中,因此如果你希望从其他 .NET 代码中使用编译后的代码(即不打算直接运行 EXE),则需要使用反射,例如 Module.GetMethod (https://learn.microsoft.com/dotnet/api/system.reflection.module.getmethod) 来查找方法,并通过反射调用它们。

实用工具

tools/coffobjdumper.cs 文件包含一个 COFF OBJ 转储器,用于转储 .NET OBJ 文件。它是 ILDASM(桌面 CLR ILDASM!)的良好补充:ILDASM 可以转储 COFF OBJ 文件中的 .NET 元数据,但不显示方法体;而 dumpbin.exe 可以转储 COFF 对象中的各种内容,但对 .NET 元数据的支持有限。

相似文章

QBE - 编译器后端:版本 1.3

Lobsters Hottest

QBE 1.3 是一个重要的编译器后端版本,新增了 7000 行代码,引入了一种新的 IL 匹配算法,针对 coremark 基准测试进行了优化(性能从 gcc -O2 的 40% 提升到超过 63%),支持 Windows ABI 和位置无关代码生成。

56,000行DOOM代码,用我自创的语言编写

Hacker News Top

作者构建了一种名为bet的玩笑编程语言,通过LLVM编译,采用基于区域的内存管理,并且成功运行了完整的DOOM游戏(56,000行代码),无需代码审查,仅依赖测试。

Show HN: Nibble

Hacker News Top

Nibble 是一种类 C 的系统编程语言,用 3000 行 C 代码实现,无需外部依赖或堆分配即可生成 LLVM IR。它支持 defer、递归、多种类型、结构体、指针,并包含图形演示。