IL2C是ECMA-335 CIL/MSIL到C语言的翻译器(transpiler)。
我们的目标是:
更好地预测运行时间成本
IL2C 翻译的 C 源代码具有更好的人类可读性。
占地面积要求非常小
我们正在考虑如何从具有许多资源的大型系统适应小型嵌入式系统。 (非操作系统系统的知识库顺序)
更好的代码/运行时可移植性
最低要求仅为 C99 编译器。运行时最小值仅需要堆、CAS 指令、(POSIX) 信号和 setjmp/longjmp。其他更好的功能是线程 API(Win32、pthreads 和 FreeRTOS。)
现有 C 库更好的互操作性
您可以使用标准 .NET 互操作技术(如 P/Invoke)。
包含主要 C 工具包的无缝构建系统
例如:CMake系统、Arduino IDE、VC++...
原始C#源代码:
public static class HelloWorld{public static void Main(){Console.WriteLine("Hello world with IL2C!");}}
翻译为 C 源代码(所有注释均已删除):
IL2C_CONST_STRING(string0__, L"Hello world with IL2C!");void HelloWorld_Main() {struct{const IL2C_EXECUTION_FRAME* pNext__;const uint16_t objRefCount__;const uint16_t valueCount__;System_String* stack0_0__; }frame__ = { NULL, 1, 0 };il2c_link_execution_frame(&frame__);frame__.stack0_0__ = string0__;System_Console_WriteLine_10(frame__.stack0_0__);il2c_unlink_execution_frame(&frame__);return; }
查看带有评论/其他示例翻译结果(包含复杂结果)
IL2C 目前处于实验阶段,第一步请阅读简单的“入门”。
如果您需要深入了解 IL2C,请参阅“Inside IL2C”。
以下列表是由单元测试自动生成的。
支持的 IL 操作码列表
支持的基本类型
支持的运行时系统功能
支持的功能(旧)
套餐 | 掌握 | 开发 |
---|---|---|
IL2C构建 | ||
IL2C互操作 | ||
IL2C核心 | ||
IL2C运行时 | ||
IL2C.运行时.msvc | ||
IL2C.运行时.Arduino | (建设中) | (建设中) |
配置 | 掌握 |
---|---|
发布 | |
调试 | |
发布 |
配置 | 开发 |
---|---|
发布 | |
调试 | |
发布 |
在 Apache v2 下。
幻灯片:制作存档 IL2C
涵盖有关内部 IL2C 的总体信息。
dotNET 600 2018 会议中的#6-52 会议。
幻灯片:编写通用,随处运行
dotNET 600 2017 会议中的#6-51 会议
会议视频(日语)
波兰表示法计算器:“Win32”、“UEFI”和“M5Stack(ESP32)”的最小但有用的实现
幻灯片:如何制作计算器 / 制作存档 IL2C
2018 年 .NET Fringe 日本第 6-52 场会议
幻灯片:制作存档 IL2C
MVP 峰会 F# 聚会 / 西雅图 F# 用户组第 6-53 场会议
幻灯片:制作存档 IL2C
2018 年 Microsoft MVP 全球峰会第 6-54 场会议 – VS HACKATHON”
会议视频(日语):“制作存档 IL2C 播放列表”
“如何创建 IL2C 或类似于 IL2CPP 的工具?你会看到纯粹的设计过程包含了这个概念。”
Center CLR #6 中的 #1 会话
视频信件(日语):在 micro:bit 和 arduino 平台上测试 IL2C
会议视频(日语):制作档案 IL2C
.NET Conf 2017 东京 B 室第 6-28 场会议
里程碑 2+ 信息(日语):广泛的 Xamarin - Xamaritans
包含在小册子“广泛的 Xamarin - Techbook Fest 第 3 部分”中
#6-6:接近里程碑
#6-14:数据流分析
里程碑 1:在 VC++ 上进行测试并检查 C 编译器的优化器如何工作。
#6-48:标记和清除垃圾回收如何在翻译后的代码上工作。
重载/覆盖/虚拟方法符号演算如何工作。
结合本地展开和全局展开时如何转换异常处理程序。
我们正在考虑在CLR中心尝试一下!开发聚会(2018 年 10 月 11 日,日语)
这是执行帧和异常帧的结构图。