Měl bych pár otázek:
1. Perl 5 má dost špatnou pověst coby write-only jazyk. Může být šestka v tomto nějak podstatně jiná?
2. Za předpokladu, že někdo hledá nový cool jazyk, proč by měl uvažovat o Perl 6?
3. Jak šestku vnímá komunita Perlu? Jaké je podle Vás procento lidí, kteří jsou celí žhaví na přechod z pětky?
Díky za případné odpovědi.
Ad 1. Může. Šestka je vpodstatě úplně jiný jazyk. Je to, ale dost rozsáhlý jazyk, takže spousta lidí po přečtení 15 minutovího tutoriálu bude opět tvrdit, že je to komplexní write-only jazyk.
Ad 2. Ve zprávičce je odkaz na Why would you want to use Perl 6? Some answers.. Diskuse běží i na abclinuxu, viz můj příspěvek tam.
Ad 3. Procento si netroufám odhadnout. Vpodstatě kolem Perlu 6 vzniká nová komunita. Tím, že za Perl 6 stojí Larry Wall a pořád se to jmenuje Perl, tak jsou společné konference a pár lidí ma moduly v Perlu 5 i Perlu 6. Spusta lidí z komnity čekala se na oficiální vydání - stabilizaci. Teď bude spousta lidí čekat na vylepšení performance a menší spotřebu paměti, podporu v Linux distribucích, lepší ekosystém modulů, .... Larry říká, že Perl 5 by mohl být nahrazen během 40 let a že Perl 6 je jazyk pro příštích 100 let. Každopádně Perl 5 a Perl 6 jsou "sister languages". Mluvil jsem o tom nedávno na Brno Perl Mongers.
Ad 1. Pokud Perl získal špatnou pověst díky tomu, že [em]lze[/em] v něm psát špatně čitelný kód. Pak Perl 6 má ještě větší vyjadřovací možnosti a tedy velmi slušnou šanci tuto pověst získat taky.
Např. 4x napsáno v podstatě totéž
my @numbers=((1, 2, 3), (4, 5), (6, 7, 8, 9), (10,));
@numbers».elems.sum.say;
say [+] @numbers.map: *.Int;
say sum map { +$^x }, @numbers;
@numbers ==> map { .elems } ==> { .sum.say }();
což může vést třeba, třeba k :)
-> $x { say $x }() <== map( { elems( @$_ ) }, @numbers ).sum
Ad 2. Já třeba tu volnost z bodu jedna považuji za velkou výhodu.
Ad 3. Já bych byl celý žhavý psát některé skripty v Perlu 6 namísto Perlu 5 (o přechodu nemůže být řeč jsou to jiné jazyky), ale zatím ho málo znám (dokumentace není ještě úplně kvalitní) a třeba nechápu proč jsou některé věci tak pomalé:
time perl6 -e ' join q{ },"AAAA" .. "ZZZZ"'
real 1m13.598s
user 1m13.497s
sys 0m0.097s
vs.
time perl -e ' join q{ },"AAAA" .. "ZZZZ"'
real 0m0.198s
user 0m0.167s
sys 0m0.030s
Najdou se i ty rychlé
perl 5 - simple int loop: ok
Command being timed: "perl -e my $i = 0; while (($i = $i + 1) <= 100000000) { }; print "ok\n";" User time (seconds): 3.91
perl 6 - simple int loop: ok
Command being timed: "perl6 -e my int $i = 0; while ($i = $i + 1) <= 100000000 { }; say "ok";" User time (seconds): 0.60
Detaily Gist.
Ale ty stringy a printy můžu potvrdit.
Jop, ty optimalizace snad časem přibudou. Viz. např. box-unbox diskuse.
Díky za odpovědi, trochu jsem doufal, že ty zavináče a dolary opustili a vydali se jinou cestou, ale Larry a spol. na tyhle finty asi byli spíš pyšní než naopak. Absolvoval jsem jednou s týmem migraci nějakého kódu z Perlu do Pythonu a musím říci, že jsme dost nadávali na všechny ty tanečky kolem referencí apod.
Určitě v P6 něco dobrého bude, ale těmi příklady jsi mě docela vylekal. Tohle je tak 3x drsnější než Haskell a na dobré cestě k APL.