2009-12-23 5 views
3

У меня нет формального образования в области информатики, но я давно программировал на Java, Ruby, jQuery.MacRuby: цель-c runtime такая же, как рубиновая среда выполнения

Я проверял проект макруби. Я продолжаю работать в операторах, которые похожи на «В среде MacRuby объектно-c-времени, такой же, как и во время выполнения Ruby».

Я понимаю, что такое МРТ. Я понимаю, что Ruby 1.9 приносит к столу. Однако я не понимаю, как виртуальная машина для одного языка может поддерживать другой язык.

Я знаю, что задаю вопрос, на который опирается годы образования. Все же любые указатели и любое обсуждение помогут.

Также мне нравится то, что я вижу в macruby.

ответ

0

Только примечание на

Однако я не понимаю, как виртуальная машина для одного языка может поддерживать другой язык.

часть.

VM представляет собой средний слой между машиной и вашим языком программирования. Например. виртуальная машина Java (JVM) выполняет так называемый байт-код Java. Компилятор javac берет исходный код и компилирует его на промежуточный язык - этот байт-код. При запуске приложения, вы на самом деле запустить байткод внутри виртуальной машины:

Среда JVM выполняет .class или .jar файлы, эмуляция инструкции виртуальной машины Java, установленной его интерпретации, или с помощью компилятора точно в срок (JIT), например, HotSpot от Sun. Компиляция JIT, а не интерпретация, используется в большинстве JVM сегодня для достижения большей скорости. Существующие компиляторы, которые позволяют разработчику прекомпилировать файлы классов в собственный код для определенных платформ.

Таким образом, можно кодировать на любом языке (например, Clojure, Scala, Rhino, ...), для которых компилятор до определенной VM был написан. Тот же самый принцип применим к архитектуре вокруг обычного промежуточного языка Microsoft .NET (CIL).

Что касается внутренних органов макросов, на их сайте есть short overview.

1

Ну

Самое простое объяснение состоит в том, что MacRuby является рубин 1,9 VM. В ранних версиях это была модифицированная версия YARV (официальная виртуальная машина Ruby 1.9), которая вместо использования пользовательских типов для таких вещей, как рубиновые строки, хэши и т. Д., Использовала эквиваленты, найденные в классах фундамента яблок, таких как NString. С появлением версии 0.5 была создана совершенно новая виртуальная машина, основанная на базе LLVM, снова совместимая с ruby ​​1.9, которая основывается на классах яблок.

Поэтому вы можете думать о Макруби просто как о рубине 1.9 VM. Однако из-за использования вышеупомянутых классов фундамента было возможно взаимодействовать с большинством яблок, а api предоставляет дополнительные функции, доступные только тем, кто работает с MacRuby (например, HotCocoa, например.)