Всё время отодвигавшийся срок выхода шестой версии языка Perl успел стать шуткой — его автор Ларри Уолл начал работу над стандартами ещё в 2000 году и неоднократно объявлял о том, что финальная версия будет готова «к Рождеству», однако это рождество откладывалось на протяжении пятнадцати лет. 5 октября 2015 года на конференции в Сан-Франциско Уолл объявил, что разработка близится к концу, работа над стандартом завершена, и уж на это Рождество Perl 6.0.0 точно будет закончен. Впрочем, Уолл тут же пообещал, что и после этого в язык будут продолжать добавляться новые возможности.

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

Сам список изменений нельзя охватить в двух словах. Пожалуй, главное из них — это полная поддержка объектно ориентированного программирования, но есть и другие важные вещи. К примеру, поддерживается ленивое вычисление списков — можно задать бесконечную последовательность, и ее члены будут вычисляться лишь по мере обращения.

@integers = 0..Inf; # Бесконечная последовательность

Ключевые слова gather и take помогут создать аналог генератора из Python.

my $squares = gather for 0..Inf {
        take $_ * $_;
    };

В этом примере создается список $squares, при обращении к элементу которого вычисляется квадрат числа. При этом вычисление происходит лишь в момент обращения.

Полезна и концепция объединений (junctions). Новые встроенные функции all(), any(), one() и none() позволят обходиться без множественных И и ИЛИ. Комбинируя объединения и «умный» оператор совпадения, можно сравнить переменную со списком значений.

1 ~~ one(1, 2, 3) # Вернет True, так как один и только один из параметров one() — единица.
                  # Использование any() тоже дало бы True, а all() и none() — False.

Среди прочих новинок — статические типы, передача параметров в блоки (аналог замыкания), расширенный, более наглядный механизм работы регулярных выражений (он называется «правила», rules), поддержка параллельных вычислений и многое-многое другое.

Основы Perl 6 можно почерпнуть на этой странице, доступна и более полная документация.

Ларри Уолл, конечно, не удержался и рассказал об очередной порции новинок, которую разработчики приберегли к официальному релизу. Среди них — конструкция react { whenever }, которая исполняет блок кода в тот момент, когда будет достигнуто некое условие — скажем, переменная примет определенное значение в ходе выполнения программы.

Или, к примеру, «интуитивное» заполнение списков. Оно работает следующим образом.

say 1, 2, 4 ... 2**32

Такое выражение выведет последовательность из степеней двойки, при этом все промежуточные значения от 4 до 232 вычислятся автоматически.

Под конец выступления Ларри Уолл сам поиронизировал по поводу скорости разработки. «Как известно, можно выбрать два из трех пунктов — быстро, хорошо и дешево. Мы опенсорсный проект, так что дешево — это про нас по определению. Нам оставалось выбрать между "хорошо" и "быстро", и мы решили сделать хорошо». Уолл считает, что Perl 6 — это язык программирования, который прослужит ещё сто лет. Конечно, если размышлять в таких масштабах, то лишние десять лет разработки — это сущие пустяки. Главное, чтобы к наступлению католического Рождества в 2015 году не понадобилось срочно переработать какую-нибудь концепцию. Потому что «срочно» и разработка Perl 6 — это, как мы знаем, вещи плохо совместимые.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    5 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии