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_unframe_execution___re]; }
查看帶有評論/其他範例翻譯結果(包含複雜結果)
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 日,日文)
這是執行幀和異常幀的結構圖。