MacRuby: время выполнения target-c совпадает со временем выполнения ruby - PullRequest
3 голосов
/ 23 декабря 2009

У меня нет формального образования в области компьютерных наук, но я долгое время программировал на Java, Ruby, jQuery.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 15 января 2010

Ну

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

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

0 голосов
/ 23 декабря 2009

Просто записка на

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

часть.

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

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

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

Что касается внутренних органов макруби, на их сайте есть краткий обзор 1021 *.

...