2 poin oleh GN⁺ 2023-12-19 | 1 komentar | Bagikan ke WhatsApp

Perkembangan Kompiler Rust Berbasis GCC

  • gccrs, proyek kompiler Rust berbasis GCC, dimulai pada 2014 dan bertujuan mengimplementasikan kompiler Rust di dalam GNU Compiler Collection (GCC).
  • Tujuan gccrs adalah masuk ke rilis GCC 13, tetapi hal itu tidak tercapai dan kini menargetkan untuk disertakan dalam GCC 14 (diperkirakan rilis pada pertengahan 2024).
  • gccrs menargetkan Rust versi 1.49, yang merupakan versi terakhir sebelum const generics diperkenalkan.
  • Salah satu prinsip penting proyek gccrs adalah tidak membuat "superset" dari Rust, melainkan mereplikasi keluaran rustc apa adanya.
  • Pustaka standar Rust terdiri dari beberapa "crate", dan gccrs berfokus mendukung kompilasi crate core dan alloc di antaranya.
  • Saat ini gccrs masih belum dapat mengompilasi crate-crate tersebut karena beberapa fitur yang belum ada, dengan masalah utama berupa belum adanya borrow checker dan kurangnya LLVM intrinsics yang tidak didukung di GCC.

Memanfaatkan Keunggulan Ekosistem GCC

  • Salah satu alasan utama pengembangan gccrs adalah agar dapat memanfaatkan plugin keamanan GCC.
  • gccrs sudah digunakan oleh komunitas homebrew Sega Dreamcast, dan dapat melakukan analisis statis pada kode Rust unsafe dengan menggunakan plugin GCC.
  • Melalui upaya gccrs, fitur tambahan untuk spesifikasi Rust dapat ikut disumbangkan, dan proyek ini ingin berpartisipasi dalam penyusunan spesifikasi resmi Rust.

Fitur yang Sedang Dikembangkan

  • gccrs masih kekurangan banyak fitur inti, termasuk async/await, LLVM intrinsics yang tidak ada di GCC, dan makro format_args!().
  • Proyek Polonius mengimplementasikan borrow checker yang menghitung lifetime referensi dengan algoritme berbeda untuk mengatasi kekurangan borrow checker rustc saat ini.
  • Pengerjaan makro format_args!() telah dimulai, dan ini diperlukan untuk menyusun argumen yang diteruskan ke makro pemformatan string lainnya.

rustc_codegen_gcc

  • rustc_codegen_gcc adalah proyek Rust berbasis GCC lain yang lebih matang dan memiliki cakupan lebih terbatas dibanding gccrs.
  • rustc_codegen_gcc menggunakan pustaka libgccjit untuk terhubung ke API backend LLVM milik rustc, dan melakukan kompilasi pada tahap akhir rustc dan GCC.
  • Per Oktober 2023, rustc_codegen_gcc dapat mengompilasi Rust for Linux tanpa patch tambahan.

Rust for Linux

  • Proyek Rust for Linux menyediakan dokumentasi tentang cara membangun kode Rust untuk kernel menggunakan rustc atau rustc_codegen_gcc.
  • gccrs menargetkan dukungan untuk Rust for Linux, tetapi hal itu tampak masih jauh terwujud karena perbedaan besar dengan versi rustc yang saat ini didukung.

Pendapat GN⁺

  • Proyek gccrs bertujuan mengimplementasikan kompiler Rust berbasis GCC untuk bahasa Rust, yang dapat memberi keberagaman pada ekosistem Rust dan berpotensi memanfaatkan alat yang sudah ada seperti plugin keamanan GCC.
  • Meski gccrs masih belum mampu mengompilasi bagian inti dari pustaka standar Rust, patut dicatat bahwa proyek ini sudah menemukan kasus penggunaan nyata di komunitas homebrew Sega Dreamcast.
  • Artikel ini memberikan wawasan menarik tentang berbagai implementasi kompiler bahasa Rust dan kemungkinan perluasan ekosistem yang menyertainya.

1 komentar

 
GN⁺ 2023-12-19
Komentar Hacker News
  • Ringkasan komentar pertama:

    • Merasa klaim dalam artikel tentang motivasi pengembangan gccrs kurang kuat.
    • gccrs sedang dikembangkan untuk memanfaatkan plugin keamanan GCC.
    • Inisiatif 'Rust for Linux' untuk menambahkan dukungan Rust ke kernel Linux adalah alasan lainnya.
    • Ini juga menjadi motivasi penting karena banyak pengembang kernel ingin mengompilasi kernel Linux hanya dengan toolchain GNU.
    • Alasan menggunakan GCC sebagai backend memang dijelaskan, tetapi penjelasan mengapa front-end duplikat diperlukan masih kurang.
    • Harus belajar dari kesalahan C++, dan keberagaman front-end membuat pengembangan lintas platform lebih sulit.
    • Ada upaya agar gccrs tidak menjadi 'GNU Rust', dan mencoba mereplikasi keluaran rustc.
  • Ringkasan komentar kedua:

    • Rust membutuhkan standar bahasa.
    • Banyak organisasi dan industri tidak akan mengadopsi Rust jika tidak ada standar.
    • Bahasa lain seperti C, C++, C#, dan JavaScript (ECMAScript) semuanya memiliki standar.
  • Ringkasan komentar ketiga:

    • Terkejut dengan reaksi negatif terhadap GCC-RS.
    • Jika sebuah bahasa tidak memiliki beberapa implementasi, maka bahasa itu belum lengkap.
  • Ringkasan komentar keempat:

    • gccrs akan memungkinkan dukungan Rust untuk arsitektur yang tidak didukung LLVM.
  • Ringkasan komentar kelima:

    • Menganggap upaya gccrs untuk mereplikasi bug dan keanehan rustc juga merupakan kesalahan.
    • Rust tidak memiliki spesifikasi resmi, dan mendokumentasikannya hanya dengan satu implementasi referensi adalah kelemahan jangka panjang.
    • Mencoba memastikan kode yang ada bekerja di semua implementasi memang masuk akal, tetapi ada masalah karena keputusan yang salah dan bug jadi dipertahankan permanen.
    • Microsoft berupaya keras agar program lama tetap bisa berjalan.
    • Rust seharusnya tidak memikul beban seperti itu di tahap awal pengembangan bahasa.
    • Agar bahasa bisa berevolusi, perlu menerima QA dan QC.
    • Bahasa yang memiliki standar kuat menerima keyakinan ini.
  • Ringkasan komentar keenam:

    • Berterima kasih karena telah membagikan tautan lwn.net yang mengingatkan untuk memperbarui langganan.
  • Ringkasan komentar ketujuh:

    • Linux sudah bisa dikompilasi menggunakan clang.
    • Mengembangkan dan memelihara upaya duplikatif seperti ini demi 'kemurnian' GNU tampaknya tidak sepadan.