Подтвердить что ты не робот

Является ли Perl скомпилированным или интерпретируемым языком программирования?

Скомпилирован или интерпретирован Perl?

4b9b3361

Ответ 1

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

Одна точка зрения заключается в том, что компиляция означает компиляцию из описания исходного кода в другой, то есть генерация кода.

Если мы согласны с этими предпосылками, тогда Perl 6 может быть скомпилирован, а Perl 5 и более поздние - это языки, которые интерпретируются.

Perl 6 специально скомпилирован в байт-код Parrot. Таким образом, Perl 6 является правильно скомпилированным языком, так же говорят, Java.

Perl 5 и старше разбирают исходный код Perl во внутреннем списке или дереве, но я не думаю, что его следует называть правильным компилятором, за исключением, может быть, в теоретическом смысле. Он не выводит никакого байт-кода, сборки или реального машинного кода, обычно связанного с компиляторами. Этап синтаксического анализа Perl для проверки синтаксиса Perl назывался "компиляцией" источника. Он используется для проверки синтаксической достоверности исходного файла Perl без его запуска.

Он вызывается как:

perl -c myprog.pl

Но если вы посмотрите на помощь для Perl-опций, -c фактически означает "check".

-c                check syntax only (runs BEGIN and CHECK blocks)

(Чтобы еще больше усложнить ситуацию, Perl 5 поддерживал запись внутреннего байт-кода, но он был удален в версии 5.10. Предположительно, потому что это было плохо, я не знаю.)

С другой стороны,, если вы утверждаете, что компиляция является актом разбора исходного дерева в любом другом виде представления, ну, этот синтаксический анализ делает Perl компилируемым языком. Perl должен полностью проанализировать исходный файл, прежде чем он сможет его запустить. По этому определению любой язык, который может начать выполнение исходного файла непосредственно перед разбором, будет интерпретированным языком.

Третий способ, чтобы посмотреть на это, как эти слова, "интерпретируемые" и "скомпилированные" чаще всего используются профессионалами в этой области. Я бы поставил хорошие деньги, если бы случайный подмножество программистов попросил выбрать "скомпилированный" или "интерпретированный" при мысли о Perl, большинство из них предпочло бы "интерпретировать". Не из-за какого-то теоретического аргумента в отношении характера Perl, а потому, что "скомпилированный" обычно вызывает мысли о "компиляции", "связывании", "объектном коде" и т.д., Тогда как "интерпретируется" означает "писать код, попробуйте" ". Правильно или неправильно, что может быть полезно знать при попытке определить, действительно ли Perl интерпретируется или фактически компилируется. В вашем задании вы столкнетесь с множеством аргументов.

Ответ 2

Вы не получите определенного ответа, потому что у вас нет определенного вопроса.

Perl всегда находится в одном из двух состояний: он либо компилируется, либо выполняется. Вот почему вы видите разговоры о "во время компиляции" и "во время выполнения". Обычно вы получаете одну компиляционную фразу, за которой следует одна фаза выполнения, но это не должно быть так.

Эти две фазы также могут торговаться взад и вперед. eval STRING - это способ интерпретации интерпретатором компилятора (поэтому тоже есть do FILE и require). Блок BEGIN - это способ, которым компилятор может вызвать интерпретатор (поэтому тоже есть use и no).

Когда вы запустите perl -c, вы опустите фазу времени выполнения. Существуют различные способы пропустить фазу времени компиляции, но ни одна из них не является особенно удобной или обычной. Apaches mod_perl только компилирует сценарии один раз, но выполняет их много раз. Если вы используете Byteloader, вы можете сделать то же самое. Et cetera.

Правильный ответ на компиляцию или интерпретацию Perl - это просто YES.

Ответ 3

Оба, действительно. Perl5 компилирует исходный код в объекты OPCODE, а затем интерпретирует объекты OPCODE. Далее следует длинный ответ.


Из Википедии,

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

По этому определению Perl5 является компилятором. Он берет исходный код Perl5 и производит график объектов OPCODE.

$ perl -MO=Concise,-exec -E'for (1..3) { say "Hello, World!" }'
1  <0> enter 
2  <;> nextstate(main 48 -e:1) v:%,2048
3  <0> pushmark s
4  <$> const(IV 1) s
5  <$> const(IV 3) s
6  <$> gv(*_) s
7  <{> enteriter(next->c last->f redo->8) lKS/8
d  <0> iter s
e  <|> and(other->8) vK/1
8      <;> nextstate(main 47 -e:1) v:%,2048
9      <0> pushmark s
a      <$> const(PV "Hello, World!") s
b      <@> say vK
c      <0> unstack v
           goto d
f  <2> leaveloop vK/2
g  <@> leave[1 ref] vKP/REFC
-e syntax OK

Однако компилятор Perl5 не создает машинный код. Итак, как выполняется график OPCODE? Из Википедии одно определение для переводчика - это то, что

явно выполняет сохраненный предварительно скомпилированный код, созданный компилятором, который является частью системы интерпретатора

Таким образом, это означает, что интерпретируются графики OPCODE.

Работа продолжается, чтобы предоставить возможность компилировать байт-код Perl5 в LLVM. Это, в свою очередь, может быть jit скомпилировано в машинный код. Это тот же подход, который использует Java.

Ответ 4

От Wikipedia: "Perl - это высокоуровневое, универсальное, интерпретируемое, динамическое программирование язык". Perl 6 позволяет также для компиляции (опять же, см. Wikipedia).

Ответ 5

Perl - интерпретируемый язык. Тем не менее, он эффективно компилируется в p-код для повышения эффективности.

Ответ 6

Наиболее часто интерпретируется, но может быть скомпилирован. о компиляторе perl

Ответ 7

И. Во-первых, Perl 6 script скомпилирован в байт-код (и оптимизирован). Затем выполняется (однако для этого вам все еще нужен интерпретатор Perl). Bytecode - это своего рода исполняемый код, который не зависит от среды, в которой он работает (один и тот же байт-код может работать в среде Unix на процессоре ARM, системе Windows с x86 и Haiku на x64).

Perl 6 может быть скомпилирован в байт-код Parrot VM (виртуальная машина). Parrot VM также используется Python и Ruby.

Это делает Perl, Ruby и Python быстрее, чем PHP, который просто интерпретируется (также может быть скомпилирован, но для этого вам нужны сторонние компоненты).