Выпуск 24. Февраль 2015

Каналы в Perl 6 | Содержание | Обзор CPAN за январь 2015 г.

Perl 6, или Get ready to party

Заметки с выступления Ларри Уолла на Фосдеме

Пару месяцев назад появилось сообщение о том, что на конференции FOSDEM Ларри Уолл объявит, что Perl 6 будет готов для продакшна в 2015 году. Я не мог пропустить такое событие и съездил на час в Брюссель ради того, чтобы услышать это из первых уст.

Фосдем (Free and Open source Software Developers’ European Meeting) — двухдневная бесплатная конференция, которая проходит ежегодно в конце января — начале февраля и собирает несколько тысяч разработчиков. Отдельным языкам программирования выделены так называемые деврумы, где в течение дня звучат выступления про этот язык.

В этому году в расписании субботнего Perl-деврума было аж пять докладов про Perl 6:

А в воскресенье состоялось выступление Ларри Уолла Get ready to party!. Это было уже вне формата деврума: доклад размещен в секции «Языки» и проходил в главном зале Janson, вмещающим 1500 слушателей. Свободных мест почти не было.

На сайте Фосдема опубликовано небольшое интервью, сделанное перед конференциией. Видеозапись выступления должна появиться на странице live.fosdem.org.

Ларри начал с цитаты из «Хоббита»:

Когда мастер Бильбо Бэггинс из Бэг-Энда объявил, что намерен в самом скором времени отпраздновать свое одиннадцатьдесят однолетие особенно великолепным приемом, весь Хоббитон загудел и заволновался.

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

Весь доклад был построен на параллелях c произведениями Толкиена. Например, Perl 5 и Perl 6 соотносятся так же, как две книги: «Хоббит» и «Властелин колец».

Толкиен тоже долго писал продолжение. Но для тех, кто только сейчас начнет его читать, ждать 15 лет уже не нужно. Общий принцип: если что-то делалось долго, но сейчас уже завершено или почти готово, то нет никакого повода переживать, особенно тем, кто не участвовал в процессе ожидания. Те, кто родился позже, сразу получат готовыми обе книги.

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

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

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

Например, шаблоны (бывшие регулярные выражения) теперь не просто строки. Они парсятся наравне с основным языком как его подъязык.

В Perl 5 в двух частях оператора s/// одна и та же подстрока именуется по-разному: то \1, то $1:

s/ \b (\w+) \s+ \1 \b /$1/x

В Perl 6 все едино:

s/ « (\w+) \s+ $0 » /$0/

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

Например, определив постфикс ! для вычисления факториала:

sub postfix:<!>($n) {
    [*] 2..$n;
}

say 42!
# 1405006117752879898543142606244511569936384000000000

Причем модифицированная грамматика начинает действовать даже пока она еще не полностью описана, и это, по мнению Ларри Уолла, является киллер-фичей Perl 6. Классическое рекурсивное определение факториала содержит вызов ! внутри себя:

sub postfix:<!>($n) {
    $n < 2
        ?? 1
        !! $n * ($n-1)!
}

То есть новое правило используется прямо в теле своего определения.

Важная особенность, которая вошла в язык, — ленивые списки, контексты и даже исключения.

Пример ленивого списка: определение (причем как константы) бесконечного списка

constant fib = 0, 1, * + *, * ... *;

Правила определены в момент компиляции, а реальные вычисления происходят по мере необходимости:

say fib[^20];
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

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

Наконец, на 41-й минуте (из 50) выступления, было сделано долгожданное объявление. В сентябре (на день рождения Ларри) будет выпущена официальная бета, а на Рождество 2015-го — релиз 6.0.0.0.0.0.

Тут же последовал мелкий шрифт с перечнем того, что может этому помешать, либо чего не следует ожидать сразу.

  1. Автобус.
  2. Все участники процесса — волонтеры, поэтому могут вноситься коррективы в приоритетах и пр.
  3. Из набора тестов будет исключено все, что не реализовано на момент релиза.
  4. На Рождество достаточно одной реализации, и это будет Rakudo на MoarVM.
  5. Производительность будет выше, чем сейчас, но все равно не стоит ожидать, что она превзойдет Perl 5 (стабильность — более важная задача).
  6. Версия 6.0 это все еще .0, поэтому она не обязательно будет сразу совершенной.

Сейчас процесс разработки старается завершить три основные задачи: GLR, NSA, NFG. Это, соответственно, Grand List Refactoring, Natively Shaped Arrays и Normal Form Grapheme. За подробностями я отсылаю читателя к недавнему посту из адвент-календаря The State of Perl 6 in 2014.

Наконец, Ларри добавил, что когда-нибудь может быть начнет и Perl 7.

Андрей Шитов


Каналы в Perl 6 | Содержание | Обзор CPAN за январь 2015 г.
Нас уже 1393. Больше подписчиков — лучше выпуски!

Комментарии к статье