Di Topi Merah
Pada tahap pengembangan saat ini, penerjemah ke dalam representasi perantara MIR dipersiapkan
Kode MIR perantara dapat disajikan dalam bentuk biner dan teks (dapat dibaca). Kode ini dapat dieksekusi dalam penerjemah dan kode mesin dapat dibuat berdasarkan itu (x86_64, dalam paket ARM64, PPC64, dan MIPS64). Dimungkinkan juga untuk melakukan konversi terbalik - dari MIR ke CIL, bytecode Java, WebAssembly dan kode C.
Di antara fitur-fitur MIR, pengetikan yang ketat, dukungan untuk modul dan fungsi, penyediaan serangkaian instruksi untuk konversi tipe, perbandingan, operasi aritmatika dan logika, percabangan, dll. Modul, yang mencakup sekumpulan fungsi yang dikonversi ke format MIR, dapat dimuat dalam bentuk perpustakaan, dan juga dapat memuat kode C eksternal.
Keuntungan utama mengeksekusi kode perantara di JIT dibandingkan mengkompilasi menjadi file asli yang dapat dieksekusi adalah kemampuan untuk menghasilkan file ringkas yang dapat dieksekusi tanpa membangun kembali arsitektur perangkat keras yang berbeda (x86, ARM, PPC, MIPS). Untuk arsitektur yang tidak didukung, mode interpretasi tersedia, yang dalam kasus MIR 6-10 kali lebih lambat dibandingkan JIT.
Kekurangan kompiler JIT yang ada
GCC dan LLVM dikatakan terlalu membengkak, memiliki kecepatan kompilasi yang rendah, dan sulit untuk mengimplementasikan optimasi gabungan untuk bahasa pemrograman yang berbeda. Pengembang MIR mencoba menyelesaikannya
masalah dan menetapkan tujuan:
- Kompilasi di MIR setidaknya harus 100 kali lebih cepat dibandingkan di GCC;
- JIT untuk eksekusi MIR harus sangat kompak dan mencakup sekitar 15 ribu baris kode;
- Mengeksekusi MIR menggunakan JIT tidak boleh lebih dari 30% lebih lambat dibandingkan kinerja executable yang dikompilasi dari kode C yang sama di GCC (dengan optimasi "-O2");
- Tahap inisialisasi sebelum eksekusi sebenarnya dimulai akan memakan waktu 100 kali lebih sedikit;
- Representasi MIR untuk JIT harus 100 kali lebih kecil dari representasi MIR yang dikompilasi di GCC.
Dalam bentuknya saat ini, implementasi MIR dalam banyak hal lebih maju dari tujuan yang ditetapkan sebelumnya: pengujian menunjukkan bahwa kinerja kompilasi di MIR 2 kali lebih cepat daripada βGCC -O178β, kinerja eksekusi 6% di belakang kode asli, ukuran kode 144 kali lebih kecil, implementasi MIR JIT adalah 16 ribu baris kode.
Sumber: opennet.ru