5

既にインタープリターを持っているのに、動的言語 (Python、Perl など) に Parrot のように VM を使用する必要があるのはなぜですか? 自分のコードと自分のマシンの間で異なる VM を使用し、別のインタープリターを使用することによって、潜在的に何を得ることができますか?

(私は VM の問題に慣れていないので、答えは明らかです)

編集

エンドユーザーにとっての Parrot VM の利点は何ですか?

4

2 に答える 2

5

既にインタープリターを持っているのに、動的言語 (Python、Perl など) に Parrot のように VM を使用する必要があるのはなぜですか?

まず、プロジェクトを開始する場合、まだインタープリターを持っていない可能性があります。

ただし、インタープリターがあり、それに機能を追加するか、Parrot を使用するように書き直すかを検討していると仮定すると、考えられるトレードオフは次のとおりです。

  • 一般に、Parrot は問題のインタープリターよりもテストされている可能性があります (より優れたオプティマイザー、より優れたガベージ コレクターなど)。
  • 一般に、Parrot の開発者は、ありふれたプログラマーよりもクロスプラットフォームの問題についてよく知っています。
  • 一般に、Parrot は、遭遇する可能性が高いほとんどの問題を解決しています。
  • Parrot は完全な汎用性を念頭に置いて設計されたため、非常に複雑になりました。余分な一般性は必要ないかもしれません

個人的には、Parrot のオプティマイザ (および主に最適化を容易にするためのレジスタ ベースの設計) と十分にテストされたクロス プラットフォーム コードベースは、私を納得させるのに十分です。

于 2011-08-17T16:23:39.627 に答える
4

ASCII ソース コードの解析が遅い。ソース ファイルが一度解析されてから、インタープリターがバイナリ構造を使用すると、より高速になります。Python では、この構造を.pycファイルに保存して、再利用を高速化します。

次の 2 つの手順があります。

  1. ソースを解析し、バイトコードを作成
  2. バイトコードを実行 (解釈) します。

これは、たとえば scala で使用されます。scala-VM はありません。Scala は単なる新しい構文です。scala コンパイラは Java バイト コードを作成します。

于 2011-08-17T14:01:21.117 に答える