Perl 6: различия между версиями
(Новая страница: «Category:Sisyphus == Perl 6 == Perl 6 — это высокоуровневый мультипарадигменный язык программировани...») |
Crux (обсуждение | вклад) м (менеджер модулей zef пришёл на смену panda) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 4: | Строка 4: | ||
Perl 6 — это высокоуровневый мультипарадигменный язык программирования общего назначения. О планах создания Perl 6 впервые было объявлено ещё в 2000 году, предполагалось, что это будет полная переработка Perl 5, созданная с нуля. Разработка затянулась на долгие 15 лет и, наконец, как и было первоначально обещано, первая стабильная реализация Perl 6 появилась в канун католического рождества в 2015 году. | Perl 6 — это высокоуровневый мультипарадигменный язык программирования общего назначения. О планах создания Perl 6 впервые было объявлено ещё в 2000 году, предполагалось, что это будет полная переработка Perl 5, созданная с нуля. Разработка затянулась на долгие 15 лет и, наконец, как и было первоначально обещано, первая стабильная реализация Perl 6 появилась в канун католического рождества в 2015 году. | ||
Perl 6 не является новой версией Perl 5, а является совершенно самостоятельным языком программирования. Оба языка разрабатываются и развиваются независимо. В отличии от Perl 5, язык Perl 6 определяется из набора спецификаций языка RFC, которых на данный момент уже [http://perl6.org/archive/rfc/ 361] штука. Таким образом, любая программная реализация, которая соответствует данной спецификации, является реализацией языка Perl 6. | |||
Исторически существовало несколько попыток реализацией языка Perl 6: Pugs, написанный на Haskell, Niezha, реализованная на C#. Вскоре пришли к идее о предварительной компиляции кода Perl 6 в низкоуровневый байткод, который затем может выполняться на какой-либо виртуальной машине. Так появился [http://rakudo.org/ Rakudo] — реализация компилятора Perl 6, которая использовала в качестве бэкенда виртуальную машину [http://www.parrot.org/ Parrot]. Со временем стало понятно, что виртуальная машина Parrot не оправдывает надежд, проект перестал развиваться. Появился проект компилятора Rakudo, который использовал в качестве бэкенда виртуальную машину JVM. А чуть позже в обстановке полной секретности была создана виртуальная машина [http://moarvm.com/ 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, исполняемый файл <tt>/usr/bin/perl6</tt>, который также является и простейшим REPL (''read-eval-print loop'' — цикл чтение-выполнение-печать), т.е. консолью для ввода и выполнения выражений на языке Perl 6. | |||
$ perl6 | |||
> 1+1 | |||
2 | |||
== Документация по Perl 6 == | |||
Для изучения языка Perl 6 можно обратиться к официальной документации Perl 6, доступной по ссылкам на https://perl6.org/documentation/ . В том числе, хороший вводный документ [http://perl6intro.com/ «Perl 6 Introduction»] | |||
Документация на русском языке присутствует в сети, но может быть неактуальна, т.к. язык успел существенно развиться. Можно отметить [http://pragmaticperl.com/authors/2 статьи] Андрея Шитова в журнале Pragmatic Perl, начиная с вводной статьи [http://pragmaticperl.com/issues/22/pragmaticperl-22-perl-6-xxi-%D0%B2%D0%B5%D0%BA%D0%B0.html «Perl 6 XXI века»] | |||
== Модули Perl 6 == | |||
Сам по себе язык немыслим без библиотеки модулей, предоставляющим различные функции и возможности. Пакет rakudo не предоставляет никаких базовых модулей, поэтому весьма актуальным становится установка модулей в систему. Как известно, для Perl 5 основной источник модулей это [http://www.cpan.org CPAN]. Для Perl 6 также создан реестр доступных модулей — это [https://modules.perl6.org modules.perl6.org]. Он не является хранилищем модулей Perl 6, а ведёт на домашние страницы модулей, которые находятся на github. | |||
Для установки модулей в Perl 5 используются утилиты cpan или cpanm, для Perl 6 также существует свой менеджер модулей — zef (раньше рекомендовался менеджер panda, но сейчас он больше не поддерживается). В pепозитории Sisyphus существует сборка менеджера zef, для его установки требуется выполнить команду: | |||
$ sudo apt-get install perl6-Zef | |||
По умолчанию основной репозиторий модулей помещается в домашний каталог пользователя в каталоге <tt>~/.perl6</tt>, но возможна установка и в системные каталоги. Таким образом, с помощью zef можно искать и устанавливать Perl 6 модули: | |||
$ zef search Readline | |||
===> Found 1 results | |||
------------------------------------------------------------------------------- | |||
ID|From |Package |... | |||
------------------------------------------------------------------------------- | |||
1 |Zef::Repository::Ecosystems<p6c>|Readline:ver<0.0.2>:auth<github:drforr>|... | |||
------------------------------------------------------------------------------- | |||
$ zef install--force-test Readline | |||
===> Searching for: Readline | |||
===> Searching for missing dependencies: LibraryCheck | |||
===> Testing: LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe> | |||
===> Testing [FAIL]: LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe> | |||
Failed to get passing tests, but continuing with --force-test | |||
===> Testing: Readline:ver<0.0.2>:auth<github:drforr> | |||
===> Testing [FAIL]: Readline:ver<0.0.2>:auth<github:drforr> | |||
Failed to get passing tests, but continuing with --force-test | |||
===> Installing: LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe> | |||
===> Installing: Readline:ver<0.0.2>:auth<github:drforr> | |||
== Производительность Rakudo == | |||
Вопреки расхожему мнению, что Perl 6 очень медленный, ситуация со скоростью работы существенно меняется. Появляются всё новые оптимизации, улучшается JIT в moarvm. Существуют [http://tux.nl/Talks/CSV6/speed4.html бенчмарки] для 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 |
Текущая версия от 17:26, 27 сентября 2017
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 также существует свой менеджер модулей — zef (раньше рекомендовался менеджер panda, но сейчас он больше не поддерживается). В pепозитории Sisyphus существует сборка менеджера zef, для его установки требуется выполнить команду:
$ sudo apt-get install perl6-Zef
По умолчанию основной репозиторий модулей помещается в домашний каталог пользователя в каталоге ~/.perl6, но возможна установка и в системные каталоги. Таким образом, с помощью zef можно искать и устанавливать Perl 6 модули:
$ zef search Readline ===> Found 1 results ------------------------------------------------------------------------------- ID|From |Package |... ------------------------------------------------------------------------------- 1 |Zef::Repository::Ecosystems<p6c>|Readline:ver<0.0.2>:auth<github:drforr>|... -------------------------------------------------------------------------------
$ zef install--force-test Readline ===> Searching for: Readline ===> Searching for missing dependencies: LibraryCheck ===> Testing: LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe> ===> Testing [FAIL]: LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe> Failed to get passing tests, but continuing with --force-test ===> Testing: Readline:ver<0.0.2>:auth<github:drforr> ===> Testing [FAIL]: Readline:ver<0.0.2>:auth<github:drforr> Failed to get passing tests, but continuing with --force-test ===> Installing: LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe> ===> Installing: Readline:ver<0.0.2>:auth<github:drforr>
Производительность Rakudo
Вопреки расхожему мнению, что Perl 6 очень медленный, ситуация со скоростью работы существенно меняется. Появляются всё новые оптимизации, улучшается JIT в moarvm. Существуют бенчмарки для Perl 6 и можно наблюдать изменение в производительности компилятора:
Запуск простого привет-мир занимает около 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