Komunitas Rust Memperdebatkan ABI yang Hilang dan Spesifikasi Bahasa saat Dorongan Software Foundational Berlanjut

Tim Komunitas BigGo
Komunitas Rust Memperdebatkan ABI yang Hilang dan Spesifikasi Bahasa saat Dorongan Software Foundational Berlanjut

Saat Rust merayakan ulang tahun ke-10 dan memposisikan diri sebagai bahasa andalan untuk software foundational, komunitas terlibat dalam diskusi sengit tentang dua bagian penting yang hilang: Application Binary Interface (ABI) yang stabil dan spesifikasi bahasa yang dipublikasikan. Perdebatan ini muncul setelah diskusi terbaru tentang arah masa depan Rust dan ambisinya untuk menggerakkan software yang menjadi dasar segala hal lainnya.

Tantangan ABI: Melampaui extern C

Kekhawatiran teknis paling mendesak yang diangkat oleh developer berpusat pada kurangnya ABI yang komprehensif pada Rust. Saat ini, Rust hanya dapat menawarkan extern C untuk komunikasi lintas bahasa, yang sangat membatasi seberapa berguna dynamic libraries dalam sistem yang kompleks. Ini menjadi sangat bermasalah ketika membangun sistem operasi atau software foundational skala besar yang perlu menyediakan layanan kaya untuk aplikasi.

Tantangannya signifikan karena ABI yang tepat akan memungkinkan bagian-bagian berbeda dari sistem untuk berkomunikasi tanpa memerlukan rekompilasi ketika komponen diupgrade. Platform lain telah menyelesaikan ini dengan berbagai cara - Windows menggunakan COM, Apple secara historis mengandalkan dynamic dispatch Objective-C, dan Android menggunakan JVM dengan bytecode. Namun, menciptakan ABI tanpa lapisan virtual machine sangat sulit dan memerlukan komitmen pada detail implementasi yang tidak pernah bisa berubah.

Pendekatan Swift telah muncul sebagai model potensial, menawarkan monomorphization dalam binary yang sama, dynamic dispatch melintasi batas linker. Ini berarti sistem generics yang kuat dari Rust dapat bekerja dalam satu program sambil tetap memungkinkan program berbeda untuk berkomunikasi secara efektif. Kompleksitas teknisnya sangat besar, tetapi hasilnya dapat mengubah utilitas Rust untuk pemrograman tingkat sistem.

ABI: Application Binary Interface - antarmuka tingkat rendah antara komponen software berbeda yang memungkinkan mereka bekerja bersama

Solusi ABI Bahasa Alternatif:

  • Windows: COM ( Component Object Model )
  • Apple: Objective-C dynamic dispatch, Swift ABI
  • Android: JVM bytecode interface
  • C3 Language: Konversi ABI otomatis untuk tipe opsional

Kontroversi Spesifikasi

Isu yang sama kontroversialnya melibatkan kurangnya standar bahasa formal yang dipublikasikan pada Rust. Kritikus berargumen bahwa bahasa apa pun yang menargetkan software foundational harus memiliki spesifikasi yang tepat yang memungkinkan implementasi dan validasi independen. Situasi saat ini meninggalkan implementasi referensi Rust sebagai standar de facto, yang oleh beberapa pihak dianggap tidak memadai untuk infrastruktur kritis.

Proyek Rust telah bekerja pada spesifikasi sejak 2023, tetapi kemajuannya lambat dan upaya tersebut menghadapi kemunduran signifikan. Rencana asli yang dijelaskan dalam RFC3355 ditinggalkan pada awal 2024, dan tim yang bertanggung jawab telah mengalami pergantian hampir sepenuhnya. Yang lebih mengkhawatirkan bagi kritikus adalah bahwa spesifikasi yang direncanakan tidak akan bersifat otoritatif - implementasi masih akan dianggap sebagai standar yang sebenarnya.

Jika Anda bertujuan menjadi fondasi seluruh industri, tampaknya tidak berlebihan untuk meminta beberapa spesifikasi.

Situasi ini menciptakan kontras yang mencolok dengan bahasa seperti C dan C++, yang memiliki badan standar formal dan beberapa implementasi. Namun, pembela menunjukkan bahwa bahasa sukses seperti Python beroperasi serupa dengan Rust, dengan implementasi referensi berfungsi sebagai standar. Perdebatan ini mencerminkan pertanyaan yang lebih dalam tentang tingkat formalitas apa yang benar-benar diperlukan untuk software foundational.

Status Spesifikasi Rust (per 2025):

  • Rencana RFC3355 asli ditinggalkan pada awal 2024
  • Tim spesifikasi mengalami pergantian keanggotaan secara menyeluruh
  • Spesifikasi yang direncanakan akan bersifat non-otoritatif (implementasi tetap menjadi standar)
  • Referensi work-in-progress tersedia namun belum lengkap
  • Tidak ada standar formal yang dipublikasikan

Frustrasi Komunitas dan Isu Inti

Di luar kekhawatiran arsitektural utama ini, developer telah mengidentifikasi beberapa titik nyeri persisten yang mempengaruhi produktivitas harian. Self-referencing structs tetap sulit diimplementasikan, terutama ketika mencoba menyimpan data sumber dan hasil yang diparsing dalam struktur yang sama. Orphan rule, meskipun dirancang untuk mencegah konflik, sering memaksa developer ke dalam workaround yang canggung dengan nested wrapper types.

Waktu kompilasi terus menjadi isu signifikan, sering memerlukan proyek untuk dibagi menjadi banyak crate kecil untuk performa build yang wajar. Fragmentasi ini merusak organisasi kode dan pengalaman developer, meskipun alasan teknis yang mendasarinya dipahami dengan baik.

Isu-isu ini menyoroti ketegangan fundamental dalam pengembangan Rust. Sementara bahasa ini unggul dalam mencegah seluruh kelas bug dan memungkinkan concurrency tanpa rasa takut, fitur-fitur yang memberikan manfaat ini dapat menciptakan gesekan dalam tugas pengembangan sehari-hari.

Opsi Komunikasi Lintas Bahasa Rust Saat Ini:

  • extern "C" - Terbatas pada tipe yang kompatibel dengan C
  • Tidak ada dukungan native untuk Option/Result/Enum melintasi batas
  • Tidak ada ABI stabil untuk tipe native Rust seperti slice atau trait object
  • Dynamic library memerlukan interface bergaya C

Melihat ke Depan

Diskusi mengungkapkan komunitas yang bergulat dengan kesuksesan dan ekspektasi yang berkembang. Saat Rust mendapat adopsi dalam sistem kritis - dari kernel sistem operasi hingga infrastruktur cloud - taruhannya untuk menyelesaikan isu foundational ini dengan benar terus meningkat. Tantangannya terletak pada mengatasi kekhawatiran ini tanpa mengorbankan karakteristik keamanan dan performa yang membuat Rust menarik di tempat pertama.

Baik melalui inovasi teknis seperti solusi ABI gaya Swift atau perubahan organisasional seputar spesifikasi dan standar, ekosistem Rust menghadapi keputusan penting tentang bagaimana menjadi matang sambil mempertahankan kekuatan intinya. Hasil dari perdebatan ini kemungkinan akan menentukan apakah Rust benar-benar dapat memenuhi ambisinya menjadi fondasi untuk generasi berikutnya sistem software kritis.

Referensi: Rust in 2025: Targeting foundational software