2

私は間違って考えていました。Smalltalk はモノリシックなものだと思っていましたが、最近、Smalltalk が VM とイメージに分離されていることに気付きました。この場合、VM は不可欠な部分であり、イメージは単なるアプリケーションの集まりであると言えます。言語構文は、イメージ コードを作成するための単なるヘルパーです。

そして、これは私にいくつかの疑問を抱かせました。

  1. 任意の Smalltalk VMでイメージを実行できるようです。これは本当ですか?たとえば、任意の Smalltalk VM から Seaside を実行できますか?

  2. すべての Smalltalk VM は完全に互換性があるようです。少なくとも一連の機能と実行中のソースコードで。これは本当ですか?

  3. ベアボーン VM で独自のイメージを構築することはできますか? 実用的ではありませんが、学習には適しているはずです。

4

5 に答える 5

5

質問3)に答えるために、画像の作成について、別のPOVは生物学的メタファーに基づいています。

生きている細胞を最初から作成するのは非常に難しいのと同じように、最初から画像を作成するのは非常に困難です。考慮すべき相互作用はたくさんあります(創造論者はあなたがそれを行うには一種の神でなければならないと言うでしょう)。

ただし、セルのクローンを作成するので、イメージのクローンを作成するのは非常に簡単な操作です(自分自身のクローンを作成するだけです)。非常に簡単なので、通常はクローンを作成します。たとえば、SqueakとPharoの画像は数十年以上前のものです。squeak-devメーリングリストhttp://forum.world.st/About-a-objectでオブジェクトライフについての面白いディスカッションを参照してください。 -life-td4653839.html

gnu-Smalltalkには、画像を最初から組み立てるためのすべてのツールがあり、Pharoではそのようなツールを再作成する予定であることに注意してください。

最後に、Squeakは下位互換性に関心があり、最近のインタープリターVMは、10年前にフリーズしたイメージを実行するために必要なインターフェイスを提供します。

于 2013-03-14T18:29:57.900 に答える
3

私はあなたの質問に答えようとします (ここにいる他の Smalltalker が詳細を提供してくれるはずです):

  1. これは、任意の Smalltalk VM でイメージを実行できるようです。これは可能ですか?たとえば、任意の Smalltalk VM から Seaside を実行できますか?

Smalltalk には方言がたくさんあります。つまり、Image+Vm の組み合わせはたくさんあります。それらのいくつかは、 PharoSqueakVisualWorksDolphinGNU SmalltalkAmberGemstoneです (そして、私は確かにいくつか欠けています)。ただし、プリミティブやメモリ管理などは各 VM によって定義されるため、各イメージは特定の VM で実行されます。実際のところ、Smalltalk のフレーバーによっては、メジャー リリース間でもイメージに互換性がない場合があります。

そうは言っても、Seaside は特定の Web フレームワークであり、さまざまな Smalltalk フレーバーに移植されています。そのため、ある St (Pharo など) で Seaside ベースのアプリケーションを作成し、コードをエクスポートして別の St (Gemstone など) にインポートすることができます。

これは、すべての Smalltalk VM に完全な互換性があるようです。少なくとも一連の機能と実行中のソースコードで。これは本当ですか?

はい、ほとんどの Smalltalk で基本的な概念は同じです。フレーバーの互換性を維持したい場合は、ANSI Smalltalk 仕様に固執するようにしてください。そうすれば、方言を越えてコードを移動することができます (多少の頭痛はありますが :))。ただし、ほとんどの場合、特定のものを使用するため、これは通常のことではないことに注意してください (おそらく、Squeak/Pharo <=> Gemstone の組み合わせが最も一般的であり、私の知る限り、非常にうまく機能します)。

ベアボーン VM で独自のイメージを構築することはできますか? 実用的ではありませんが、学習には適しているはずです。

前に言ったように、そのために気をつけなければならないことが画像の中にたくさんあります。したがって、技術的には可能ですが、実際には難しいです。Mariano による「Journey through the Virtual Machine」というタイトルの一連のブログ投稿があり、興味深いと思います。また、私の知る限り、Tim Buddは学習ソースとしてLittle Smalltalkを作成しました (引用を見つける必要があります :( )。独自の Smalltalk VM を構築して、その動作を学習する例は無数にあります。これは大変な作業ですが、間違いなく多くのことを学ぶことができます (イメージの構築を依頼されたことは承知していますが、 VM を構築することもできます) ああ、このリンクにも興味があるかもしれません。

HTH

于 2013-03-14T13:12:33.413 に答える
3

一般に、異なるベンダーの Smallatalk VM には互換性がなく、ある VM で保存されたイメージを別の VM にロードすることはできません (少なくとも直接的にはできません)。例外は、Squeak と Pharo のイメージが (ほとんどの場合) 同じ VM インターフェイスを共有することです。

Seaside プログラムは、異なる VM のイメージ間でソース パッケージとして転送できます (実際に転送します)。

VM を十分に理解している必要がありますが、ゼロからイメージを構築することは可能です。スプーンシステムが面白いかもしれません。

于 2013-03-14T14:55:35.863 に答える
1

VM は、Smalltalk バイト コードとシステムの間のレイヤーです。したがって、主なアイデアは、4 + 5 を実行すると、VMプリミティブが呼び出され、対応するマシン コードを実行して、CPU が「オブジェクト」とは何かを認識しないため、それらを合計することです。したがって、何も実行できません。これが NBCog が存在する理由です。ネイティブ ブーストには、Cog vm に実装されていない特別なプリミティブが必要なため、NBCog でのみ機能します。3番目の質問がわかりません。VM は smalltalk バイトコードを受け取り、マシンコードを出力します。ベアボーン VM とは何ですか?

于 2013-03-14T12:56:47.823 に答える
0

イメージなしで Smalltalk vm を実行することはできません。これはまったく意味のない考えです。vm の要点は、イメージを実行することです。画像なしで画像ビューアを実行するようなものです。

于 2013-12-22T05:29:57.310 に答える