LINUX.ORG.RU

Разработчики Perl 6: язык готов к использованию

 ,


2

6

24 декабря в официальном блоге, посвящённом новостям разработки Perl 6, появилась поздравительная запись. Разработчики поздравили всех с наступающим католическим Рождеством, и с тем, что так долго ожидаемое взросление языка, наконец, состоялось. Фактически, язык готов к использованию в рабочих проектах, и разработчики обещают больше ничего существенно не менять.

С момента выхода первой версии Perl прошло 28 лет, с момента выхода самой популярной в данное время версии Perl 5 – более 20 лет. Как шутит Ларри Уолл, создатель языка и лидер его разработки, 6-я версия, возможно, когда-нибудь и заменит 5-ю – примерно лет через 40.

Версия Perl 6 была анонсирована более 10 лет назад – на Amazon ещё можно купить книгу про этот «вскоре выходящий» язык, изданную в 2004 году. Длительность разработки можно объяснить тем, что Perl 6 – фактически, новый язык, написанный по мотивам 5-й версии. И хотя некоторые утверждают, что 6-ка отличается от 5-ки не более, чем C++ от C, всё-таки идеология в Perl 6 эволюционировала достаточно сильно для того, чтобы назвать его более современным языком.

Ларри Уолл надеется, что преподаватели в институтах смогут, наконец, используя один и тот же язык, обучать студентов разным стилям программирования – функциональному, процедурному и объектному.

Логотипом Perl 6 выбрали весёленькую бабочку. Как (полушутя) пояснил Уолл на конференции в октябре этого года, это было сделано специально для того, чтобы сделать язык привлекательным для 7-летних девочек. В качестве примера хорошей рекламы ЯП среди детей он рекомендовал посмотреть на Python.

Уолл отметил, что основное, что объединяет две версии языка – сообщество программистов-единомышленников, стремящихся к тому, чтобы языки были более-менее взаимозаменяемыми. Например, для Perl 6 существует модуль Inline::Perl5, а для Perl 5 — модуль Inline::Perl6.

>>> Подробности

anonymous

Проверено: splinter ()
Последнее исправление: splinter (всего исправлений: 1)

Ответ на: комментарий от AlexVR

Тогда расскажи на чем сейчас история про складывание чисел от 1 до 1000000

> time perl script.pl
500000500000

real    0m0.047s
user    0m0.047s
sys     0m0.000s
> time perl6 script6.pl
500000500000

real    0m1.162s
user    0m1.140s
sys     0m0.022s
> cat script.pl
my $sum = 0;
for my $i (1..1000000) {
        $sum += $i;
}
print $sum . "\n"
> cat script6.pl
my $sum = 0;
for 1..1000000 {
        $sum += $_;
}
print $sum ~ "\n"

На этом примере Perl 6 медленнее чем Perl 5 в 24.72340425531914893617 раза.

saahriktu ★★★★★
()

Ларри Уолл надеется, что преподаватели в институтах смогут, наконец, используя один и тот же язык, обучать студентов разным стилям программирования – функциональному, процедурному и объектному.

Common Lisp. Racket.

Gentooshnik ★★★★★
()
Ответ на: комментарий от anonymous

Познавай ещё юный падаван. Когда ты действительно будешь знать С - тебе не будет нужно ничего другого.

anonymous
()
Ответ на: комментарий от anonymous

Если в том, что преподаватели не могут, то я видел много примеров обратного. ВУЗов, не преподавателей. Т.е. Common Lisp и Racket уже много где используется для демонстрации разных парадигм на одном языке, а Ларри нашёл несуществующую проблему и героически решил её.

Хотя, мы, программисты, регулярно этим занимаемся.

Gentooshnik ★★★★★
()
Ответ на: комментарий от saahriktu

Я ещё сравнил с Tcl:

proc sum {} {
	for {set i 0; set s 0} {$i<=1000000} {incr i} {incr s $i}
	return $s
}
puts [sum]

