18

smalltalkでは、世界の状態をイメージファイルに保存できます。私はこれがSmalltalkが自分自身を「シリアライズ」する能力、すなわちオブジェクトが独自のソースコードを生成できることと関係があると考えています。Smalltalkに画像の永続性を与える機能があります。なぜRuby/Pythonのような言語ではシリアル化できないのですか?

1)これは正確な理解ですか?

2)現代の言語にこの能力を追加する際の挑戦は何ですか(非lisp、明らかに)?

3)「シリアライゼーション」は正しい言葉ですか?正しい専門用語は何ですか?

答えて

15

「シリアライズ」よりもはるかに簡単です。スモールトーク画像は単にオブジェクトメモリのスナップショットです。 RAM全体の内容(ガベージコレクション後)を取り出し、ファイルにダンプします。起動時に、スナップショットはディスクからRAMにロードされ、途中で処理が続行されます。スナップショットと再開時に特別なアクションを実行するためのフックがいくつかありますが、基本的にはこれがどのように動作するかです。

(追加:他の環境に比べて、それがとても簡単になり重要な設計上の選択については、以下のルーカス・Renggliさんのコメントを参照してください)

+0

Smalltalkのは、独自のVMで実行されるので、それは独自のメモリ状態を整理し、それ自体を管理しているので、これはうまく機能していることに注意してください。このためにビルドされていないCプログラムでこれを実行しようとした場合、ほとんどの場合は大丈夫でしょうが、コーナーケースが爆発する可能性があります。 – Marcin

+6

スナップショットは、実行状態(プロセス、スタックフレームなど)が通常のオブジェクトメモリの一部であることを助けます。これにより、実行中のコードのスナップショットと再開が特に簡単になります。 –

1

これは右、あなたがスリープ状態にコンピュータを置く方法で、すでにどうなりますか?カーネルは実行中のプログラムをディスクに書き込み、後でそれらを再度ロードしますか?おそらく、カーネルは、実行中のプログラムをネットワーク上の新しいマシンに移動させることができます。 Javaは、JVMのためにもすべてのオブジェクトをシリアル化できますか?おそらく、ハードルはアーキテクチャだけで様々なメモリレイアウトを暗示しているのでしょうか?

編集:しかし、あなたはプログラム自体からこの機能を使用することに興味があると思います。ですから、Python/Rubyインタプリタとstdlibの機能を実装するだけで、別のハードウェアアーキテクチャに移行できるようにするには、ある種の仮想マシンが必要です。

+0

"Python/Rubyインタプリタとstdlibの機能を実装するだけです。"あなたは自分の実装を作成するだけですか?なぜ、それはまったく時間がかかりません;) – Marcin

+1

はい、あなた自身のハイバネーション機能の実装です。あなたは通訳者全体を書く必要はありません。私はボランティアではありません。 –

8

バート・フロイデンベルグの優れた答えに追いついています。

1)これはオブジェクトの能力を正確に理解していますか?

いいえ。 Bert氏が指摘したように、Smalltalkイメージは単なるメモリスナップショットです。 SmalltalkオブジェクトとSmalltalkプログラムの真実の単一のソースは、そのメモリ表現です。これは、プログラムがテキストファイルとして表現される他の言語と大きな違いです。

2)現代の言語にこの能力を追加する際の挑戦は何ですか(非Lisp、明らかに)?

技術的には、ほとんどの言語ではメモリスナップショットからアプリケーションをブートストラップする必要があります。私が誤解していない場合、このアプローチを使用してJavaアプリケーションの起動時間を短縮するソリューションがあります。あなたは正式なメモリ表現に同意しなければならないだろうし、プログラムを再起動するときにネイティブリソースを再初期化するよう注意する必要があるだろう。たとえば、Smalltalkでは、開いているファイルとネットワーク接続が再開されます。また、数字のエンディアンを修正するためのスタートアップフックもあります。

3)「シリアライゼーション」は正しい言葉ですか?正しい専門用語は何ですか?

ハイバーネーションは用語です。

+0

Smalltalk VMがファイルとネットワーク接続を再オープンする方法についてはどこで読むことができますか?そして、メモリ内の表現は何ですか?私はどこでも簡単に読めるSmalltalkのソースを見ていない...ありがとう。 –

+0

http://pharo-project.orgからPharoワンクリックイメージをダウンロードし、ソースを参照してください。私は頭の上の関連するメッセージを思い出すことはありませんが、ファイルクラスと接続クラスで見つかるはずです。 – akuhn

1

決定的な違いは、Smalltalkのは、ちょうどオブジェクトの束などのプログラムを扱うということです。そしてIDEはそれらのオブジェクトを編集している編集者の集まりなので、イメージを保存すると、途中で終了したときと同じように、すべてのコードがそこに保存されます。

他の言語については、そうすることは可能かもしれないが、私はそこにあるどのくらいの反射に応じて、よりあいが存在することになると思います。他のほとんどの言語では、反射はアドオンとして、または後で考えられるが、Smalltalkではシステムの中心にある。

関連する問題