Perl 6: различия между версиями
(Новая страница: «Category:Sisyphus == Perl 6 == Perl 6 — это высокоуровневый мультипарадигменный язык программировани...») |
Нет описания правки |
||
Строка 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 также существует свои менеджеры модулей, такие как panda и zef. В pепозиториях p8/Sisyphus существует сборка менеджера panda, для его установки требуется выполнить команду: | |||
$ sudo apt-get install perl6-Panda | |||
Текущая модель поиска и прекомпиляции модулей в Perl 6 предполагает, что основной репозиторий модулей помещается в домашний каталог пользователя в каталоге <tt>~/.perl6</tt>. Подробнее об этом можно почитать [http://pragmaticperl.com/issues/34/pragmaticperl-34-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D0%BC%D0%B8-%D0%B8-%D0%BF%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%B2-perl-6.html здесь]. | |||
Это означает, что хоть модули для 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 | |||
Если при установке возникает ошибка <tt>Found no writable directory into which panda could be installed</tt>, значит не создан каталог panda в репозитории модклей Perl 6 в домашнем каталоге, что можно исправить командой: | |||
$ mkdir -p $(perl6 -e 'print $*REPO.repo-chain[0].Str')/panda | |||
== Производительность Rakudo == | |||
Вопреки расхожему мнению, что Perl 6 очень медленный, ситуация со скоростью работы существенно меняется. Появляются всё новые оптимизации, улучшается JIT в moarvm. Существуют бенчмарки для Perl 6 и можно наблюдать изменение в производительности компилятора: | |||
[http://tux.nl/Talks/CSV6/speed4.html [[Файл: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 |
Версия от 13:25, 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 и можно наблюдать изменение в производительности компилятора:
Запуск простого привет-мир занимает около 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