2

次の GNU Smalltalk スクリプトを実行します。

stdout << 'Before'; nl.
ObjectMemory snapshot: 'image.im'.
stdout << 'After'; nl.

予想どおり、次の出力が生成され、新しいイメージが書き出されます。

Before
After

次に、画像をリロードします。

$ gst -I image.im

私が期待しているのは、単語Afterが印刷されることです。つまり、元のスクリプトで画像が保存された場所から実行が再開されます。実際に何が起こるかというと、REPL を取得するだけです。

明らかに、イメージはスクリプトを実行しているスレッドの状態を保存していないか、イメージがロードされたときにスレッドが再作成されていません。Smalltalk イメージには、システム全体の状態のスナップショットが含まれているはずだと思っていました。なぜこれが起こっているのですか?(そして、これを機能させる方法はありますか?この動作を使用したいです。)

4

1 に答える 1

1

smalltalk イメージを停止して再開すると、すべてがオブジェクトであるという錯覚をどこまで維持できるかという限界に直面します。データベース接続、ソケット、ファイルなどの再オープンが可能であるとは限りません。イメージは、別のマシン、別のネットワーク、および数年後に再度開かれる可能性があります。スモールトークが異なれば、これらの問題に対処する方法もわずかに異なります。Pharo で Seaside を実行すると、新しい接続をリッスンするサーバー接続が再起動され、Seaside セッション自体がフラッシュされます。

于 2014-09-26T15:55:24.917 に答える