Может ли 'perl6' анализировать только Perl 6? - PullRequest
37 голосов
/ 06 мая 2011

Есть такая (относительно) хорошо известная аксиома Perl: «Только Perl может анализировать Perl». Мне интересно, останется ли это так для Perl 6?

Расширение обсуждения ... Я задумался над этим вопросом, учитывая недавнее обновление PyPy. Неужели уникальность Perl исключает его из подобных усилий? Есть ли большая ценность в ограниченном статическом представлении кода Perl (PPI?)? Может ли Perl 6 иметь JIT-компилятор? *

* Я не уверен, связаны ли эти понятия. Они?

Ответы [ 5 ]

36 голосов
/ 07 мая 2011

Perl6 не существует, и есть много компиляторов Perl 6. В Perl 6 есть грамматика, хотя она написана на Perl 6 , поэтому, пока вы понимаете это, она говорит вам все, что вам нужно знать.

Я только что задал Ларри этот вопрос,так как я сижу напротив него за ланчем на семинаре Сан-Паулу Perl .Он говорит, что теперь «только Perl 6 может анализировать Perl 6» с заглавными буквами на обоих Perls, что означает нечто иное, чем исходное утверждение.

Хотя для этого не требуется специальная программа, поскольку PerlЦель 6 - один стандарт и множество реализаций.«Perl6» не существует, хотя Ларри и псевдоним его Rakudo для сегодняшнего выступления, хотя он использовал несколько различных реализаций для примеров.

9 голосов
/ 31 августа 2011

Последнее, что я посмотрел, Perl 6 наследует символ Perl 5 / символ, который может означать «начало регулярного выражения», когда ожидается термин, или «делить», когда ожидается оператор.Учитывая это, и прототипы, и Perl 6 находятся как минимум в том же лагере, что и Perl 5 для статического токенизации.Единственный способ маркировать программу на Perl 6 - это запустить интерпретатор Perl 6 в компиляторе Perl 6.Черепахи все время вниз, еще раз.

8 голосов
/ 07 мая 2011

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

По моему мнению, это только станет более серьезной проблемой в Perl 6. В Perl 5 числоколичество мест, где правила парсера могут измениться, ограничено, тогда как в Perl 6 они широки и разнообразны.В дополнение ко всему, что есть в Perl 5, Perl 6 позволяет вам определять свои собственные операторы, и, поскольку это определение сделано в коде Perl, для его понимания необходим интерпретатор Perl.

Насколько я знаю, ни одна реализация пока не поддерживает его, но спецификация Perl 6 также включает в себя макросы реального языкового уровня, которые могут реструктурировать код Perl 6 либо в текстовом виде, либо путем манипулирования AST.И то и другое требует наличия интерпретатора Perl для выполнения своей магии.

Итак, в заключение я чувствую, что Perl 6 сделает аксиому сильнее, чем для Perl 5. (И будет еще большекошмара для авторов подсветки синтаксиса :)) Конечно, это все для увеличения выразительности языка, поэтому я согласен с уступкой.

Следствием вышесказанного является то, что в отличие от Perl 5, Perl 6 имеет формальную спецификацию, поэтому аксиому, возможно, придется изменить на «Только интерпретатор, реализующий спецификацию Perl 6, может анализировать Perl 6», но этонемного педантично.

За обновление:

Я не думаю, что вышесказанное исключает идею JIT-компилятора для Perl 6, поскольку по определению такой компилятор также должен был бысодержит интерпретатор Perl 6Что касается статической компиляции, это МОЖЕТ быть возможным, но это сильно ограничит возможности языка во время выполнения, так как любая конструкция, включающая eval, не будет работать.

PPI полезен в земле Perl 5, потому что интерпретатор perl необеспечить множество богатых и простых в использовании интерфейсов для его AST.В Perl 6 уровень самоанализа намного выше, поэтому сам интерпретатор может предоставить все необходимые инструменты.

5 голосов
/ 07 мая 2011

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

3 голосов
/ 07 мая 2011
Может ли Perl6 иметь JIT-компилятор?

Вы подразумеваете, что Perl5 не может JITted на основе "только perl может анализировать Perl5", но это не так. Даже если программа Perl5 может компилироваться по-разному при каждом запуске, это не мешает JITted.

Итак, если Perl5 - один из наиболее свободно определенных языков & mdash; может быть JITted, почему Perl6 не может быть слишком.

...