Parrot が仮想マシンであることは理解していますが、その背後にある考え方を完全には把握していないように感じます。
私が理解しているように、それは複数の言語を処理するために作成されている仮想マシンです。これは正しいです?
インタプリタだけでなく仮想マシンを使用する利点は何ですか?
Parrot は具体的に何をしていて、これほどまでに大きな成果をあげているのでしょうか?
Parrot が仮想マシンであることは理解していますが、その背後にある考え方を完全には把握していないように感じます。
私が理解しているように、それは複数の言語を処理するために作成されている仮想マシンです。これは正しいです?
インタプリタだけでなく仮想マシンを使用する利点は何ですか?
Parrot は具体的に何をしていて、これほどまでに大きな成果をあげているのでしょうか?
Parrotは、いくつかの言語、特に動的言語を処理するために特別に設計された仮想マシンです。いくつかの興味深いテクノロジーが関与しているにもかかわらず、複数の言語を処理できるため、言語の境界を越えることができます。たとえば、Ruby、Perl、Python をコンパイルできるようになれば、これらの境界を簡単に越えて、Python で Ruby ライブラリを使用したり、Python から Perl ライブラリを使用したり、好きな組み合わせを使用できるようになります。
Parrot は Perl の世界で始まり、それに取り組んでいる人々の多くは Perl の経験者です。古くなりつつある現行の Perl インタープリターを使用する代わりに、Parrot を使用すると、配布可能なプリコンパイル済みモジュール (他の誰もが長い間持っていたもの) やよりスマートなガベージ コレクターなどの機能を Perl に持たせることができます。
Chris がユーザー向けの違いについて説明したので、別の側面について説明します。
Parrot はスタックベースではなく、レジスタベースです。つまり、コンパイラ開発者は、特定のコードにレジスタを割り当てる方法をより簡単に最適化できるということです。さらに、Parrot バイトコードから機械語コードへのコンパイルは、理論的にはスタックベースのコードよりも高速である可能性があります。これは、私たちがレジスターベースのシステムを実行しており、それらの最適化の経験が豊富であるためです。
Parrot はバイトコード インタープリターです (将来的には JIT を使用する可能性があります)。Java とその仮想マシンを考えてみてください。ただし、Java は (現時点では) 静的言語に向いており、Parrot は最初から動的言語に向いています。
Cody の優れた回答も参照してください。強くお勧めします。
他の人が優れた答えを出してきたので、私に残っているのは、「動的」言語が実際に何を意味するのかを説明することです。
仮想マシンのコンテキストでは、変数の型がコンパイル時に不明であることを意味します。「静的」言語では、型 (または少なくともその親クラス) はコンパイル時に認識され、多くの最適化はその知識に基づいて構築されます。
一方、動的言語では、変数がコンテナー型 (配列など) を保持するのか、スカラー (文字列、数値など) を保持するのかを知っているかもしれませんが、コンパイル時の型情報ははるかに少なくなります。
もう 1 つの特徴は、通常、動的言語の方がはるかに簡単に型変換できることです。たとえば、perl や JavaScript では、文字列を数値として使用すると、自動的に数値に変換されます。
Parrot は、このような操作を簡単かつ高速にし、コンパイル時に型情報を知らなくても最適化できるように設計されています。
オウムの公式ウィキはこちらです。
そこには多くの情報とリンクがあります。
Parrot wiki ホームページの下部には、Planet Parrotフィード アグリゲーターの最新の見出しも表示されます。
VM に加えて、Parrot プロジェクトは非常に強力なツール チェーンを構築して、既存の言語の移植や新しい言語の開発を容易にしています。
Parrot VM は、多くの強力な新しい Perl 6 機能に対して、他の言語の内部サポートも提供します (Perl 6 の詳細については、公式 Perl 6 Wikiを参照してください)。
Parrot は、異なる言語のモジュール間の相互運用性を提供します。たとえば、CPAN の巨大な Perl 6 バージョン (Perl 6 が今後のPerl 5.12)。
正直、こんなに大変なことだとは知りませんでした。それは長い道のりを歩んできましたが、あまり使用されていません。主なターゲット言語はまだ実際には到着しておらず、業界の専門家の間で大きなマインドシェアを失っています. 一方で、.Net などの他のソリューションや Jython などのプロジェクトは、今ここにあることが過大な宣伝を打ち負かすことができることを示しています。