- Notifications
You must be signed in to change notification settings - Fork36
IL2C - A translator for ECMA-335 CIL/MSIL to C language.
License
kekyo/IL2C
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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
Original C# source code:
publicstaticclassHelloWorld{publicstaticvoidMain(){Console.WriteLine("Hello world with IL2C!");}}
Translated to C source code (all comments are stripped):
IL2C_CONST_STRING(string0__,L"Hello world with IL2C!");voidHelloWorld_Main(){struct {constIL2C_EXECUTION_FRAME*pNext__;constuint16_tobjRefCount__;constuint16_tvalueCount__;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)
IL2C current status isexperimental, read a simple"Getting started" for first step.
If you need understanding deep knowledge for IL2C, see"Inside IL2C" .
Following lists are auto-generated by unit test.
Packages | master | devel |
---|---|---|
IL2C.Build | ||
IL2C.Interop | ||
IL2C.Core | ||
IL2C.Runtime | ||
IL2C.Runtime.msvc | ||
IL2C.Runtime.Arduino | (Constructing) | (Constructing) |
Configuration | master |
---|---|
Publish | |
Debug | |
Release |
Configuration | devel |
---|---|
Publish | |
Debug | |
Release |
Under Apache v2.
Slide:Making archive IL2C
- Covers overall information about internal IL2C.
- #6-52 session indotNET 600 2018 conference.
Slide:Write common, run anywhere
- #6-51 session indotNET 600 2017conference
- 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 inMVP Summit F# Meetup / SEATTLE F# USERS GROUP
Slide:Making archive IL2C
- #6-54 session inMicrosoft 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 inCenter 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"
#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 atCenter CLR Try! development meetup (11/10/2018, Japanese)
This is the strcuture graph for the exection-frame and exception-frame.
About
IL2C - A translator for ECMA-335 CIL/MSIL to C language.