Как выполняется код ruby - PullRequest
       0

Как выполняется код ruby

10 голосов
/ 21 февраля 2011

Я недавно начал изучать Ruby. Я знаю, что Ruby является интерпретируемым языком (хотя «каждый» язык таков, поскольку он интерпретируется процессором как машинный код). Но как интерпретатор ruby ​​преобразует код, написанный на Ruby, в машинный код? Я прочитал, что интерпретатор не читает исходный код, но байт-код, однако мне никогда не приходится компилировать, как в Java. Итак, это еще одна вещь, которую Руби делает для тебя? И если да, генерирует ли он байтовый код во время выполнения? Потому что вы никогда не получите файл .class, как вы делаете в Java. И вдобавок ко всему, я читал о компиляторах Just-In-Time, которые, очевидно, что-то делают с байтовым кодом, поэтому он работает быстрее.

Если в указанном выше случае интерпретатор сначала просматривает весь исходный код, преобразует его в байт-код, а затем компилирует в другой раз с JIT во время выполнения?

И, наконец, я НЕ ищу ответ с аспектом производительности, я просто хочу знать, как он обрабатывается, через какие этапы он проходит и в какое время он это делает.

Спасибо за ваше время.

Я использую этот интерпретатор http://www.ruby -lang.org / ru /

Ответы [ 2 ]

9 голосов
/ 21 февраля 2011

Но как интерпретатор ruby ​​преобразует код, написанный на Ruby, в машинный код?

Это не так, по крайней мере, не во всех реализациях.

Только Afaik Рубиниус пытается сделать то, что вы описываете, это компилирование в машинный код.

Я прочитал, что интерпретатор не читает исходный код, а выполняет байт-код, однако мне никогда не приходится компилировать, как в Java.Итак, это еще одна вещь, которую Ruby делает для вас?

Да

И если это так, генерирует ли он байт-код ввремя выполнения?

Да, в значительной степени.И хранит это в памяти.Tradeof - это следующий раз, когда он должен будет снова прочитать-> translate-> execute.

Если вышеприведенный случай так, интерпретатор сначала просматривает весь исходный код,преобразовать его в байт-код и затем скомпилировать в другой раз с JIT во время выполнения?

Не весь исходный код, а только то, что ему нужно.Тогда да, создание представления байт-кода хранит его в памяти, и не обязательно, что оно компилируется в машинный код.

3 голосов
/ 21 февраля 2011

В стандартной реализации Ruby1.8 используется интерпретатор MRI (Ruby Interpreter от Matz). Это программа, скомпилированная в машинный код, который:

  1. Считывает текстовые файлы в структуру данных.
  2. Следуйте инструкциям в структуре данных, чтобы решить, что делать
...