3

私はコンピュータ サイエンスの正式な教育を受けていませんが、Java、Ruby、jQuery で長い間プログラミングを行ってきました。

私はmacrubyプロジェクトをチェックしていました。「MacRuby では、objective-c ランタイムは ruby​​ ランタイムと同じ」のようなステートメントに出くわします。

MRIの意味がよくわかりました。ruby 1.9 がもたらすものを理解しています。ただし、ある言語の VM が別の言語をサポートする方法を理解できません。

私は、何年にもわたる正式な教育に依存する質問の答えを求めていることを知っています. それでも、任意のポインタと任意の議論が役立ちます.

また、macruby で見られるものが好きです。

4

2 に答える 2

1

良い、

最も簡単な説明は、MacRuby が ruby​​ 1.9 VM であるということです。以前のバージョンでは、YARV (ruby 1.9 の公式 VM) の修正バージョンであり、ruby 文字列やハッシュなどのカスタム型を使用する代わりに、NString などのリンゴの基本クラス内にある同等のものを使用していました。バージョン 0.5 の登場により、まったく新しい VM が LLVM フレームワークに基づいて開発されました。これも ruby​​ 1.9 と互換性があり、apples の基本クラスに基づいています。

したがって、Macruby は単純に Ruby 1.9 VM と考えることができます。ただし、前述の基本クラスを使用することで、MacRuby を実行しているユーザーだけが利用できる追加機能 (たとえば、HotCocoa など) を提供する Apple 独自の API の多くとネイティブにインターフェースすることが可能になりました。

于 2010-01-15T14:13:00.090 に答える
0

についてのメモ

ただし、ある言語のVMが別の言語をサポートする方法を理解できません。

部。

VMは、マシンとプログラミング言語の間の中間層を表します。たとえば、Java仮想マシン(JVM)は、いわゆるJavaバイトコードを実行します。コンパイラはソースコードを受け取り、それjavacを中間言語(そのバイトコード)にコンパイルします。アプリケーションを実行すると、実際には仮想マシン内でバイトコードが実行されます。

JVMランタイムは、.classまたは.jarファイルを実行し、JVM命令セットを解釈するか、SunのHotSpotなどのジャストインタイムコンパイラ(JIT)を使用してエミュレートします。今日のほとんどのJVMでは、高速化を実現するために、解釈ではなくJITコンパイルが使用されています。開発者がクラスファイルを特定のプラットフォーム用のネイティブコードにプリコンパイルできるようにする先行コンパイラも存在します。

したがって、特定のVMへのコンパイラーが作成されている任意の言語(Clojure、Scala、Rhinoなど)でコーディングすることができます同じ原則が、Microsoft .NETの共通中間言語(CIL)周辺のアーキテクチャにも当てはまります。

macrubyの内部については、サイトに簡単な概要があります。

于 2009-12-23T12:05:36.493 に答える