Rubyインタプリタについて:あなたが知る必要があるもの
プログラムが選択された異なるRubyのインタプリタ上の記事を見つけるために、残念ながら難しい、重要な役割を果たすことができる、または正しいインタプリタを選択する方法を実行するために、正しいRubyインタプリタを使用します。
私たちは、この資料の冒頭にある場合でも、Rubyで通訳に関するコンテンツの多くをコンパイルの下には、「Rubyインタプリタは何?」、尋ねた、あなたは彼らが正しい決定を行うために必要な知識を理解します。
通訳とは何ですか?コンパイルされたと解釈されたプログラミング言語
言語は、2つの情報を交換することに合意し、語彙、構文、文法組成物の標準セットで構成された通信の基礎です。しかし、同じ言語は、あなたが翻訳したり、ある言語から別のものへ同じ考えを解釈する方法を必要とするとき二人は言っていないとき。
コンセプトの翻訳や解釈は、プログラミングに適用され、マシンにのみ実行することができ、自分の人間レベルのコードのプログラミング出力、理解できないマシンコードをコンピュータのCPUがすぐに理解することができ、低レベルの命令の限定セットです。
:機械は、Rubyなどのプログラミング言語、の二つの動作方法有するコンパイルされ、解釈します。
コンパイルされた言語と呼ばれるツールは、ユーザーがプログラムを実行する前に、コンパイラは、低レベルのコードコマンド、このマシン固有のコードがプログラムを実行するマシンのシリーズに変換する必要があり、コンパイラが必要です。
解釈ツールは、プログレッシブインタプリタがマシンコードにソースコードを変換し、プログラミング言語のインタプリタが呼び出されたプログラムの実行が必要です。
この違いは、翻訳や外国語通訳の違いのようなものです、翻訳者の仕事は、翻訳者を使用する必要の前に完了します。通訳は、シーンを翻訳し、そして人々が生きて聞く必要があります。
コンパイル言語やインタープリタ型言語は、その長所と短所、二つの方法の混合を使用して、いくつかの言語(例えば、Java(登録商標))を有しています。通常、インタプリタ言語は、複数の異なるシステム間での移植性、柔軟性、およびデバッグが容易です。しかし、彼らはスピードとパフォーマンスを犠牲にして、これらの利益のために支払います。
コンパイル言語は、特定のマシンにコンパイラの最適化時間は、プログラムコードを実行しているので、それは、インタプリタ言語よりも一般的に高速です。
Rubyはしばしば解釈が、それは実際には、言語に応じて達成することができますが解釈され、コンパイルされ、この記事の残りの部分では、我々は唯一のRubyインタプリタを説明します。
Rubyインタプリタは何ですか?
Rubyで書かれたソースコードプログラムを解釈することができるRubyインタプリタ。
同じ翻訳や通訳に別の人を許すように、それは、Rubyインタプリタのシングルバージョンではありません。
代わりに、Rubyの開発者は、多くの説明の選択を持つことができます。各言語版は、わずかに異なる「味」を提供します
それでは、どのようにあなたが実際には「本物」のRubyを実行するインタプリタを使用することができますか?
使用して ルビーをスペックスイート (また、ルビー/スペックとしても知られている)、ルビー仕様スイートは、所与のRuby実装を検証するために使用される一連のテストは、プログラムの解釈の正しい動作と結果を有しています。
Rubyインタプリタの選択:YARV、ルビーMRI、JRubyの、およびRubiniusの
以下に、私たちは最も人気のある選択肢のRubyインタプリタについて説明します:YARV、ルビーMRI / CRuby、JRubyとRubiniusのを、すべてのインタプリタがRubyのスペックスイートに合格した後、信頼性があり、Rubyのコードを実行することを選択し成熟します。
YARV
YARV(もう一つのRuby VM)技術は、公式Rubyインタプリタをサポートするために、インタプリタスタックに基づいています。ルビー2.6、公式のRubyインタプリタであるYARVから始まる、Rubyのバージョン1.9を起動し、YARVは(もCRubyとして知られている)のRuby MRIの古いバージョンを置き換えます。
あなたはRubyのプログラムを実行すると、YARVコードは、Ruby仮想マシン(VM)で実行中の命令の限られたセットに変換されます。VMは、それがより良い予測可能性と安定性を持っている別のコンピュータをシミュレートし、お使いのコンピュータ上で動作するプログラムです。これは、彼らがマシンコードの特定の種類を使用するかどうかをすべてのコンピュータが、ルビーを実行できることを保証します。
ルビーMRI / CRuby
Ruby 1.9の前YARVのバージョンでは、デフォルトのRubyインタプリタもCRubyと呼び、RubyのMRIです。これは、Ruby MRIマッツのルビーインタプリタ(へ「マッツ」の名前を、またはRubyのまつもとゆきひろまつもとゆきひろ氏のチーフデザイナーである)を表します。
CRuby代替名は、インタプリタはCプログラミング言語を使用するという事実を反映しています。CRubyはYARVという点で異なる:CRuby使用している間YARVは、Rubyのコードを解析するために、スタックを使用して抽象構文木を。
JRubyの
CRubyとしてC言語のように、JRubyのは、Javaプログラミング言語Rubyインタプリタです。JRubyのは、残りの続く Java仮想マシンのような(JVM)上で実行されているペースプログラミング言語、 Clojureの と スカラ座を。
あなたはどこにでもJavaプログラムを実行することができRubyプログラムを実行できるようにAndroid携帯電話にラップトップから、JRubyのJVMを使用しているため。JRubyのは、Javaの標準ライブラリとの三者を使用することができます。
Rubiniusの
RubiniusのRubyプログラムは、Ruby MRI / CRubyは異なるCコード、などなど少し解釈しよう。残りはできるだけ多くのRubyのコードを使用しながら、Rubiniusのは、C ++の基礎です。
Rubiniusのは、コードをコンパイルされたプログラムを実行すると、そのメモリ管理および速度のRubyのMRIに比べて改善すること、より動的に実行し、それを助ける「ジャストインタイム」(JIT)コンパイラが含まれています。
これはRubyのインタプリタあなたは使うべきでしょうか?
使用するRubyインタプリタは、あなたの特定の状況に応じて、未解決の問題です。
⚠️(非オリジナル)
パフォーマンスRubiniusのか、JRubyの、デフォルトのYARVに重点を置いて全体的なパフォーマンス。YARV将来の業績は、本質的にシングルスレッドの代わりにマルチスレッド、改善されます。
あなたがルビーのデフォルトバージョンがインストールされている場合、あなたはほぼ確実やRuby MRI(ルビー1.9以降の場合)(ルビー1.8およびそれ以前の場合)YARVを使用します。多くの場合、デフォルトの選択は、Ruby開発者のニーズを満たすのに十分です。
しかし、高パフォーマンスの要件とあなたのRubyプログラム場合は、Rubiniusのか、JRubyのが良いかもしれません。よると、ベンチマーク、RubiniusのとJRubyのパフォーマンスは約二倍のRuby MRIのです。
もう一つの要因は考慮すべきRubyインタプリタはスレッドと並行性の問題を使用することです。グローバルインタプリタロック(GIL)を使用して、RubyのMRI。GILは、複数のプログラムスレッドが同時に同じデータにアクセスできなくなります。デフォルトにより、Rubyはシングルスレッド、マルチスレッドで並列を可能にしません。
しかし、この制限はインタプリタルビー、例えばRubiniusのとのJRubyの他の実装に存在しない、あなたは、マルチコア、マルチCPUシステム、大幅に改善された性能の利点を取ることができます。
良いニュースは、Rubyのチームは、Rubyで、バージョン3の今後のリリースで制限を回避するためにGILによってギルドと呼ばれるメカニズムを期待しています。将来的には、あなたは、Rubyのデフォルトバージョンでより良い状況に並行してマルチスレッドの変更の数が表示されます。しかし、あなたは我慢してとRuby 3(明確な発売日はありません)を待たなければなりません。
遂に
上記の選択肢は決して唯一の代替Ruby実装です。 mrubyは のためのRuby実装である ラズベリーパイ や他の組み込みシステム。一方で オパールは、 JavaScriptのコンパイラへの変換Rubyがあります。
しかし、ほとんどのRubyのシーンのために、間違っていることはできません、以下を選択します。
デフォルトのRuby実装、YARVやRuby MRIは、多くのRubyプログラマのニーズに適しています。これは、新しいRubyの言語機能の最速の繰り返しで、かつ異なると Rubyの宝石 の最大の互換性を持っています。しかし、それは現在、真の並列性とスピードが他のインタプリタよりも遅くなることがあり欠けています。
あなたは(企業のコンピュータを含む)多くの異なるシステム上でのRubyを実行する必要がある場合には、JRubyのは良い選択です。JRubyのも簡単にJavaコードと対話することができます。
あなたは非常に高いパフォーマンスを必要とする場合、またはあなたが並列処理したいとき、Rubiniusのは良い選択です。また、Rubyの接続されているCまたはC ++コードを使用することができます。