Library Hot-Patching Rust Mencapai Waktu Kompilasi 130ms Namun Memerlukan Modifikasi Kode

Tim Komunitas BigGo
Library Hot-Patching Rust Mencapai Waktu Kompilasi 130ms Namun Memerlukan Modifikasi Kode

Komunitas Rust sedang ramai membicarakan Subsecond, sebuah library hot-patching baru yang menjanjikan percepatan dramatis dalam siklus pengembangan. Berbeda dengan alur kerja edit-compile-run tradisional yang bisa memakan waktu bermenitĀ­menit, tool ini mengklaim dapat mencapai waktu patch secepat 130 milidetik pada prosesor M4 Apple.

Metrik Performa:

  • Waktu compile-patch: 130ms (pada prosesor Apple M4)
  • Waktu incremental build: Di bawah 500ms (dengan ThinLink)
  • Target: Mode pengembangan saja (debug_assertions diaktifkan)

Klaim Performa Menarik Perhatian

Video demonstrasi dari creator menunjukkan hasil yang mengesankan di berbagai framework. Integrasi game engine Bevy, pengembangan iOS, dan bahkan aplikasi full-stack dengan dukungan backend Axum semuanya menampilkan pembaruan kode yang hampir instan. Peningkatan kecepatan ini telah menarik perhatian developer, terutama mereka yang bekerja pada aplikasi yang berjalan lama di mana restart akan menghilangkan state yang berharga.

Sistem ini bekerja dengan mencegat fase linking Rust dan menjalankan compiler secara manual. Sistem membandingkan kode assembly antar kompilasi, mengidentifikasi perubahan, dan menambal simbol terhadap proses yang sedang berjalan. Pendekatan ini mendukung platform utama termasuk macOS, Windows, Linux, iOS, Android, dan WebAssembly.

Dukungan Platform:

  • Android (arm64-v8a, armeabi-v7a)
  • iOS (arm64, hanya simulator - perangkat tidak didukung karena code-signing)
  • Linux (x86_64, aarch64)
  • macOS (x86_64, aarch64)
  • Windows (x86_64, arm64)
  • WebAssembly (wasm32)

Persyaratan Modifikasi Kode Menuai Reaksi Beragam

Keterbatasan utama library ini telah memicu perdebatan di komunitas. Developer harus membungkus fungsi yang ingin di-hot-patch dengan subsecond::call(), yang dianggap mengganggu oleh sebagian orang. Kritikus berargumen bahwa persyaratan ini membuat tool kurang menarik dibandingkan solusi di bahasa lain yang dapat memodifikasi fungsi apa pun tanpa anotasi khusus.

Namun, pendukung menunjukkan bahwa integrasi framework dapat menyembunyikan kompleksitas ini. Framework populer seperti Dioxus dan Bevy telah membangun dukungan Subsecond ke dalam sistem inti mereka, yang berarti pengguna akhir mendapatkan hot-patching tanpa setup manual.

Hal yang saya butuhkan hot reloading kurang dari 5% dari total code base. Biasanya hal-hal yang tidak bisa saya debug (misalnya: respons API). Jadi saya bolak-balik re-compiling. Jika saya bisa mendapatkan hot-reloading untuk itu, itu adalah peningkatan waktu 95% untuk saya.

Tantangan Teknis dan Kekhawatiran Keamanan

Sistem ini menghadapi beberapa rintangan teknis yang telah menimbulkan diskusi. Perubahan layout struct tidak didukung, yang berarti framework harus membuang state lama ketika struktur berubah. Pendekatan ini berbeda dari sistem hot-reloading yang lebih canggih seperti OTP Erlang, yang dapat meng-upgrade state internal selama perubahan kode.

Variabel thread-local menghadirkan tantangan lain. Saat ini mereka reset ke nilai awal pada patch baru, yang dapat menyebabkan crash pada setup yang kompleks. Para creator mengakui keterbatasan ini dan merencanakan perbaikan di masa depan.

Library ini hanya bekerja dalam mode debug, memastikan tidak ada overhead performa dalam build produksi. Pilihan desain ini memperkuat bahwa Subsecond menargetkan alur kerja pengembangan daripada skenario hot-patching produksi.

Keterbatasan Utama:

  • Perubahan layout struct tidak didukung (memerlukan re-instancing framework)
  • Thread-locals direset ke nilai awal saat patching
  • Hanya melakukan patch pada crate "tip" (lokasi main.rs)
  • Dukungan workspace terbatas
  • Perubahan static initializer tidak teramati

Adopsi Framework dan Rencana Masa Depan

Adopsi awal oleh framework Rust utama menunjukkan bahwa tool ini mungkin mendapatkan penerimaan yang lebih luas meskipun ada keterbatasannya. Tim Dioxus, yang menciptakan Subsecond, telah mengintegrasikannya ke dalam framework web mereka. Developer Bevy sedang mengeksplorasi integrasi menggunakan sistem refleksi mereka untuk menangani struct hot-reloading dengan lebih elegan.

Rencana untuk adapter tujuan umum untuk library populer seperti Axum, Ratatui, dan Egui dapat memperluas adopsi. Para creator juga menyebutkan potensi integrasi otomatis di level yang lebih rendah, mungkin menargetkan dependensi yang ada di mana-mana untuk mengurangi persyaratan setup manual.

Proyek ini mewakili langkah signifikan menuju siklus pengembangan Rust yang lebih cepat, meskipun memerlukan beberapa penyesuaian alur kerja. Untuk developer yang menghabiskan waktu signifikan dalam loop compile-test, trade-off mungkin terbukti bermanfaat.

Referensi: Crate subsecond