il2c - IL2C.Build 0.4.377
A translator implementation of .NET intermediate language to C language.
PM> Install-Package IL2C.Build -Version 0.4.377 -Source https://www.myget.org/F/il2c/api/v3/index.json
> nuget.exe install IL2C.Build -Version 0.4.377 -Source https://www.myget.org/F/il2c/api/v3/index.json
> dotnet add package IL2C.Build --version 0.4.377 --source https://www.myget.org/F/il2c/api/v3/index.json
> choco install IL2C.Build --version 0.4.377 --source https://www.myget.org/F/il2c/api/v2
Import-Module PowerShellGet
Register-PSRepository -Name "il2c" -SourceLocation "https://www.myget.org/F/il2c/api/v2"
Install-Module -Name "IL2C.Build" -RequiredVersion "0.4.377" -Repository "il2c"
Copy to clipboard
IL2C - A translator for ECMA-335 CIL/MSIL to C language.
What's this?
IL2C is a translator (transpiler) of ECMA-335 CIL/MSIL to C language.
We're aiming for:
- Better predictability of runtime costs
Better human readability of C source code translated by IL2C. - Very tiny footprint requirements
We're thinking about how to fit from large system with many resources to tiny embedded system. (KB order for the non-OSes system) - Better code/runtime portability
Minimum requirement is only C99 compiler. The runtime minimum requires only the heap, CAS instructions, (POSIX) signal and setjmp/longjmp. Additional better feature is threading API (Win32, pthreads and FreeRTOS.) - Better interoperabilities for existed C libraries
You can use the standard .NET interop technics (like P/Invoke.) - Containing seamless building systems for major C toolkits
for example: CMake system, Arduino IDE, VC++ ...
- Better predictability of runtime costs
Simple hello-world like code
Original C# source code:
public static class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello world with IL2C!");
}
}
Translated to C source code (all comments are stripped):
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;
}
View with comments / other sample translation results (contain complex results)
Getting started
IL2C current status is experimental, read a simple "Getting started" for first step.
If you need understanding deep knowledge for IL2C, see "Inside IL2C" .
Project status
Following lists are auto-generated by unit test.
Packages
Packages | master | devel |
---|---|---|
IL2C.Build | ||
IL2C.Interop | ||
IL2C.Core | ||
IL2C.Runtime | ||
IL2C.Runtime.msvc | ||
IL2C.Runtime.Arduino | (Constructing) | (Constructing) |
Build status
Configuration | master |
---|---|
Publish | |
Debug | |
Release |
Configuration | devel |
---|---|
Publish | |
Debug | |
Release |
License
Under Apache v2.
Related information
Slide: Making archive IL2C
- Covers overall information about internal IL2C.
- #6-52 session in dotNET 600 2018 conference.
Slide: Write common, run anywhere
- #6-51 session in dotNET 600 2017 conference
- Session video (Japanese)
Polish notation calculator: Minimum, but useful impls for "Win32", "UEFI" and "M5Stack(ESP32)"
Slide: How to make the calculator / Making archive IL2C
- #6-52 session in .NET Fringe Japan 2018
Slide: Making archive IL2C
- #6-53 session in MVP Summit F# Meetup / SEATTLE F# USERS GROUP
Slide: Making archive IL2C
- #6-54 session in Microsoft MVP Global Summit 2018 – VS HACKATHON"
Session video (Japanese): "Making archive IL2C play list"
- "How to create IL2C or a tool similar to IL2CPP? You see just the pure design process includes the concept."
- #1 session in Center CLR #6
Video letter (Japanese): Tested IL2C on micro:bit and arduino platform
Session video (Japanese): Making archive IL2C
- #6-28 session in .NET Conf 2017 in Tokyo Room B
Milestone 2+ informations (Japanese): Extensive Xamarin - Xamaritans
- included in the booklet "Extensive Xamarin - Techbook Fest part 3"
Photos of design process
#6-6: Near milestones
#6-14: Data flow analysis
Milestone 1: Test on VC++ and check how C compiler's optimizer works.
#6-48: How mark-and-sweep garbage collection works on a translated code.
How overload/override/virtual method symbol calculus work.
How to translate exception handlers when combined the local unwind and global unwind.
- We are thinking about at Center CLR Try! development meetup (11/10/2018, Japanese)
This is the strcuture graph for the exection-frame and exception-frame.
Merge branch 'feature/testcase-enhancement' into devel
- .NETCoreApp 2.2: 2.2.0.0
- .NETCoreApp 3.1: 3.1.0.0
- .NETFramework 4.6.2: 4.6.2.0
- .NETFramework 5.0: 5.0.0.0
- .NETFramework 6.0: 6.0.0.0
OwnersKouji Matsui |
AuthorsKouji Matsui (@kozy_kekyo, @kekyo@mastodon.cloud) |
Project URLhttps://github.com/kekyo/IL2C.git |
LicenseUnknown |
Tagsil2c cil msil translate transpile aot ecma335 c c++ win32 uefi wdm multi-platform systems-programming |
Info18 total downloads |
5 downloads for version 0.4.377 |
Download (2.27 MB) |
Found on the current feed only |
Package history
Version | Size | Last updated | Downloads | Mirrored? | |||
---|---|---|---|---|---|---|---|
![]() |
0.4.377 | 2.27 MB | Sun, 12 Jun 2022 11:07:31 GMT | 5 |
|
||
![]() |
0.4.230 | 2.18 MB | Wed, 11 May 2022 00:22:52 GMT | 4 |
|
||
![]() |
0.4.220 | 2.18 MB | Tue, 10 May 2022 01:42:04 GMT | 4 |
|
||
![]() |
0.4.70-74e1874d02 | 1.33 MB | Sat, 18 May 2019 11:22:13 GMT | 5 |
|