IL2C เป็นนักแปล (transpiler) ของ ECMA-335 CIL/MSIL เป็นภาษา C
เรามุ่งเป้าไปที่:
สามารถคาดการณ์ต้นทุนรันไทม์ได้ดีขึ้น
ความสามารถในการอ่านซอร์สโค้ด C ของมนุษย์ที่ดีขึ้นซึ่งแปลโดย IL2C
ข้อกำหนดพื้นที่ขนาดเล็กมาก
เรากำลังคิดถึงวิธีการปรับให้เหมาะสมตั้งแต่ระบบขนาดใหญ่ที่มีทรัพยากรจำนวนมากไปจนถึงระบบฝังตัวขนาดเล็ก (คำสั่ง KB สำหรับระบบที่ไม่ใช่ระบบปฏิบัติการ)
ความสามารถในการพกพาโค้ด / รันไทม์ที่ดีขึ้น
ข้อกำหนดขั้นต่ำคือคอมไพเลอร์ C99 เท่านั้น รันไทม์ขั้นต่ำต้องใช้เฉพาะฮีป, คำสั่ง CAS, สัญญาณ (POSIX) และ setjmp/longjmp คุณสมบัติที่ดีกว่าเพิ่มเติมคือเธรด API (Win32, pthreads และ FreeRTOS)
การทำงานร่วมกันที่ดีขึ้นสำหรับไลบรารี C ที่มีอยู่
คุณสามารถใช้เทคนิคการทำงานร่วมกันของ .NET มาตรฐาน (เช่น P/Inrigg)
มีระบบการสร้างที่ไร้รอยต่อสำหรับชุดเครื่องมือ C หลัก
เช่น ระบบ CMake, Arduino IDE, VC++ ...
ซอร์สโค้ด C # ดั้งเดิม:
คลาสคงที่สาธารณะ HelloWorld {โมฆะสาธารณะคงที่ Main () {Console.WriteLine ("สวัสดีชาวโลกด้วย IL2C!");}}
แปลเป็นซอร์สโค้ด C (ความคิดเห็นทั้งหมดถูกถอดออก):
IL2C_CONST_STRING(string0__, L"สวัสดีชาวโลกด้วย IL2C!");ถือเป็นโมฆะ 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 โปรดดู "Inside IL2C"
รายการต่อไปนี้สร้างขึ้นโดยอัตโนมัติโดยการทดสอบหน่วย
รายการ opcodes ของ IL ที่รองรับ
ประเภทพื้นฐานที่รองรับ
คุณสมบัติระบบรันไทม์ที่รองรับ
คุณสมบัติที่รองรับ (เก่า)
แพ็คเกจ | ผู้เชี่ยวชาญ | พัฒนา |
---|---|---|
IL2C.สร้าง | ||
IL2C.Interop | ||
IL2C.Core | ||
IL2C.รันไทม์ | ||
IL2C.Runtime.msvc | ||
IL2C.รันไทม์.Arduino | (กำลังก่อสร้าง) | (กำลังก่อสร้าง) |
การกำหนดค่า | ผู้เชี่ยวชาญ |
---|---|
เผยแพร่ | |
ดีบัก | |
ปล่อย |
การกำหนดค่า | พัฒนา |
---|---|
เผยแพร่ | |
ดีบัก | |
ปล่อย |
ภายใต้อาปาเช่ 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 F# Meetup / SEATTLE F# USERS GROUP
สไลด์: การสร้างไฟล์เก็บถาวร IL2C
เซสชั่น #6-54 ใน Microsoft MVP Global Summit 2018 – VS HACKATHON"
วิดีโอเซสชั่น (ภาษาญี่ปุ่น): "การสร้างรายการเล่น IL2C ที่เก็บถาวร"
"จะสร้าง IL2C หรือเครื่องมือที่คล้ายกับ IL2CPP ได้อย่างไร คุณจะเห็นว่ากระบวนการออกแบบล้วนๆ มีแนวคิดรวมอยู่ด้วย"
#1 เซสชันใน Center CLR #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: วิธีการทำงานของการรวบรวมขยะแบบทำเครื่องหมายและกวาดบนโค้ดที่แปลแล้ว
แคลคูลัสสัญลักษณ์วิธีโอเวอร์โหลด/แทนที่/เสมือนทำงานอย่างไร
วิธีแปลตัวจัดการข้อยกเว้นเมื่อรวมการผ่อนคลายแบบท้องถิ่นและการผ่อนคลายแบบสากล
เรากำลังคิดถึง Center CLR Try! การประชุมเพื่อการพัฒนา (11/10/2018, ภาษาญี่ปุ่น)
นี่คือกราฟโครงสร้างสำหรับเฟรมการดำเนินการและเฟรมข้อยกเว้น