ที่หมวกแดง
ในขั้นตอนการพัฒนาปัจจุบัน มีการเตรียมนักแปลในระดับกลางของ MIR ไว้
รหัส MIR ระดับกลางสามารถนำเสนอในรูปแบบไบนารีและข้อความ (อ่านได้) รหัสนี้สามารถดำเนินการได้ในล่ามและสามารถสร้างรหัสเครื่องได้ (x86_64 ในแผน ARM64, PPC64 และ MIPS64) นอกจากนี้ยังสามารถทำการแปลงแบบย้อนกลับได้ - จาก MIR เป็น CIL, Java bytecode, WebAssembly และโค้ด C
ในบรรดาคุณสมบัติของ MIR การพิมพ์ที่เข้มงวด การรองรับโมดูลและฟังก์ชัน การจัดเตรียมชุดคำสั่งสำหรับการแปลงประเภท การเปรียบเทียบ การดำเนินการทางคณิตศาสตร์และตรรกะ การแยกสาขา ฯลฯ มีความโดดเด่น โมดูลซึ่งรวมถึงชุดของฟังก์ชันที่แปลงเป็นรูปแบบ MIR สามารถโหลดได้ในรูปแบบของไลบรารี และยังสามารถโหลดโค้ด C ภายนอกได้อีกด้วย
ข้อได้เปรียบที่สำคัญของการรันโค้ดระดับกลางใน JIT แทนที่จะคอมไพล์เป็นไฟล์ปฏิบัติการดั้งเดิมคือความสามารถในการสร้างไฟล์ขนาดกะทัดรัดที่สามารถดำเนินการได้โดยไม่ต้องสร้างใหม่บนสถาปัตยกรรมฮาร์ดแวร์ที่แตกต่างกัน (x86, ARM, PPC, MIPS) สำหรับสถาปัตยกรรมที่ไม่รองรับ โหมดการตีความจะพร้อมใช้งาน ซึ่งในกรณีของ MIR จะช้ากว่า JIT 6-10 เท่า
ข้อเสียของคอมไพเลอร์ JIT ที่มีอยู่
กล่าวกันว่า GCC และ LLVM มีมากเกินไป มีความเร็วในการคอมไพล์ต่ำ และยากต่อการเพิ่มประสิทธิภาพแบบรวมสำหรับภาษาโปรแกรมต่างๆ นักพัฒนา MIR พยายามแก้ไขปัญหาเหล่านี้
ปัญหาและเป้าหมายที่ตั้งไว้:
- การรวบรวมใน MIR ควรเร็วกว่าใน GCC อย่างน้อย 100 เท่า
- JIT สำหรับการดำเนินการ MIR ต้องมีขนาดกะทัดรัดมากและมีโค้ดประมาณ 15 บรรทัด
- การดำเนินการ MIR โดยใช้ JIT ไม่ควรช้ากว่าประสิทธิภาพของไฟล์ปฏิบัติการที่คอมไพล์จากรหัส C เดียวกันใน GCC ไม่เกิน 30% (พร้อมการปรับให้เหมาะสม "-O2")
- ขั้นตอนการเริ่มต้นก่อนที่การดำเนินการจริงจะเริ่มขึ้นควรใช้เวลาน้อยลง 100 เท่า
- การแสดง MIR สำหรับ JIT ต้องเล็กกว่าไฟล์ปฏิบัติการที่คอมไพล์ใน GCC 100 เท่า
ในรูปแบบปัจจุบัน การใช้งาน MIR นั้นเหนือกว่าเป้าหมายที่ตั้งไว้ในตอนแรกหลายประการ: การทดสอบแสดงให้เห็นว่าประสิทธิภาพการคอมไพล์ใน MIR นั้นเร็วกว่า "GCC -O2" ถึง 178 เท่า ประสิทธิภาพการดำเนินการนั้นช้ากว่าโค้ดเนทีฟ 6% ขนาดโค้ด มีขนาดเล็กกว่า 144 เท่า การใช้งาน MIR JIT คือโค้ด 16 บรรทัด
ที่มา: opennet.ru