Tim Rust resmi merilis Rust 1.99.0 pada 1 Oktober 2026. Rilis kali ini menyentuh salah satu area yang paling dinanti pengembang sistem: interoperabilitas dengan bahasa C. Kini fungsi variadik ber-ABI C bisa ditulis langsung di dalam kode Rust — sebelumnya Rust hanya bisa memanggilnya dari luar. Selain itu ada belasan API baru naik ke status stabil, plus pembaruan panduan penting soal manajemen memori.
Tidak ada perubahan semantik bahasa pada versi ini, jadi kode lama tetap berjalan seperti biasa. Yang bertambah adalah kemampuan baru di level pustaka dan FFI. Berikut sorotan utamanya.
Fungsi variadik C kini bisa ditulis di Rust
Fungsi variadik adalah fungsi yang menerima jumlah argumen tidak terbatas, seperti printf di C. Sebelumnya Rust sudah bisa memanggil fungsi variadik yang didefinisikan di luar (contohnya libc::printf), tetapi belum bisa mendefinisikan fungsi jenis ini sendiri. Rust 1.99 menstabilkan definisi fungsi variadik dengan ABI "C" dan "C-unwind":
/// SAFETY: harus dipanggil dengan minimal 2 argumen i32.
unsafe extern "C" fn sum(mut args: ...) -> i32 {
// SAFETY: dipenuhi oleh pemanggil.
let a = unsafe { args.next_arg::<i32>() };
let b = unsafe { args.next_arg::<i32>() };
a + b
}
fn foo() -> i32 {
unsafe { sum(0i32, 2i32) }
}
Tipe dari ... adalah VaList, yang kompatibel secara ABI dengan tipe va_list milik C di berbagai target. Tidak semua tipe boleh dibaca dari VaList — hanya tipe yang memenuhi trait VaArgSafe. Karena itu, pembacaan argumen tetap harus dilakukan di dalam blok unsafe dengan jaminan dari pemanggil bahwa jumlah dan tipe argumen benar.
Ini kabar baik untuk penulis library yang menjembatani Rust dengan C/C++: membuat wrapper, plugin, atau fungsi format dan logging yang mengikuti konvensi C kini tidak perlu bergantung pada trik. Rilis ini juga menstabilkan definisi fungsi variadik "naked" untuk ABI selain C, yang ditulis lewat inline assembly.
Ukuran dan alignment dari raw pointer
Rust 1.99 menstabilkan tiga fungsi untuk mengambil informasi layout langsung dari raw pointer: Layout::for_value_raw, core::mem::size_of_val_raw, dan core::mem::align_of_val_raw. Ini berlaku untuk tipe berukuran tetap maupun tipe unsized (seperti slice yang panjangnya dinamis), dengan syarat keamanan yang kini sudah final. Berguna bagi yang menulis alokator kustom, koleksi, atau abstraksi memori tingkat rendah.
Nasihat baru: jangan "unleak" setelah Box::leak
Meski tidak ada perubahan semantik, dokumen Box::leak diperbarui dengan nasihat penting: hindari pola yang meleakkan memori lalu mendealokasikannya kembali di kemudian hari. Pola semacam ini ditemukan bermasalah terhadap optimisasi compiler saat ini dan ke depan, terutama seiring makin dekatnya stabilisasi fitur custom allocator. Untuk kebutuhan seperti itu, gunakan Box::into_non_null atau Box::into_raw. Nasihat serupa berlaku untuk fungsi leak lain di standard library.
Belasan API baru naik ke stable
Deretan API kecil yang lama ditunggu juga ikut stabil, antara lain:
IntoIteratoruntukBox<[T; N]>(juga versi referensinya) — array di dalam Box kini bisa langsung diiterasi.Vec::into_partsdanVec::from_parts— membongkar dan merakit kembali Vec dari komponen-komponennya.String::from_utf8_lossy_owneddanFromUtf8Error::into_utf8_lossy— varian penanganan byte non-UTF-8 yang lebih fleksibel.VecDeque::retain_back— operasi retain yang bekerja dari sisi belakang deque.std::fs::set_timesdanset_times_nofollow— mengatur timestamp file langsung dari standard library, plus varian yang tidak mengikuti symlink.Box::into_non_null/Box::from_non_null,core::ffi::VaList, danFusedIteratoruntukStepBy.
Cara update ke Rust 1.99.0
Kalau sudah memakai rustup, satu perintah saja:
$ rustup update stable
Bagi yang baru ingin mencoba Rust, pasang rustup dari situs resmi rust-lang.org. Kalau tim Anda ingin ikut menguji rilis berikutnya, tersedia channel beta dan nightly yang bisa dipakai berdampingan.
Secara keseluruhan, Rust 1.99.0 adalah rilis yang memperkuat posisi Rust di dua sisi sekaligus: sebagai bahasa untuk membangun library lintas bahasa berkat variadik C, dan sebagai bahasa sistem dengan kontrol memori yang makin matang. Kalau Anda punya komponen C/C++ yang mulai menyulitkan dipelihara, ini momen bagus untuk mengeksplorasi menulis ulang bagian kecilnya di Rust — interoperabilitasnya kini makin mulus.
Sumber: Announcing Rust 1.99.0 — Rust Blog; Catatan rilis lengkap Rust 1.99.0; GitHub: Rust 1.99.0