В обоих случаях при втором и следующих запусках результат был примерно 0.1 секунда, как у perl5, так и у Tcl.

for {set i 0; set s 0} {$i<=1000000} {incr i} {incr s $i}
puts $s

А вот в таком варианте результат был около 1 секунды, поскольку Tcl задействует JIT когда встречает определение процедуры.

На первом примере результат Tcl 8.6 и старой 8.5 был примерно одинаковым, на втором примере Tcl 8.6 оказался немного медленней чем 8.5, 1.28 секунд против 0.96 секунд.

Есть ли какие-то причины изучать Perl, если я уже знаю Tcl? Позволяет ли он что-то делать, чего в Tcl нельзя и вообще есть ли какие-либо преимущества?

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от anonymous

Да это просто луч тонкости в новости :)

h4tr3d ★★★★★
()
Ответ на: комментарий от anc

В jython, кстати, такой «тест» выполняется быстрее, чем в cpython(но медленнее, чем в pypy)

pawnhearts ★★★★★
()
Ответ на: комментарий от anonymous

На С долго и муторно писать и отлаживать.

На C писать быстро-быстро, отлаживать мало-мало, результата - да кому она нада начальника :)

anc ★★★★★
()

Тут уже питон хоронить собираются, а ты про перл...

cipher ★★★★★
()
Ответ на: комментарий от anc

На C писать быстро-быстро, отлаживать мало-мало, результата - да кому она нада начальника :)

- я печатаю со скоростью 600 знаков в минуту!
- Да-а?
- Да!
- Только такая фигня получается!

anonymous
()

преподаватели в институтах смогут, наконец, используя один и тот же язык, обучать студентов разным стилям программирования – функциональному, процедурному и объектному.

Скажите ему, что уже давно есть язык, на котором можно учить «функциональному, процедурному и объектному», а также мультиагентному и логическому стилям.

(Нет, это не лишп)

OCaml-hater
()
Ответ на: комментарий от anonymous

- я печатаю со скоростью 600 знаков в минуту!

>- Да-а? >- Да! >- Только такая фигня получается!

600 знаков в минуту!

Пфф, тоже мне удивил.

anonymous
()
Ответ на: комментарий от Xenius

Есть ли какие-то причины изучать Perl, если я уже знаю Tcl? Позволяет ли он что-то делать, чего в Tcl нельзя и вообще есть ли какие-либо преимущества?

Нет, нет и нет.

anonymous
()
Ответ на: комментарий от saahriktu

Такой вариант шустрее, да.

Kubuntu 15.10 с perl6 из репозитория:

> time perl perl.pl
500000500000

real    0m0.082s
user    0m0.080s
sys     0m0.000s
> time perl6 perl6.pl
500000500000

real    0m16.583s
user    0m16.376s
sys     0m0.224s
> time perl6 perl6_2.pl
500000500000

real    0m14.050s
user    0m13.628s
sys     0m0.412s
perl6_2.pl это «say [+] 1..1000000;»
14 секунд как-бы намекают что perl6 не взлетит.

V1KT0P ★★
()
Ответ на: комментарий от d

Так ведь там по факту суммирование списка натуральных чисел от 1 до N.
Что, используя метод Гаусса, решается как N/2*(N+1).

Если вместо цикла в лоб было предложено решение с fold, почему бы не использовать способ получше.

habamax ★★★
()
Ответ на: комментарий от habamax

Ну, т.е. ты суммируешь не произвольный список, а арифметическую прогрессию. Мы решаем разные задачи.

d ★★★★
()
Ответ на: комментарий от d

Я предложил решение задачи как она была сформулирована:

Тогда расскажи на чем сейчас история про складывание чисел от 1 до 1000000

А так да, для произвольного набора чисел это не работает.

habamax ★★★
()
Ответ на: комментарий от V1KT0P

