Связь между REPL, интерпретатором и компилятором - PullRequest
4 голосов
/ 27 марта 2011

Из Википедия :

REPL обычно ошибочно называют переводчик. Это неправильно - многие языки программирования, которые используют компиляция (включая байт-код сборник) есть REPLs, такие как Common Lisp и Python.

От ответ на этот пост

Интерактивные переводчики используют REPL. переводчик не обязан иметь один. Вы можете запустить Python, например, в неинтерактивном режиме (в файле) и он не будет использовать read-eval-print цикл. * +1014 *

Мне было интересно, если REPL [del] всегда существует [/ del] существует только для переводчика? Википедия говорит, что REPL также существует для компилятора? Если да, то как это?

Спасибо и всего наилучшего!

Под интерпретатором я подразумеваю тот, который выполняет выполнение сразу после компиляции.

Ответы [ 3 ]

4 голосов
/ 27 марта 2011

Я не уверен, спрашиваете ли вы, какие слова обычно используются или что-то еще.

В любом случае REPL является циклом чтения Eval Print (см. Первые буквы). Если у вас есть переводчик, который не читает вашу программу или не оценивает ее (т. Е. «Понимает», что вы хотите, чтобы она делала и делала это) или не печатает результаты где-либо, то что это хорошо?

Если вы вообще ничего не увидите и не услышите, то все равно не сделают то, что вам нужно, или у вас была всего 1 попытка, и вы могли бы положить камень на стол вместо компьютера.

Может быть, могут быть забавные возражения со словами: «Если это только изменит отображаемую иконку, действительно ли она печатает?» и тому подобное :-) Или «если это не чтение с клавиатуры, действительно ли это чтение?». Действительно глупая чистая философия.

Что правда, так это то, что некоторые системы реагируют по-разному в зависимости от того, заставляете ли вы их читать с клавиатуры или из файла. Я не уверен, какая польза от этого, но я думаю, что вы могли бы предложить помощь человеку (например, завершение команды и т. Д.), Когда он фактически печатает на клавиатуре.

Может быть, некоторые не принимают более 1 выражения при чтении из файла?

Мне было интересно, всегда ли существует REPL для переводчика?

Я полагаю, это вопрос определения «переводчик». Если вы понимаете, что это означает (в прагматическом смысле) «что-то, что делает то, что я говорю», нет. Как бы вы сказали, если он не будет слушать?

Говорит ли Википедия, что REPL также существует для компилятора? Если да, то как это?

Да, конечно. Все системы LISP такие. Они чувствуют себя точно так же, как переводчик, но с течением времени все происходит волшебным образом, когда система узнает, как вы формулируете себя и узнаете, что меняется, а что нет, и просто компилирует то, что не меняется, в машинный код.

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

Все искусственное различие интерпретатора / компилятора стало случайным, то есть из-за ограниченности ресурсов в те времена.

1 голос
/ 27 марта 2011

REPL расшифровывается как Read-Eval-Print-Loop.Как интерпретатор, так и компилятор могут использоваться для выполнения бита eval - либо иметь экземпляр интерпретатора, работающего в фоновом режиме и подавать ему входные данные, либо использовать компилятор для поэтапной компиляции (предоставлено, это требует гораздо больше работынекоторое сотрудничество со стороны разработчиков компиляторов, но это возможно, как показывают бесчисленные примеры - хотя вы обычно компилируете только в байт-код).Остальное - это в основном ввод-вывод и некоторый клей, чтобы сохранить все ранее введенные определения доступными для следующих команд.

1 голос
/ 27 марта 2011

Это может быть не очень хороший ответ, просто некоторые заметки,

  • JavaScript в IE 6.0 не поставляется с REPL.

  • REPL для компиляторов также может выглядеть как интерпретаторы, если язык может быть проанализирован за один раз, только вперед. Компилятор может вставлять точку останова после каждого скомпилированного оператора, выполнять выполнение до достижения точки останова, затем возвращаться обратно пользователю, ждать следующей строки ввода и повторяться. Наконец, все входные строки компилируются и выполняются.

...