Tim bahasa pemrograman Roc telah mengumumkan rencana untuk menulis ulang kompilator mereka dari Rust ke Zig, memicu diskusi signifikan di komunitas pengembang tentang pilihan bahasa untuk pemrograman tingkat sistem. Keputusan ini diambil saat tim mempersiapkan rilis pertama bernomor Roc, versi 0.1.0.
Masalah Waktu Kompilasi Mendorong Perubahan
Inti dari transisi ini terletak pada masalah kritis yang sangat beresonansi dengan komunitas pengembang: kecepatan kompilasi. Respons komunitas menyoroti bagaimana waktu kompilasi yang lambat dapat secara signifikan mempengaruhi produktivitas dan kepuasan pengembang. Seperti yang dicatat oleh seorang pengembang dalam diskusi:
Saya sering menggunakan Rust tetapi, Roc benar: waktu kompilasi tidak sebanding dengan keamanan yang didapat. Setidaknya dalam proyek saya.
Di Balik Kecepatan: Pertimbangan Teknis
Diskusi komunitas mengungkapkan bahwa meskipun waktu kompilasi adalah faktor utama, keputusan ini mencakup pertimbangan teknis yang lebih luas. Para pengembang menunjukkan bahwa Zig menawarkan beberapa keunggulan untuk pengembangan kompilator, termasuk penanganan static linking yang lebih baik, operasi tingkat bit yang lebih intuitif, dan manajemen memori yang disederhanakan melalui explicit allocator passing. Komunitas terutama menekankan pendekatan pragmatis Zig terhadap pemrograman sistem, memposisikannya sebagai jalan tengah antara minimalisme C dan kompleksitas Rust.
Motivasi Utama untuk Migrasi ke Zig:
- Waktu kompilasi yang lebih cepat
- Dukungan static linking yang lebih baik
- Operasi tingkat bit yang lebih intuitif
- Model pengelolaan memori yang lebih sederhana
- Generasi bitcode LLVM secara langsung
- Dukungan MultiArrayList untuk pemrograman struct-of-arrays
Konteks Evolusi Bahasa
Perspektif menarik yang muncul dari diskusi komunitas adalah bagaimana lanskap bahasa pemrograman sistem telah berkembang. Sementara Rust adalah pilihan alami ketika kompilator Roc pertama kali ditulis pada 2019, Zig telah matang secara signifikan sejak saat itu. Para pengembang mencatat bahwa ini mencerminkan tren yang lebih luas dalam industri, di mana proyek-proyek yang lebih baru semakin mempertimbangkan Zig untuk tugas pemrograman sistem yang beberapa tahun lalu secara default akan menggunakan Rust.
Perubahan Compiler yang Direncanakan:
- Penulisan ulang parser menjadi recursive descent
- Pemformat baru dengan pembatasan lebar baris
- Sistem resolusi nama yang direvisi
- Peningkatan generasi dokumentasi
- Pembaruan monomorphization tanpa Morphic
- Generasi kode baru berbasis LLVM bitcode
- Pengalihan backend pengembangan ke interpreter
Perdebatan Implementasi Parser
Poin teknis yang menjadi perdebatan dalam komunitas berpusat pada keputusan tim untuk beralih dari parser combinators ke recursive descent parsing. Sementara beberapa pengembang berpendapat bahwa parser combinators pada dasarnya adalah recursive descent dengan fitur tambahan, yang lain mendukung perubahan ini, dengan mengutip kemampuan penanganan kesalahan yang lebih baik dalam parser yang ditulis manual.
Penulisan ulang ini merepresentasikan pergeseran signifikan dalam lanskap pemrograman sistem, di mana pertimbangan praktis seperti kecepatan kompilasi dan ergonomi pengembangan semakin menantang dominasi keamanan memori sebagai faktor keputusan utama untuk pemilihan bahasa.
Catatan Teknis:
- Parser combinators: Teknik pemrograman fungsional untuk membangun parser dengan menggabungkan fungsi parsing yang lebih kecil
- Recursive descent: Teknik parsing top-down di mana setiap non-terminal dalam tata bahasa memiliki fungsi parsing sendiri
- Static linking: Proses di mana pustaka dibangun ke dalam executable final, membuatnya lebih portabel di berbagai sistem
Referensi: Rewriting a Language's Compiler in Itself