Ну, это зависит от того, что вы подразумеваете под скомпилированным языком. Возможно, именно поэтому поиск в Google не дал четкого ответа на ваш вопрос.
Одна точка зрения состоит в том, что компиляция означает компиляцию из описания исходного кода в другое, т.е. генерация кода .
Если мы примем эти предпосылки, то Perl 6 может быть скомпилирован, а Perl 5 и старше являются интерпретируемыми языками.
Perl 6 специально скомпилирован в Байт-код Parrot . Следовательно, Perl 6 - это правильно скомпилированный язык, так же как, скажем, Java - это .
Perl 5 и старше анализирует исходный код Perl во внутреннем списке или дереве, но я не думаю, что его следует называть правильным компилятором, за исключением, может быть, в теоретическом смысле. Он не выводит никакого байт-кода, сборки или реального машинного кода, обычно связанного с компиляторами. Этап синтаксического анализа Perl для проверки синтаксиса Perl раньше назывался «компиляцией» исходного кода. Он используется для проверки синтаксической достоверности исходного файла Perl без его запуска.
Он вызывается как:
perl -c myprog.pl
Но если вы посмотрите на справку по параметрам Perl, -c на самом деле означает "проверка".
-c check syntax only (runs BEGIN and CHECK blocks)
(Для дальнейшего усложнения Perl 5 имел поддержку для записи внутреннего байт-кода, но он был удален в версии 5.10 . Предположительно, потому что он был глючным, я не знаю.)
С другой стороны, , если вы утверждаете, что компиляция является актом синтаксического анализа исходного дерева в любом другом виде представления, то этот анализ делает Perl компилируемым языком. Perl должен полностью проанализировать исходный файл, прежде чем он сможет начать его выполнение. По этому определению любой язык, который может начать выполнение исходного файла непосредственно перед синтаксическим анализом, будет интерпретируемым языком.
Третий способ посмотреть на это из того, как эти слова, «интерпретированные» и «скомпилированные», чаще всего используются профессионалами в данной области. Я бы поспорил на хорошие деньги, что, если случайное подмножество программистов попросят выбрать «скомпилированный» или «интерпретированный», думая о Perl, большинство выберет «интерпретированный». Не из-за какого-то теоретического спора о природе Perl, а потому, что «скомпилированный» обычно вызывает мысли о «компиляции», «компоновке», «объектном коде» и т. Д., В то время как «интерпретированный» означает «написать код, попробуйте ». Правильно или нет, это может быть полезно знать при попытке определить, действительно ли Perl действительно интерпретирован или фактически скомпилирован. В вашем квесте вы встретите много аргументов.