Semasa Rust menyambut ulang tahun ke-10 dan meletakkan dirinya sebagai bahasa pilihan untuk perisian asas, komuniti terlibat dalam perbincangan hangat mengenai dua bahagian kritikal yang hilang: Application Binary Interface (ABI) yang stabil dan spesifikasi bahasa yang diterbitkan. Perdebatan ini muncul berikutan perbincangan terkini mengenai hala tuju masa depan Rust dan cita-citanya untuk menggerakkan perisian yang mendasari segala-galanya.
Cabaran ABI: Melangkaui extern C
Kebimbangan teknikal yang paling mendesak yang dibangkitkan oleh pembangun berpusat pada kekurangan ABI yang komprehensif dalam Rust. Pada masa ini, Rust hanya boleh menawarkan extern C untuk komunikasi merentas bahasa, yang sangat mengehadkan keberkesanan perpustakaan dinamik dalam sistem kompleks. Ini menjadi masalah terutamanya apabila membina sistem pengendalian atau perisian asas berskala besar yang perlu menyediakan perkhidmatan kaya untuk aplikasi.
Cabaran ini ketara kerana ABI yang betul akan membolehkan bahagian sistem yang berbeza berkomunikasi tanpa memerlukan penyusunan semula apabila komponen dinaik taraf. Platform lain telah menyelesaikan masalah ini dengan pelbagai cara - Windows menggunakan COM, Apple secara sejarah bergantung pada dynamic dispatch Objective-C, dan Android menggunakan JVM dengan bytecode. Walau bagaimanapun, mencipta ABI tanpa lapisan mesin maya adalah sangat sukar dan memerlukan komitmen kepada butiran pelaksanaan yang tidak boleh diubah.
Pendekatan Swift telah muncul sebagai model berpotensi, menawarkan monomorphization dalam binari yang sama, dynamic dispatch merentas sempadan linker. Ini bermakna sistem generik Rust yang berkuasa boleh berfungsi dalam satu program sambil masih membenarkan program berbeza berkomunikasi dengan berkesan. Kerumitan teknikal adalah sangat besar, tetapi hasilnya boleh mengubah kegunaan Rust untuk pengaturcaraan peringkat sistem.
ABI: Application Binary Interface - antara muka peringkat rendah antara komponen perisian berbeza yang membolehkan mereka berfungsi bersama
Penyelesaian ABI Bahasa Alternatif:
- Windows: COM (Component Object Model)
- Apple: Objective-C dynamic dispatch, Swift ABI
- Android: Antara muka bytecode JVM
- Bahasa C3: Penukaran ABI automatik untuk jenis pilihan
Kontroversi Spesifikasi
Isu yang sama kontroversialnya melibatkan kekurangan standard bahasa formal yang diterbitkan oleh Rust. Pengkritik berhujah bahawa mana-mana bahasa yang menyasarkan perisian asas sepatutnya mempunyai spesifikasi yang betul yang membolehkan pelaksanaan dan pengesahan bebas. Keadaan semasa meninggalkan pelaksanaan rujukan Rust sebagai standard de facto, yang dilihat oleh sesetengah pihak sebagai tidak mencukupi untuk infrastruktur kritikal.
Projek Rust telah bekerja pada spesifikasi sejak 2023, tetapi kemajuan adalah perlahan dan usaha itu menghadapi kemunduran yang ketara. Rancangan asal yang diterangkan dalam RFC3355 telah ditinggalkan pada awal 2024, dan pasukan yang bertanggungjawab telah mengalami hampir pertukaran lengkap. Yang lebih membimbangkan pengkritik ialah spesifikasi yang dirancang tidak akan berwibawa - pelaksanaan masih akan dianggap sebagai standard sebenar.
Jika anda berhasrat untuk menjadi asas kepada seluruh industri, nampaknya tidak munasabah untuk meminta beberapa spesifikasi.
Keadaan ini mewujudkan kontras yang ketara dengan bahasa seperti C dan C++, yang mempunyai badan standard formal dan pelbagai pelaksanaan. Walau bagaimanapun, pembela menunjukkan bahawa bahasa yang berjaya seperti Python beroperasi sama seperti Rust, dengan pelaksanaan rujukan berfungsi sebagai standard. Perdebatan mencerminkan persoalan yang lebih mendalam mengenai tahap formaliti yang benar-benar diperlukan untuk perisian asas.
Status Spesifikasi Rust (sehingga 2025):
- Rancangan asal RFC3355 ditinggalkan pada awal 2024
- Pasukan spesifikasi mengalami pertukaran keahlian yang lengkap
- Spesifikasi yang dirancang akan menjadi tidak berwibawa (pelaksanaan kekal sebagai standard)
- Rujukan kerja-dalam-kemajuan tersedia tetapi tidak lengkap
- Tiada standard formal yang diterbitkan wujud
Kekecewaan Komuniti dan Isu Teras
Selain daripada kebimbangan seni bina utama ini, pembangun telah mengenal pasti beberapa titik kesakitan berterusan yang mempengaruhi produktiviti harian. Struct yang merujuk diri sendiri kekal sukar untuk dilaksanakan, terutamanya apabila cuba menyimpan kedua-dua data sumber dan hasil yang diuraikan dalam struktur yang sama. Peraturan orphan, walaupun direka untuk mencegah konflik, sering memaksa pembangun ke dalam penyelesaian janggal dengan jenis wrapper bersarang.
Masa penyusunan terus menjadi isu yang ketara, sering memerlukan projek dipecahkan kepada banyak crate kecil untuk prestasi binaan yang munasabah. Pemecahan ini menjejaskan organisasi kod dan pengalaman pembangun, walaupun sebab teknikal yang mendasari difahami dengan baik.
Isu-isu ini menyerlahkan ketegangan asas dalam pembangunan Rust. Walaupun bahasa ini cemerlang dalam mencegah keseluruhan kelas pepijat dan membolehkan konkurensi tanpa rasa takut, ciri-ciri yang memberikan faedah ini boleh mewujudkan geseran dalam tugas pembangunan harian.
Pilihan Komunikasi Merentas Bahasa Rust Semasa:
- extern "C" - Terhad kepada jenis yang serasi dengan C
- Tiada sokongan asli untuk Option/Result/Enum merentasi sempadan
- Tiada ABI yang stabil untuk jenis asli Rust seperti slices atau trait objects
- Perpustakaan dinamik memerlukan antara muka gaya C
Memandang ke Hadapan
Perbincangan mendedahkan komuniti yang bergelut dengan kejayaan dan jangkaan yang semakin meningkat. Semasa Rust memperoleh penerimaan dalam sistem kritikal - dari kernel sistem pengendalian hingga infrastruktur awan - pertaruhan untuk menyelesaikan isu asas ini dengan betul terus meningkat. Cabaran terletak pada menangani kebimbangan ini tanpa menjejaskan ciri keselamatan dan prestasi yang menjadikan Rust menarik pada mulanya.
Sama ada melalui inovasi teknikal seperti penyelesaian ABI gaya Swift atau perubahan organisasi mengenai spesifikasi dan standard, ekosistem Rust menghadapi keputusan penting mengenai cara untuk matang sambil mengekalkan kekuatan terasnya. Hasil perdebatan ini berkemungkinan akan menentukan sama ada Rust benar-benar dapat memenuhi cita-citanya untuk menjadi asas bagi generasi seterusnya sistem perisian kritikal.