Тест не очень. Так как идёт замер поднятия виртуальной машины. Стоит использовать нормальные тесты. Если же цель показать, что perl6 скорее всего не будет использоваться для системных скриптов, то можно и просто написать это. В целом уже выше перетёрли, что предназначение языка немного сместилось.

anonymous
()

Чо я делаю не так, мужыки?

emerge -av --newuse --with-bdeps=y virtual/perl6
$ perl6 -v
This is perl6 version 2015.11 built on MoarVM version 2015.11
$ moar --version
This is MoarVM version 2015.11 built with JIT support

$ perl6 hello.pl 
Could not find Perl6::BOOTSTRAP in any of:
  .
  blib
  /var/tmp/portage/dev-lang/moarvm-2015.11/image/usr/share/perl6/lib
  /var/tmp/portage/dev-lang/moarvm-2015.11/image/usr/share/nqp/lib
   at gen/moar/m-ModuleLoader.nqp:199  (/usr/share/nqp/lib/Perl6/ModuleLoader.moarvm:load_module:251)
 from <unknown>:1  (/usr/share/perl6/runtime/CORE.setting.moarvm:<dependencies+deserialize>:31)
 from gen/moar/m-ModuleLoader.nqp:373  (/usr/share/nqp/lib/Perl6/ModuleLoader.moarvm::44)
 from gen/moar/m-ModuleLoader.nqp:363  (/usr/share/nqp/lib/Perl6/ModuleLoader.moarvm:load_setting:33)
 from src/Perl6/World.nqp:512  (/usr/share/nqp/lib/Perl6/World.moarvm:load_setting:55)
 from src/Perl6/World.nqp:284  (/usr/share/nqp/lib/Perl6/World.moarvm:loading_and_symbol_setup:181)
 from src/Perl6/Grammar.nqp:1116  (/usr/share/nqp/lib/Perl6/Grammar.moarvm:comp_unit:901)
 from src/Perl6/Grammar.nqp:427  (/usr/share/nqp/lib/Perl6/Grammar.moarvm:TOP:524)
 from gen/moar/stage2/QRegex.nqp:2093  (/usr/share/nqp/lib/QRegex.moarvm:parse:44)
 from gen/moar/stage2/NQPHLL.nqp:1593  (/usr/share/nqp/lib/NQPHLL.moarvm:parse:80)
 from gen/moar/stage2/NQPHLL.nqp:1549  (/usr/share/nqp/lib/NQPHLL.moarvm:compile:200)
 from gen/moar/stage2/NQPHLL.nqp:1286  (/usr/share/nqp/lib/NQPHLL.moarvm:eval:62)
 from gen/moar/stage2/NQPHLL.nqp:1506  (/usr/share/nqp/lib/NQPHLL.moarvm:evalfiles:91)
 from gen/moar/stage2/NQPHLL.nqp:1400  (/usr/share/nqp/lib/NQPHLL.moarvm:command_eval:214)
 from src/Perl6/Compiler.nqp:65  (/usr/share/nqp/lib/Perl6/Compiler.moarvm:command_eval:93)
 from gen/moar/stage2/NQPHLL.nqp:1374  (/usr/share/nqp/lib/NQPHLL.moarvm:command_line:114)
 from gen/moar/m-main.nqp:37  (/usr/share/perl6/runtime/perl6.moarvm:MAIN:18)
 from gen/moar/m-main.nqp:33  (/usr/share/perl6/runtime/perl6.moarvm:<mainline>:189)
 from <unknown>:1  (/usr/share/perl6/runtime/perl6.moarvm:<main>:8)
 from <unknown>:1  (/usr/share/perl6/runtime/perl6.moarvm:<entry>:9)
madjestic
()
Ответ на: комментарий от d

Без версии перла6 ты сам знаешь кто. Мои замеры на ноябрьском выпуске сходятся с приведёнными saahriktu.

Я взял то что было готово «из коробки».

