Rust compiler sekarang 2x lebih cepat lewat optimasi early metadata emission. Bikin build time project besar jadi jauh lebih efisien.
Kamu pasti pernah ngerasain frustrasi nunggu cargo check selesai di project Rust yang gede. Tiap kali save file, compiler mesti ngulang hitung dependency graph dari nol, parse crate semua, terus baru bisa bilang error di line mana. Nah, tim compiler Rust baru saja drop PR #128947 yang bikin proses ini hingga dua kali lebih cepat. Caranya gak pakai sihir — cuma pindahin tahap emisi metadata ke lebih awal di pipeline compilasi. Jadi metadata crate (informasi tipe, signature fungsi, trait impl, dll) udah siap sebelum borrow checker mulai kerja. Hasilnya? Dependency graph bisa dibangun sekali doang, terus di-reuse buat incremental compilation berikutnya.
Sebelumnya, Rust pakai arsitektur query-based di mana tiap pertanyaan ke compiler (misal: "tipe variabel ini apa?") dijawab on-demand lewat sistem query. Sistem ini powerful tapi punya overhead: tiap query mesti cek cache, hitung dependency, kadang rekomputasi kalau cache miss. Dengan early metadata emission, compiler nge-generate metadata lengkap crate di fase awal — sebelum HIR (High-level IR) lowering ke MIR. Metadata ini terus disimpan di file .rmeta yang jadi "single source of truth" buat semua crate downstream. Jadi pas kamu compile crate B yang depend on crate A, compiler cuma baca .rmeta crate A tanpa perlu re-parse dan re-type-check source code crate A. Ini mirip konsep precompiled headers di C++ tapi lebih bersih soalnya Rust punya crate boundary yang eksplisit.
Berapa Cepatnya Nyatanya?
Benchmark di repo rust-lang/rust sendiri nunjukin speedup 1.8x sampai 2.1x buat cargo check pada clean build project besar. Buat incremental build (edit file kecil, compile lagi), speedup sekitar 1.3x-1.5x soalnya incremental compilation udah cerdas cache query sebelumnya. Tapi buat CI/CD yang tiap kali clean build, ini gede banget — waktu build bisa turun dari 20 menit jadi 10 menit. Project seperti servo, rust-analyzer, atau tiap workspace dengan 50+ crate bakal ngerasain dampak paling keras. Tim juga test di crate populer kayak serde, tokio, clap — rata-rata 1.6x lebih cepat buat full check. Angka ini bukan marketing fluff, tapi hasil benchmark di hardware nyata (Ryzen 9 7950X, 64GB RAM, NVMe SSD) dengan metodologi yang transparan di PR discussion.
Advertisement
Slot in-article yang tampil setelah paragraf ketiga.
Kenapa Baru Sekarang?
Pertanyaan wajar: kenapa Rust butuh 18 tahun baru nemu trik ini? Jawabannya soal arsitektur compiler yang evolusi bertahap. Dulu Rust pakai AST-based compilation, lalu migrasi ke HIR/MIR/query-based system di era 2017-2019 (RFC 2124, 2159). Sistem query-based ini desainnya memang lazy — cuma komputasi yang dibutuhkan yang dijalankan. Early metadata emission butuh eager computation di awal, yang bertentangan dengan filosofi lazy query. Tim compiler butuh waktu buat redesign dependency tracking biar eager metadata gak bikin memory usage meledak. Solusinya: metadata di-emit sebagai "compressed side table" yang terpisah dari query cache, pakai format binary yang dioptimasi untuk random access. Plus, Rust 2024 edition memperkenalkan "metadata v2" yang support incremental metadata update — jadi kalau cuma satu fungsi di crate A yang berubah, metadata crate A gak perlu digenerate ulang seluruhnya.
Apa Yang Harus Kamu Lakuin?
Good news: kamu gak perlu ubah satu baris kode pun. Optimasi ini aktif by default di Rust 1.81+ (stabil sejak September 2024). Cuma pastiin toolchain kamu updated: jalankan rustup update stable. Buat project yang pakai workspace dengan banyak crate internal, manfaatnya otomatis terasa. Tapi ada satu gotcha: kalau kamu pakai build system custom (bukan cargo) yang invoke rustc manual, pastiin flag --emit=metadata dikirim di tahap awal, bukan di akhir. Beberapa build system seperti bazel-rules-rust atau buck2 butuh update rule-nya biar manfaatin fitur ini. Oh iya, kalau kamu maintain proc-macro crate, metadata emission early berarti proc-macro expansion terjadi sebelum metadata siap — jadi pastiin proc-macro kamu gak bergantung pada metadata crate lain yang belum di-emit. Kasus ini jarang tapi bisa terjadi di macro yang inspect trait impl dari dependency.
Bottom line: ini salah satu optimasi compiler paling impactful setahun terakhir tanpa breaking change. Rust terus bektiin komitmen mereka soal developer experience — bukan cuma memory safety, tapi juga "time-to-first-error" secepat mungkin. Buat tim yang deploy Rust di production dengan CI/CD yang jalan tiap jam, hemat 10 menit per build berarti hemat ratusan jam CPU per bulan. Langsung update toolchain kamu dan nikmati compile yang ngebut!
Catatan redaksi
Kalau lo cuma ambil satu hal dari artikel ini
AI Updates update dari Hacker News Front Page.
Sumber asli
Artikel ini merupakan rewrite editorial dari laporan Hacker News Front Page.
Baca artikel asli di Hacker News Front Page→