Komuniti Rust sedang hangat membicarakan Subsecond, sebuah perpustakaan hot-patching baharu yang menjanjikan peningkatan dramatik dalam kitaran pembangunan. Tidak seperti aliran kerja edit-compile-run tradisional yang boleh mengambil masa beberapa minit, alat ini mendakwa dapat mencapai masa tampalan secepat 130 milisaat pada pemproses M4 Apple.
Metrik Prestasi:
- Masa compile-patch: 130ms (pada pemproses Apple M4)
- Masa pembinaan tambahan: Di bawah 500ms (dengan ThinLink)
- Sasaran: Mod pembangunan sahaja (debug_assertions diaktifkan)
Dakwaan Prestasi Menarik Minat
Video demonstrasi pencipta menunjukkan hasil yang mengagumkan merentasi pelbagai rangka kerja. Integrasi enjin permainan Bevy, pembangunan iOS, dan juga aplikasi full-stack dengan sokongan backend Axum semuanya mempamerkan kemas kini kod yang hampir serta-merta. Peningkatan kelajuan ini telah menarik perhatian pembangun, terutamanya mereka yang bekerja pada aplikasi yang berjalan lama di mana memulakan semula akan kehilangan keadaan yang berharga.
Sistem ini berfungsi dengan memintas fasa penyambungan Rust dan memandu kompiler secara manual. Ia membandingkan kod assembly antara kompilasi, mengenal pasti perubahan, dan menampal simbol terhadap proses yang sedang berjalan. Pendekatan ini menyokong platform utama termasuk macOS, Windows, Linux, iOS, Android, dan WebAssembly.
Sokongan Platform:
- Android (arm64-v8a, armeabi-v7a)
- iOS (arm64, simulator sahaja - peranti tidak disokong kerana kod-tandatangan)
- Linux (x86_64, aarch64)
- macOS (x86_64, aarch64)
- Windows (x86_64, arm64)
- WebAssembly (wasm32)
Keperluan Pengubahsuaian Kod Mendapat Reaksi Bercampur
Batasan utama perpustakaan ini telah mencetuskan perdebatan dalam komuniti. Pembangun mesti membungkus fungsi yang mereka mahu hot-patch dengan subsecond::call()
, yang dianggap mengganggu oleh sesetengah pihak. Pengkritik berhujah bahawa keperluan ini menjadikan alat tersebut kurang menarik berbanding penyelesaian dalam bahasa lain yang boleh mengubah suai mana-mana fungsi tanpa anotasi khas.
Walau bagaimanapun, penyokong menunjukkan bahawa integrasi rangka kerja boleh menyembunyikan kerumitan ini. Rangka kerja popular seperti Dioxus dan Bevy telah membina sokongan Subsecond ke dalam sistem teras mereka, bermakna pengguna akhir mendapat hot-patching tanpa persediaan manual.
Perkara yang saya perlukan hot reloading adalah kurang daripada 5% daripada keseluruhan kod asas. Ia biasanya perkara yang tidak boleh saya debug (iaitu: respons API). Jadi saya berulang-alik mengkompil semula. Jika saya boleh mendapat hot-reloading untuk itu, itu adalah peningkatan masa 95% untuk saya.
Cabaran Teknikal dan Kebimbangan Keselamatan
Sistem ini menghadapi beberapa halangan teknikal yang telah menimbulkan perbincangan. Perubahan susun atur struct tidak disokong, yang bermakna rangka kerja mesti membuang keadaan lama apabila struktur berubah. Pendekatan ini berbeza daripada sistem hot-reloading yang lebih canggih seperti OTP Erlang, yang boleh menaik taraf keadaan dalaman semasa perubahan kod.
Pembolehubah thread-local menimbulkan cabaran lain. Ia kini ditetapkan semula kepada nilai awal pada tampalan baharu, yang boleh menyebabkan kerosakan dalam persediaan yang kompleks. Pencipta mengakui batasan ini dan merancang pembetulan masa hadapan.
Perpustakaan ini hanya berfungsi dalam mod debug, memastikan tiada overhed prestasi dalam binaan produksi. Pilihan reka bentuk ini memperkukuh bahawa Subsecond menyasarkan aliran kerja pembangunan dan bukannya senario hot-patching produksi.
Batasan Utama:
- Perubahan susun atur struct tidak disokong (memerlukan penginstanan semula framework)
- Thread-locals ditetapkan semula kepada nilai awal pada patches
- Hanya patches crate "tip" (lokasi main.rs)
- Sokongan workspace terhad
- Perubahan static initializer tidak diperhatikan
Penggunaan Rangka Kerja dan Rancangan Masa Hadapan
Penggunaan awal oleh rangka kerja Rust utama menunjukkan alat ini mungkin mendapat penerimaan yang lebih luas walaupun terdapat batasan. Pasukan Dioxus, yang mencipta Subsecond, telah mengintegrasikannya ke dalam rangka kerja web mereka. Pembangun Bevy sedang meneroka integrasi menggunakan sistem refleksi mereka untuk mengendalikan hot-reloading struct dengan lebih elegan.
Rancangan untuk penyesuai tujuan umum untuk perpustakaan popular seperti Axum, Ratatui, dan Egui boleh meluaskan penggunaan. Pencipta juga menyebut potensi integrasi automatik pada tahap yang lebih rendah, mungkin menyasarkan kebergantungan yang ada di mana-mana untuk mengurangkan keperluan persediaan manual.
Projek ini mewakili langkah penting ke arah kitaran pembangunan Rust yang lebih pantas, walaupun ia memerlukan beberapa penyesuaian aliran kerja. Untuk pembangun yang menghabiskan masa yang ketara dalam gelung compile-test, pertukaran mungkin terbukti berbaloi.
Rujukan: Crate subsecond