perl6 -v
This is perl6 version 2014.07 built on parrot 6.6.0 revision 0
Если в Kubuntu такая версия, то боюсь представить какая в Debian.

V1KT0P ★★
()
Ответ на: комментарий от anonymous

Тест не очень. Так как идёт замер поднятия виртуальной машины.

Замерил обычный вывод строки для замера поднятия VM:

> time perl6 perl6_3.pl
Hello

real    0m0.564s
user    0m0.436s
sys     0m0.084s
Хорошо, вычтем из 14 секунд пол секунды на VM. В итоге эти пол секунды особой роли не сыграли.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P
$ perl6 -v
This is Rakudo version 2015.12 built on MoarVM version 2015.12
implementing Perl 6.c.

$ cat /etc/debian_version 
8.2
anonymous
()
Ответ на: комментарий от V1KT0P

2014.07

ха-ха

parrot

ха-ха-ха

Кстати, у анонимуса на дебиане версия даже выше, чем в моём школоарче.

d ★★★★
()
Ответ на: комментарий от saahriktu

На этом примере Perl 6 медленнее чем Perl 5 в 24.72340425531914893617 раза.

Так давайте меряться пи.. тоесть перлами

$ perl6 -v
This is Rakudo version 2015.12-46-gd08e043 built on MoarVM version 2015.12 implementing Perl 6.c.

$ perl -v

This is perl 5, version 22, subversion 0 (v5.22.0) built for MSWin32-x64-multi-thread

$ uname -a
MSYS_NT-10.0-WOW DESKTOP-IUO8RDB 2.3.0(0.290/5/3) 2015-09-15 09:26 i686 Msys

$ cat s.pl
my $sum = 0;
for my $i (1..1000000) {
        $sum += $i;
}
print $sum . "\n"

$ time perl s.pl
500000500000

real    0m0.154s
user    0m0.000s
sys     0m0.015s

$ cat s6.pl
use v6;
say [+] 1..1000000;

$ time perl6 s6.pl
500000500000

real    0m0.308s
user    0m0.000s
sys     0m0.015s

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

q0tw4 ★★★★
()
Последнее исправление: q0tw4 (всего исправлений: 1)

10 лет старперы колупались, а на выходе эпически тормозной монстроглюк. Но конечно на лоре нашлись наркоманы, заторчавшие от этой дури. Кто-то даже крякнул про тырпрайз, вот умора то. Ну и привычные вскукареки в адрес «легкотни для ламеров» от перл5 маразматиков, как вы предсказуемы. Лучше бы подучили эту легкотню, пока не поздно. Хотя кто возьмет на работу пенсионеров, жаль вас даже слегка.

anonymous
()
Ответ на: комментарий от d

Кстати, у анонимуса на дебиане версия даже выше, чем в моём школоарче.

А не надо верить на слово анонимусу. Он либо врет, либо не договаривает.
Установил чистый дебиан(debian-8.2.0-amd64-CD-1.iso) и обновил все пакеты. Результат:

user@debian:~$ cat /etc/debian_version
8.2
user@debian:~$ perl6 -v
This is perl6 version 2014.07 built on parrot 6.6.0 revision 0

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

А не надо верить на слово анонимусу. Он либо врет, либо не договаривает.

Он с сорцов собрал. Причем хз где он их выкопал, на офсайте в списке загрузки даже тарбола свежего вроде как нет. Кста кто поможет собрать под федорку/росу, спасибо скажу.

q0tw4 ★★★★
()
Последнее исправление: q0tw4 (всего исправлений: 1)
Ответ на: комментарий от q0tw4
git clone https://github.com/tadzik/rakudobrew ~/.rakudobrew 
export PATH=~/.rakudobrew/bin:$PATH 
rakudobrew build moar 2015.12
rakudobrew build-panda

Дел на 5 минут и срать в систему не надо, все в ~/.rakudobrew лежит

anonymous
()
Ответ на: комментарий от q0tw4

