Kompiler Rust yang Ditulis dalam C
(notgull.net)Mengapa menulis kompiler Rust dalam C?
-
Ada beberapa alasan mengapa aktivitas saya belakangan ini berkurang
- Peristiwa pribadi seperti kematian anggota keluarga
- Bertambahnya tanggung jawab di tempat kerja
- Berkurangnya gairah terhadap open source
- Fokus pada proyek baru
-
Proyek ini adalah menulis kompiler Rust murni dalam C
- Ditulis murni dalam C tanpa C++,
flex,yacc, atauMakefile - Nama proyeknya adalah Dozer
- Ditulis murni dalam C tanpa C++,
Mengapa melakukan ini?
- Kita perlu memahami bootstrapping dan pentingnya
- Untuk menjalankan kode Rust, dibutuhkan kompiler
- Kompiler utama Rust adalah rustc
- rustc ditulis dalam Rust dan diperlukan untuk mengompilasi kode Rust
- Untuk mengompilasi rustc, dibutuhkan versi rustc yang lebih lama
- Versi awal rustc ditulis dalam OCaml
- Kompiler OCaml dapat dikompilasi dengan Guile, dan Guile ditulis dalam C
Prinsip penurunan
-
Pengenalan proyek Bootstrappable Builds
- Dimulai dari seed biner 512-byte
- Secara bertahap menghasilkan kompiler yang lebih kompleks dari kompiler sederhana
- Pada akhirnya dapat mengompilasi TinyCC, GCC, Linux, dan lainnya
-
Rust muncul sangat terlambat dalam proses ini
- Menggunakan mrustc untuk mengompilasi rustc versi 1.56
- Jika ingin menggunakan Rust sebelum pengenalan C++, itu tidak memungkinkan
-
Dozer menargetkan kompiler Rust yang dapat di-bootstrap dengan C
- Harus bisa di-bootstrap dengan TinyCC
Rencana
-
Mengerjakan Dozer selama dua bulan terakhir
- Dapat dikompilasi dengan TinyCC dan cproc
- Menggunakan QBE sebagai backend
- Saat ini lexer dan sebagian parser sudah selesai
- Perluasan macro/modul sedang ditunda
- Pemeriksaan tipe hanya mendukung
i32 - Pembuatan kode masih belum memadai
-
Rencana ke depan
- Mengembangkan Dozer secara bertahap agar dapat mengompilasi sampel
libcdasar,libcore, dan rustc - Membuat alat mirip
cargoagar dapat mengompilasi paket Rust - Menghapus kode yang dibuat secara otomatis
- Membuat proses untuk mengompilasi rustc dan
cargo
- Mengembangkan Dozer secara bertahap agar dapat mengompilasi sampel
Ringkasan GN⁺
- Tulisan ini membahas proyek untuk menulis kompiler Rust murni dalam C
- Menjelaskan pentingnya bootstrapping dan proses membuat kompiler Rust melalui pendekatan itu
- Proyek Dozer menargetkan kompiler Rust yang dapat di-bootstrap dengan C
- Proyek ini sangat menantang, dan meski keberhasilannya belum pasti, upayanya sendiri sudah bermakna
1 komentar
Komentar Hacker News
Untuk melakukan bootstrap Rust, tampaknya lebih baik menulis proto-Rust dalam C terlebih dahulu, lalu menulis kompiler Rust penuh dengan proto-Rust
Sebagai hobi, saya sedang menulis kompiler C dalam Rust, dan menyebutnya "Small C Compiler"
printf("Hello World!")typedefMasalah bootstrap yang sama juga ada pada hardware
Saya harus mengikuti 4 tautan untuk menemukan manfaat dari bootstrap
Jika C++ diperkenalkan ke rantai bootstrap, bootstrap itu praktis sudah berakhir
Untuk menghasilkan biner baru pada sistem target, rustc harus mendukung sistem tersebut
Saya membayangkan menulis interpreter atau kompiler C++ dalam Scheme
Jika melihat keseluruhan stack, ini bisa menjadi cara untuk menghindari masalah "trusting trust"
Saya suka penggunaan QBE sebagai backend
Patut dipertimbangkan untuk menggunakan FORTH sebagai bagian dari toolchain dalam proses bootstrap