Parrot は、もともと Perl 6 用に設計された仮想マシンです。
Java 仮想マシン (JVM) /ホットスポット VMや共通言語ランタイム (CLR)などの競合する仮想マシンにはない、Parrot VM が提供する技術的な機能は何ですか?
Parrot は、もともと Perl 6 用に設計された仮想マシンです。
Java 仮想マシン (JVM) /ホットスポット VMや共通言語ランタイム (CLR)などの競合する仮想マシンにはない、Parrot VM が提供する技術的な機能は何ですか?
次の回答は 2009 年に書かれました。raiph によるこの 2015 年の更新も参照してください。
@Reed を拡張し、いくつかのハイライトを指摘すると、Parrot のオペコードは、ほとんどの仮想マシンよりもはるかに高いレベルにあります。たとえば、ほとんどのマシンは整数と浮動小数点数を格納しますが、基本的なレジスタは整数、数値、文字列、および Parrot Magic Cookie (PMC) です。文字列を組み込むだけで、JVM から一歩前進します。
さらに興味深いのは PMC です。JVM のオブジェクト タイプに似ていますが、はるかに代替可能です。PMC は、配列、テーブル、ツリー、イテレータ、I/O など、実際の言語で必要な他のすべての複雑な型のコンテナです。PMC とそのためのさまざまな組み込み ops により、言語作成者の作業が少なくなります。 . Parrot は、言語を実装する上で面倒ではあるが必要な部分をためらうことはありません。
私の情報は古くなっているかもしれませんが、オペコードはプラグ可能であると信じています。言語に必要なオペコードのみを含む Parrot VM を出荷できます。それらは継承可能になる予定でした。もしあなたの言語がそれらの配列を株式の Parrot 配列とは少し異なるように動作させたい場合は、それをサブクラス化することができます。
最後に、Parrot は、アセンブラー ( PASM ) だけでなく、少し高水準の言語であるParrot Intermediate Representation (PIR)でも作成できます。PIR には、ループ、サブルーチン、ローカライズされた変数、およびいくつかの基本的な数学と比較操作があります。これは、人々がプログラミング言語に期待するすべての基本であり、金属から遠く離れることはありません。
全体として、Parrot は、言語を設計し、できるだけ多くの実装を他の人に任せたいと考えている言語設計者 (言語設計者によって、言語設計者のために書かれています) にとって非常に友好的です。
これについては、 Parrot VM Introページで読むことができます。
JVM や CLR に対する Parrot の主な利点は、最初に動的言語をサポートするように設計されており、動的型付け言語のサポートとパフォーマンスが向上する可能性があることです。JVM と CLR はどちらも、静的に型付けされた言語をサポートすることを目的としており、多くの設計上の決定がそれを示しています。
Parrot は、もともと Perl 6 用に設計された仮想マシンです。
現在、もともと Perl 6 用に設計された2 つのVM があります。MoarVMへのコミットは 2012 年に始まりました。
Java 仮想マシン (JVM)/ホットスポット VM や共通言語ランタイム (CLR) などの競合する仮想マシンにはない、Parrot VM が提供する技術的な機能は何ですか?
このページの別の回答では、現在 (2015 年 4 月) の Parrot リード開発者である Reini Urban が、Parrot と JVM および CLR VM との簡単な比較を提供しています。
Reini 氏によると、MoarVM に対する Parrot の主な利点は、「事実上ロックレス スレッド」です。
JVMとCLRについては十分に知りませんが、ヒントは次のとおりです。
更新:JVMは最近のRakudo Perl 6バックエンドの1つであるため、これはおそらく無関係です。JVM上のRakudoPerl6(Perl 6アドベントカレンダー2013、3日目)を参照してください。
Parrot がほとんどの VM (JVM とは明らかに異なる) と異なるもう 1 つの点は、Parrot がスタック マシンではなくレジスタ マシンであることです。しかし、それが長所と言えるのか短所と言えるのか、人々は長い間議論していると思います。
JVM と CLR に対する主な利点と技術的な違いは、タイプ ( PMC と呼ばれるクラス) と ops (メソッド) を効率的なユーザー提供の C 実装から動的にロードできることと、言語を作成および拡張するためのパーサー フレームワークが組み込まれていることです。 .