Perl 6 / все про compiler

Sprixel

Во время своего блиц-доклада на YAPC::Russia 2009, я предположил, что до того, как появится рабочий релиз Rakudo, кто-нибудь объявит о еще об одном компиляторе Perl 6. Так и случилось.

На днях Мориц Ленц анонсировал Sprixel — компилятор Perl 6 на яваскрипте. Разбор программы базируется на преобразованной в упрощенную JSON-структуру грамматике STD.pm.

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

Исходный код компилятора находится в репозитории Pugs. Название Sprixel — морфированное словосочетание perl six.

P. S. На балтийском Perl-воркшопе в Риге я расскажу о том, как я пишу собственный компилятор Perl 6.

compiler, sprixel — 7 октября 2009

Быстрый Perl 6

Я написал для пробы компилятор Perl 6, способный распарсить и скомпилировать простую программу, которая проверяет, является ли переданное число простым или нет.

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

say is_prime(@*ARGS[0]);
sub is_prime($n) {     for 2 .. $n - 1 -> $d {         return 0 unless $n % $d;     }
    return 1; }

Не существует формулы, по которой можно было бы сразу определить, простое ли это число, однако есть несколько способов упростить поиски. Очевидное предположение — число должно оканчиваться на 1, 3, 7 или 9 (во всех остальных случаях оно делится на 2 или 5). Кроме того, нет смысла подбирать делители, превышающие sqrt(n). И, наконец, известно, что любое простое число удовлетворяет соотношению n = 6k ± 1. Здесь эти факты никак не используется чтобы заставить программу работать как можно дольше.

Если выполнить код под Rakudo, то уже на пятизначном числе (15511, например) время выполнения превышает 20 секунд, даже если предварительно оттранслировать код на Perl 6 в PIR. Компилятор, который я попробовал написать, дает исполнимый файл, находящий ответ для того же числа за 2 миллисекунды. На странице perl6.ru/p6c находится веб-интерфейс к скомпилированной программе.

О том, как это устроено работает, я расскажу в ближайшее время на блиц-докладе сначала на Хайлоаде++ 12 октября, а затем на итальянском Perl-воркшопе в Пизе 22 октября.

compiler, fast, p6c — 21 сентября 2009

Вышел Parrot 0.5.1

В списке изменений в только что выпущенной версии Parrot числится важный пункт:

+ perl6: re-implemented using PCT and NQP, new object subsystem

parrot, NQP, compiler — 18 декабря 2007

15 000 $ за компилятор Perl 6

Perl Foundation совместно с Mozilla Foundation выдают грант в размере 15 тысяч долларов на создание компилятора Perl 6, использующего виртуальную машину Parrot. Вклад Мозиллы — 2/3 от общей суммы.

Согласно условиям гранта, Patrick Michaud должен за четыре месяца (начиная с 1 ноября 2007 года) выполнить четыре пункта:

1. Создать реализацию Perl 6 на Parrot, которая поддерживает основные конструкции языка.

2. Улучшить набор тестов для Perl 6.

3. Завершить набор Parrot Compiler Toolkit, включая документацию.

4. Усилить вклад сообщества, в том числе для использования паррота с другими языками.

Подробности о гранте — на сайте TPF: http://news.perlfoundation.org/2007/11/patrick_michaud_awarded_perl_6.html.

compiler, grant — 9 ноября 2007

Вопросы про Perl 6

Старший perl-разработчик ActiveState Jan Dubois ответил на мой вопрос о планах компании по созданию компилятора Perl 6:

См. обсуждение Plans for Perl 6 в списке рассылок ActiveState

Please note that ActiveState is not trying to create competing implementations to the open source community. Even if we wanted to, we simply would not have the resources to do that. It takes a full community to eventually a rrive at a working, maintainable, production-quality implementation.

I understand that many people are frustrated by the amount of time that has elapsed since the idea of Perl 6 was first discussed. But some things simply cannot be rushed beyond a certain speed; otherwise you have to redo them as soon as you finish your first draft.

ActiveState can help with packaging of pre-built binaries, providing installers and additional tools. But I feel that it is still too early to do this for Perl 6. I think we should spend any additional time we find on improving our Perl 5 support instead.

См. Начало разговора на nntp.perl.org

Сообщество разработчиков Pugs на другой мой вопрос Is Perl 6 too late? (это название — пародия на недавнее обсуждение Is Parrot too late?), когда Pugs позволит компилировать программы в работающий байт-код, ответило, что все в руках разработчиков :-)

future, activestate, compiler, pugs — 10 мая 2007