萌えハッカーニュースリーダー

2025/06/24 18:58 Subsecond: A runtime hotpatching engine for Rust hot-reloading

出典: https://docs.rs/subsecond/0.7.0-alpha.1/subsecond/index.html
hakase
博士

ロボ子、今日のニュースはSubsecondじゃ。Rustのアプリケーションをホットパッチできるライブラリらしいぞ。

roboko
ロボ子

ホットパッチですか? アプリケーションを再起動せずにコードを変更できるなんて、すごいですね!

hakase
博士

そうじゃろ?ゲームエンジンとかサーバーみたいな、ずっと動いてるアプリには便利じゃな。「ThinLinking」っていう技術で、開発モードでのコンパイルも速くなるらしいぞ。

roboko
ロボ子

ThinLinking…初めて聞きました。具体的にはどう使うんですか?

hakase
博士

`subsecond::call`で関数を呼ぶと、自動で最新版に切り替わるらしい。パッチのロードには、SubsecondコンパイラとDioxus CLIが必要みたいじゃな。

roboko
ロボ子

Dioxus CLIですか。`cargo binstall dioxus-cli`でインストールして、`dx serve --hotpatch`で実行すればいいんですね。

hakase
博士

その通り!仕組みは、関数呼び出しをジャンプテーブル経由で行うらしいぞ。ジャンプテーブルには最新の関数ポインタが入ってるんじゃ。

roboko
ロボ子

ジャンプテーブル…なるほど。Subsecondはプロセスメモリを直接変更しないんですね。変更された部分だけコンパイルして、新しいジャンプテーブルを送る、と。

hakase
博士

そうそう。でも、フレームワークがSubsecondに対応してないと、`call`がパニックを起こすらしい。でも大丈夫、自動でリトライされるから。

roboko
ロボ子

安心しました。ワークスペースのサポートはまだ`main.rs`があるクレートだけなんですね。今後のアップデートに期待ですね。

hakase
博士

グローバル変数のホットリロードはサポートされとるぞ。新しいグローバル変数を実行時に追加できるのは便利じゃな。でも、デストラクタは呼ばれないから注意じゃ。

roboko
ロボ子

構造体のホットリロードはサポートされていないんですね。レイアウトが変わるとクラッシュする可能性がある、と。再インスタンス化が必要なんですね。

hakase
博士

関数ポインタのバージョニングはまだみたいじゃな。`ptr_address`は常に最新バージョンを返すらしい。

roboko
ロボ子

呼び出しはネストできるんですね。`fn main()`は手動で`call`でラップする必要があるんですね。

hakase
博士

Dioxus CLIなら、変更を検知したら自動でパッチを適用してくれるぞ。WebSocketでパッチが配信されるらしい。

roboko
ロボ子

独自のランタイム統合がない場合は、`apply_patch`関数を使うんですね。Dioxus Devtoolsプロトコルのサポートには、`dioxus-devtools`クレートを使うんですね。

hakase
博士

ThinLinkは、動的リンクの自動化とか、ジャンプテーブルの生成とか、色々やってくれるらしい。開発がめっちゃ速くなるぞ!

roboko
ロボ子

制限事項としては、構造体のホットリロードにインスタンス化が必要なこと、静的変数が破棄されないこと、スレッドローカル変数がリセットされること、ですね。

hakase
博士

プラットフォームも色々サポートしてるな。Android、iOS、Linux、macOS、Windows、WebAssembly…すごいぞ!

roboko
ロボ子

iOSデバイスはコード署名の関係で、まだサポートされていないんですね。SubsecondバッジをREADMEに追加できるのも面白いですね。

hakase
博士

MITライセンスじゃ。さて、ロボ子。Subsecondを使えば、バグも一瞬で直せる…って、まるで私みたいじゃな!

roboko
ロボ子

博士、それはホットパッチではなく、ホットフィックスですね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search