IL2C — транслятор (транспилятор) ECMA-335 CIL/MSIL на язык C.
Мы стремимся к:
Лучшая предсказуемость затрат во время выполнения
Улучшенная читабельность исходного кода C, переведенного с помощью IL2C.
Очень малые требования к занимаемой площади
Мы думаем о том, как превратить большую систему с множеством ресурсов в крошечную встроенную систему. (Заказ базы знаний для системы, отличной от ОС)
Улучшенная переносимость кода и среды выполнения.
Минимальное требование — только компилятор 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("Привет, мир с IL2C!");}}
Переведено на C исходный код (все комментарии удалены):
IL2C_CONST_STRING(string0__, L"Привет, мир с 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, см. «Внутри IL2C».
Следующие списки автоматически генерируются модульным тестом.
Список поддерживаемых кодов операций IL
Поддерживаемые базовые типы
Поддерживаемые функции системы выполнения
Поддерживаемые функции (старые)
Пакеты | владелец | развивать |
---|---|---|
IL2C.Build | ||
IL2C.Интероп | ||
IL2C.Core | ||
IL2C.Runtime | ||
IL2C.Runtime.msvc | ||
IL2C.Runtime.Arduino | (Строительство) | (Строительство) |
Конфигурация | владелец |
---|---|
Публиковать | |
Отлаживать | |
Выпускать |
Конфигурация | развивать |
---|---|
Публиковать | |
Отлаживать | |
Выпускать |
Под Apache v2.
Слайд: Изготовление архива IL2C
Охватывает общую информацию о внутреннем IL2C.
Сессия №6-52 на конференции dotNET 600 2018.
Слайд: Пишите обычно, бегайте где угодно
Сессия № 6–51 на конференции dotNET 600 2017.
Видео сессии (японский)
Калькулятор польской записи: минимальные, но полезные возможности для «Win32», «UEFI» и «M5Stack(ESP32)».
Слайд: Как сделать калькулятор / Делаем архив IL2C
Сессия № 6–52 на конференции .NET Fringe Japan 2018.
Слайд: Изготовление архива IL2C
Сессия #6–53 на встрече MVP Summit F# / SEATTLE F# USERS GROUP
Слайд: Изготовление архива IL2C
Сессия №6-54 на Microsoft MVP Global Summit 2018 – VS HACKATHON"
Видео сессии (на японском языке): «Составление архива плейлиста IL2C»
«Как создать IL2C или инструмент, аналогичный IL2CPP? Видите ли, чистый процесс проектирования включает в себя концепцию».
Сеанс №1 в Центре ЦЛР №6
Видеописьмо (японский): Протестировано IL2C на платформах micro:bit и arduino.
Видео сессии (японский): Создание архива IL2C
Сессия № 6–28 на конференции .NET Conf 2017 в Токио, зал B
Информация о этапе 2+ (японский): Расширенный набор Xamarin — Xamaritans
включен в буклет «Extensive Xamarin — Techbook Fest, часть 3»
#6-6: Близкие вехи
№ 6-14: Анализ потока данных
Этап 1. Протестируйте на VC++ и проверьте, как работает оптимизатор компилятора C.
#6-48: Как работает сборка мусора методом пометки и очистки в переведенном коде.
Как работает исчисление символов перегрузки/переопределения/виртуального метода.
Как преобразовать обработчики исключений при объединении локальной и глобальной очистки.
Мы в Центре CLR думаем о Try! встреча разработчиков (10.11.2018, японский)
Это граф структуры для кадра выполнения и кадра исключения.