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

Может ли только Perl6 анализировать Perl 6?

Там, что (относительно) хорошо известная аксиома Perl, "Только perl может анализировать Perl". Мне интересно, это останется верным для Perl 6?

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

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

4b9b3361

Ответ 1

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

Я просто задал Ларри этот вопрос, так как я сижу напротив него за обедом в São Paulo Perl Workshop. Он говорит, что теперь "Только Perl 6 может анализировать Perl 6", с заглавными буквами на обоих Perls, что означает нечто иное, чем исходное утверждение.

Вам не нужна определенная программа, но поскольку цель Perl 6 - это один стандарт и множество реализаций. Нет никакого "perl6", хотя Ларри на этот раз навязал его Ракудо, хотя он использовал несколько разных реализаций для примеров.

Ответ 2

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

Ответ 3

Аксиома "Только 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 land, потому что интерпретатор perl не предоставляет много богатых и простых в использовании интерфейсов для своего AST. В Perl 6 уровень интроспекции больше FAR, поэтому сам интерпретатор может предоставить все необходимые инструменты.

Ответ 4

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

Ответ 5

Может ли Perl6 иметь JIT-компилятор?

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

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