IL2C é um tradutor (transpilador) de ECMA-335 CIL/MSIL para linguagem C.
Nosso objetivo é:
Melhor previsibilidade dos custos de tempo de execução
Melhor legibilidade humana do código-fonte C traduzido pelo IL2C.
Requisitos de pegada muito pequena
Estamos pensando em como adaptar um sistema grande com muitos recursos a um pequeno sistema embarcado. (Ordem KB para o sistema não-SO)
Melhor portabilidade de código/tempo de execução
O requisito mínimo é apenas o compilador C99. O tempo de execução mínimo requer apenas heap, instruções CAS, sinal (POSIX) e setjmp/longjmp. Um recurso adicional melhor é a API de threading (Win32, pthreads e FreeRTOS).
Melhores interoperabilidades para bibliotecas C existentes
Você pode usar as técnicas de interoperabilidade padrão do .NET (como P/Invoke).
Contendo sistemas de construção contínuos para os principais kits de ferramentas C
por exemplo: sistema CMake, Arduino IDE, VC++ ...
Código-fonte original em C#:
classe estática pública HelloWorld{public static void Main(){Console.WriteLine("Olá mundo com IL2C!");}}
Traduzido para o código-fonte C (todos os comentários foram removidos):
IL2C_CONST_STRING(string0__, L"Olá mundo com 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; }
Ver com comentários/outros resultados de tradução de amostra (contêm resultados complexos)
O status atual do IL2C é experimental , leia um simples "Introdução" para a primeira etapa.
Se você precisar de um conhecimento profundo sobre IL2C, consulte "Por dentro do IL2C" .
As listas a seguir são geradas automaticamente por teste de unidade.
Lista de opcodes IL suportados
Tipos básicos suportados
Recursos do sistema de tempo de execução suportados
Recursos suportados (antigos)
Pacotes | mestre | desenvolver |
---|---|---|
IL2C.Build | ||
IL2C.Interoperabilidade | ||
IL2C.Core | ||
IL2C.Tempo de execução | ||
IL2C.Runtime.msvc | ||
IL2C.Runtime.Arduino | (Construindo) | (Construindo) |
Configuração | mestre |
---|---|
Publicar | |
Depurar | |
Liberar |
Configuração | desenvolver |
---|---|
Publicar | |
Depurar | |
Liberar |
No Apache v2.
Slide: Criando arquivo IL2C
Abrange informações gerais sobre o IL2C interno.
Sessão #6-52 na conferência dotNET 600 2018.
Slide: Escreva comum, execute em qualquer lugar
Sessão #6-51 na conferência dotNET 600 2017
Vídeo da sessão (japonês)
Calculadora de notação polonesa: implementações mínimas, mas úteis para "Win32", "UEFI" e "M5Stack(ESP32)"
Slide: Como fazer a calculadora / Fazendo arquivo IL2C
Sessão #6-52 no .NET Fringe Japan 2018
Slide: Criando arquivo IL2C
Sessão #6-53 no MVP Summit F# Meetup / SEATTLE F# USERS GROUP
Slide: Criando arquivo IL2C
Sessão #6-54 no Microsoft MVP Global Summit 2018 – VS HACKATHON"
Vídeo da sessão (japonês): "Criando lista de reprodução IL2C de arquivo"
"Como criar o IL2C ou uma ferramenta semelhante ao IL2CPP? Você vê que apenas o processo de design puro inclui o conceito."
Sessão nº 1 no Center CLR #6
Carta de vídeo (japonês): IL2C testado nas plataformas micro:bit e arduino
Vídeo da sessão (japonês): Fazendo arquivo IL2C
Sessão #6-28 na .NET Conf 2017 na Sala B de Tóquio
Informações do Milestone 2+ (japonês): Extenso Xamarin - Xamaritanos
incluído no livreto "Extensive Xamarin - Techbook Fest parte 3"
#6-6: Marcos próximos
#6-14: Análise de fluxo de dados
Marco 1: Teste no VC++ e verifique como funciona o otimizador do compilador C.
#6-48: Como funciona a coleta de lixo de marcação e varredura em um código traduzido.
Como funciona o cálculo de símbolos de sobrecarga/substituição/método virtual.
Como traduzir manipuladores de exceção quando combinados o desenrolamento local e o desenrolamento global.
Estamos pensando no Center CLR Try! encontro de desenvolvimento (10/11/2018, japonês)
Este é o gráfico de estrutura para o quadro de execução e o quadro de exceção.