Perl 6: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Строка 69: Строка 69:
== Производительность Rakudo ==
== Производительность Rakudo ==


Вопреки расхожему мнению, что Perl 6 очень медленный, ситуация со скоростью работы существенно меняется. Появляются всё новые оптимизации, улучшается JIT в moarvm. Существуют бенчмарки для Perl 6 и можно наблюдать изменение в производительности компилятора:
Вопреки расхожему мнению, что Perl 6 очень медленный, ситуация со скоростью работы существенно меняется. Появляются всё новые оптимизации, улучшается JIT в moarvm. Существуют [http://tux.nl/Talks/CSV6/speed4.html бенчмарки] для Perl 6 и можно наблюдать изменение в производительности компилятора:


[http://tux.nl/Talks/CSV6/speed4.html [[Файл:test-t-75.png]]]
[[Файл:test-t-75.png]]


Запуск простого привет-мир занимает около 0.3 секунд, причём большее время тратиться на парсинг кода. Это даже быстрее, чем java.
Запуск простого привет-мир занимает около 0.3 секунд, причём большее время тратиться на парсинг кода. Это даже быстрее, чем java.

Версия от 13:31, 28 апреля 2016


Perl 6

Perl 6 — это высокоуровневый мультипарадигменный язык программирования общего назначения. О планах создания Perl 6 впервые было объявлено ещё в 2000 году, предполагалось, что это будет полная переработка Perl 5, созданная с нуля. Разработка затянулась на долгие 15 лет и, наконец, как и было первоначально обещано, первая стабильная реализация Perl 6 появилась в канун католического рождества в 2015 году.

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

Исторически существовало несколько попыток реализацией языка Perl 6: Pugs, написанный на Haskell, Niezha, реализованная на C#. Вскоре пришли к идее о предварительной компиляции кода Perl 6 в низкоуровневый байткод, который затем может выполняться на какой-либо виртуальной машине. Так появился Rakudo — реализация компилятора Perl 6, которая использовала в качестве бэкенда виртуальную машину Parrot. Со временем стало понятно, что виртуальная машина Parrot не оправдывает надежд, проект перестал развиваться. Появился проект компилятора Rakudo, который использовал в качестве бэкенда виртуальную машину JVM. А чуть позже в обстановке полной секретности была создана виртуальная машина MoarVM, поддержка которой также была добавлена в Rakudo.

На конференции FOSDEM в феврале 2015 Ларри Уолл объявил, что в декабре 2015 будет выпущена первая стабильная реализация Perl 6, которая будет соответствовать спецификации и это будет компилятор Rakudo, на основе виртуальной машине MoarVM. В декабре вышла версия Rakudo 2015.12, которая получила кодовое имя «Коледа» или по-русски Коляда, т.е. Сочельник — праздник кануна Рождества. Эта версия и стала первым официальным релизом компилятора Perl 6.


Установка Perl 6

Для установки компилятора Perl 6 в p8/Sisyphus достаточно выполнить команду:

$ sudo apt-get install rakudo

В составе зависимостей Rakudo есть moarvm — виртуальная машина для выполнения байткода, а также пакет nqp (Not Quite Perl) — легковесная реализация Perl 6 с поддержкой объектной модели и регулярных выражений для виртуальных машин, который используется как высокоуровневый слой для реализации полноценного компилятора Perl 6.

Сразу после установки доступен компилятор Perl 6, исполняемый файл /usr/bin/perl6, который также является и простейшим REPL (read-eval-print loop — цикл чтение-выполнение-печать), т.е. консолью для ввода и выполнения выражений на языке Perl 6.

$ perl6
> 1+1
2

Документация по Perl 6

Для изучения языка Perl 6 можно обратиться к официальной документации Perl 6, доступной по ссылкам на https://perl6.org/documentation/ . В том числе, хороший вводный документ «Perl 6 Introduction»

Документация на русском языке присутствует в сети, но может быть неактуальна, т.к. язык успел существенно развиться. Можно отметить статьи Андрея Шитова в журнале Pragmatic Perl, начиная с вводной статьи «Perl 6 XXI века»

Модули Perl 6

Сам по себе язык немыслим без библиотеки модулей, предоставляющим различные функции и возможности. Пакет rakudo не предоставляет никаких базовых модулей, поэтому весьма актуальным становится установка модулей в систему. Как известно, для Perl 5 основной источник модулей это CPAN. Для Perl 6 также создан реестр доступных модулей — это modules.perl6.org. Он не является хранилищем модулей Perl 6, а ведёт на домашние страницы модулей, которые находятся на github.

Для установки модулей в Perl 5 используются утилиты cpan или cpanm, для Perl 6 также существует свои менеджеры модулей, такие как panda и zef. В pепозиториях p8/Sisyphus существует сборка менеджера panda, для его установки требуется выполнить команду:

$ sudo apt-get install perl6-Panda

Текущая модель поиска и прекомпиляции модулей в Perl 6 предполагает, что основной репозиторий модулей помещается в домашний каталог пользователя в каталоге ~/.perl6. Подробнее об этом можно почитать здесь.

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

Таким образом, с помощью panda можно искать и устанавливать Perl 6 модули в домашний каталог пользователя:

$ panda search Readline
Readline                 v0.0.2     Perl 6 interface to GNU Readline, the 
                                    CLI-based line reading library
$ panda install Readline
==> Fetching Readline
==> Building Readline
==> Testing Readline
t/01-load.t .. ok
t/02-base.t .. ok
All tests successful.
Files=2, Tests=18, 74 wallclock secs ( 0.09 usr  0.01 sys + 71.94 cusr  1.68 csys = 73.72 CPU)
Result: PASS
==> Installing Readline
==> Successfully installed Readline

Если при установке возникает ошибка Found no writable directory into which panda could be installed, значит не создан каталог panda в репозитории модклей Perl 6 в домашнем каталоге, что можно исправить командой:

$ mkdir -p $(perl6 -e 'print $*REPO.repo-chain[0].Str')/panda


Производительность Rakudo

Вопреки расхожему мнению, что Perl 6 очень медленный, ситуация со скоростью работы существенно меняется. Появляются всё новые оптимизации, улучшается JIT в moarvm. Существуют бенчмарки для Perl 6 и можно наблюдать изменение в производительности компилятора:

Test-t-75.png

Запуск простого привет-мир занимает около 0.3 секунд, причём большее время тратиться на парсинг кода. Это даже быстрее, чем java.

$ perl6 --stagestats -e 'say "hello, world!"'
Stage start      :   0.000
Stage parse      :   0.251
Stage syntaxcheck:   0.000
Stage ast        :   0.000
Stage optimize   :   0.002
Stage mast       :   0.010
Stage mbc        :   0.000
Stage moar       :   0.000
hello, world!

В некоторых ситуациях Perl 6 умеет оптимизировать лучше чем Perl 5:

# сумма чисел от 1 до 10млн
$ time perl5 -e '$sum+=$_ for (1..10_000_000)'
1,30s user 0,01s system 99% cpu 1,309 total
# сумма чисел от 1 до 1млрд
$ time perl6 -e 'say [+] 1 .. 1_000_000_000;'
0,29s user 0,06s system 99% cpu 0,341 total