7

スタックレス VM とは、システムの「C スタック」を使用する代わりに、ヒープ上に独自のスタックを維持する実装を意味します。これには、継続やシリアライズ可能な状態などの多くの利点がありますが、C バインディングに関しては、特に C-VM-C の種類のコールバック (または VM-C-VM) に関しては、いくつかの欠点もあります。

問題は、これらの欠点が正確に何であるかです。誰かが実際の問題の良い例を挙げてもらえますか?

4

2 に答える 2

1

Steve Dekorte (Io プログラミング言語の作者) と Konstantin Olenin との電子メールでの会話の後、私は問題とその (部分的な) 解決策を見つけました。VM メソッドをコールバックする VM から C 関数への呼び出しを想像してください。VM がコールバックを実行している間、VM の状態の一部は VM の外、つまり C スタックとレジスタにあります。その時点で VM の状態を保存すると、次に VM がロードされたときに状態を正しく復元できないことが保証されます。

解決策は、VM をメッセージ受信アクターとしてモデル化することです。VM は非同期通知をネイティブ コードに送信でき、ネイティブ コードは非同期通知を VM に送信できます。つまり、シングルスレッド環境では、VM が制御を取得すると、追加の状態はその外部に保存されません (VM ランタイムに関係のないデータを除く)。

これは、どのような状況でも VM の状態を正しく復元できるという意味ではありませんが、少なくとも、信頼できる独自のシステムをその上に構築できます。

于 2009-04-30T16:38:07.507 に答える