[HN Gopher] Subsecond: A runtime hotpatching engine for Rust hot...
___________________________________________________________________
Subsecond: A runtime hotpatching engine for Rust hot-reloading
Author : varbhat
Score : 55 points
Date : 2025-06-24 18:58 UTC (4 hours ago)
(HTM) web link (docs.rs)
(TXT) w3m dump (docs.rs)
| mmastrac wrote:
| I'll have to give this a shot for some of the Rust server work
| I'm doing. progscrape.com uses a lot of tricks to boot quickly
| specifically because of the edit-compile-run cycle being slow
| (mostly deferred loading of indexes, etc).
|
| My current day job @ Gel has me working on a Rust socket frontend
| for some pretty complex code and that could also be pretty
| interesting.
|
| It seems to require that you choose a good "cutover" point in
| your codebase, but TBH that's probably not too hard to pick. The
| HTTP service handler in a webserver, the socket handlers in non-
| web serving code, etc.
|
| It does appear to have a limitation where it will only allow the
| main crate to be hotpatched. That's less than ideal, but I
| suppose the convenience might justify some code structure changes
| to allow that.
| jkelleyrtp wrote:
| Creator here - haven't had a chance to write up a blog post yet!
| Stay tuned.
|
| The gist of it is that we intercept the Rust linking phase and
| then drive `rustc` manually. There's some diffing logic that
| compares assembly between compiles and then a linking phase where
| we patch symbols against the running process. Works across macOS,
| Windows, Linux, iOS, Android, and WASM. On my m4 I can get 130ms
| compile-patch times, quite wicked stuff.
|
| We handle the hard parts that the traditional dylib-reloading
| doesn't including TLS, statics, constructors, etc.
|
| I've been posting demos of it to our twitter page (yes twitter,
| sorry...)
|
| - With bevy: https://x.com/dioxuslabs/status/1924762773734511035
|
| - On iOS: https://x.com/dioxuslabs/status/1920184030173278608
|
| - Frontend + backend (axum):
| https://x.com/dioxuslabs/status/1913353712552251860
|
| - Ratatui (tui apps):
| https://x.com/dioxuslabs/status/1899539430173786505
|
| Our unfinished release notes are here:
|
| https://github.com/DioxusLabs/dioxus/releases/tag/v0.7.0-alp...
|
| More details to come!
| weinzierl wrote:
| Very nice. For a long time I wondered who would use hotpatching
| but working with large Java applications made me appreciate the
| possibility even if it is not 100% unreliable (as it is in Java).
|
| From the docs _Subsecond_ looks almost perfect. The only downside
| I found is that (if I understood correctly) you have to modify
| the function call in the source code of every function you want
| to hotpatch.
|
| It is a bit mitigated in that the change does not cost anything
| in release builds, but it still is a big thing. Do I want
| sprinkle my code with _call_ for every function I might
| potentially have to patch in a debugging session?
| prideout wrote:
| Neat but I would prefer simply using a dylib for the part of my
| code that I want to be reloadable.
___________________________________________________________________
(page generated 2025-06-24 23:00 UTC)