Кстати:

$ time perl s.pl
500000500000

real	0m0.054s
user	0m0.054s
sys	0m0.000s
$ time python s.py
500000500000

real	0m0.028s
user	0m0.020s
sys	0m0.008s
$ time python3 s.py
500000500000

real	0m0.038s
user	0m0.029s
sys	0m0.008s
pawnhearts ★★★★★
()
Ответ на: комментарий от anonymous

где он их выкопал

Туплю, просто с тега жита вытянулись 2015.12 без дописки.

rakudobrew build-panda

Ага и бумц:

Уже на «master»
Ваша ветка обновлена в соответствии с «origin/master».
==> Bootstrapping Panda
==> Installing panda from a local directory '/home/***/.rakudobrew/moar-2015.12/panda'
==> panda depends on File::Find, Shell::Command, JSON::Fast
==> Shell::Command depends on File::Find
==> Fetching File::Find
==> Building File::Find
==> Testing File::Find
no such file or directory
   at gen/moar/m-CORE.setting:19648  (/home/***/.rakudobrew/moar-2015.12/install/share/perl6/runtime/CORE.setting.moarvm:throw:215)
 from gen/moar/m-CORE.setting:31045  (/home/***/.rakudobrew/moar-2015.12/install/share/perl6/runtime/CORE.setting.moarvm:result:113)
 from /home/***/.rakudobrew/moar-2015.12/panda/lib/Panda/Common.pm:85  (/home/***/.rakudobrew/moar-2015.12/panda/ext/File__Find/lib/.precomp/AEB5E66886F036F5AF7448E587F49EB233F6F7F5.1451493579.17135/63/633BE101F544B063064E2375A2B39D99CAD6B1C5::109)
...

Причем https://github.com/tadzik/rakudobrew/issues/62 помочь ничем не может.

q0tw4 ★★★★
()
Последнее исправление: q0tw4 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Впрочем да, надо ж perl-Test-Harness до жит версии обновить, а как это сделать в росе хз, новый для меня дистр.

q0tw4 ★★★★
()
Ответ на: 5.3 от d

Чтобы в следующем году ты столько для опенсорса делал, сколько tadzik делает.

Ну чтоб он попал в топ опенсорц людей года, ему надо бы возглавить команду и подготовить перл 6 к продакшену с портами всех либ из перла 5, в которых есть толк. А то трудится человек над никому пока не нужным ЯП и не заметен вклад его в историю ну никак.

q0tw4 ★★★★
()
Ответ на: комментарий от anonymous

Common Lisp. Racket.
преподаватели смогут
смогут

смекаешь?

Ога, смекаю. Типо лиспы оне не осилят а перловку - запросто! На первое хоть книги готовые есть, и курсы готовые ...

Смекаешь?

anonymous
()
Ответ на: комментарий от anonymous

Типо лиспы оне не осилят а перловку - запросто!

Коммон он конечно хорош, но слишком много сущностей наплодил, сложен таки. Ракет думаете легче? Не знаю как у всех, но у меня пар валит из ушей при чтении доков начиная с макросов. Какойто дикий матан прет и как будто пропущено многое. Да и посмотрите как сложно выходит, когда плодятся рои обратных кавычек и непонятных системных макровызовов. Это еще не говоря о континуейшенах.

Перл в принципе тоже язык не для легкого изучения. Наоборот, он для тех, кому нужен умный компилер, с которым интересно вести возвышенную беседу, паралельно минимизируя нудный набор букав. И к этой беседе следует подготовиться. К счастью подготовка идет не наездом на матан, а состоит из кучи простых мелких и понятных фич. Вот только для чтения кода надо бы их все помнить, от того и write-only язык выходит.

Так что «все смогут» это однозначно про питон. Пусть он и не очень функциональный и кривовато ООПшный, но что тут поделаешь.

q0tw4 ★★★★
()
Последнее исправление: q0tw4 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.