Názory k článku
Perličky: datové struktury a I/O reference
Skripty nebo appky?
celé vláknoPython si na větší věci představit dovedu. Největší věci v PHP asi taky nebudou zrovna malé.
Re: Skripty nebo appky?
celé vláknoRe: Skripty nebo appky?
celé vláknoU jak velké aplikace se člověk zblázní záleží čistě na jeho schopnostech. Ne na jazyku. Když máte 500 KB kódu, je jedno jestli v C nebo Perlu, hůř se v tom orientuje. Všechno je o tom, kdo to jak napsal. V jakémkoli jazyce (i pajazycích typu Python, které se snaží nějakou úpravu vnucovat) jde psát modulárně, hierarchicky a přehledně. Stejně je ale možné psát tak, že 100 KB kódu už je neudržitelné a nečitelné. Zní to jako klišé, ale je to absolutní pravda.
Nečitelnost Perlu je vůbec největší mýtus v programátorském světě. To je jako říct, že Čeština nebo Angličtina je nečitelná. Jak absurdní! Záleží kdo jak tím jazykem mluví.
Něco jiného je třeba PHP, které je špatně čitelné a udržovatelné už z vlastní podstaty jazyka vepisovaného někam, jazyka zápolícího s kontinuitou a perzistencí, atp...
Re: Skripty nebo appky?
celé vláknoNicmene k puvodnimu dotazu. Perl je puvodne navrzen jako "glue language" to jest jako shell na steroidech spojujici vse dobre z veci typu sh, sed, awk, trochu z C, a par dalsich. Semantika a syntax jazyka o tom na mnoha mistech svedci. Z tohoto prameni take legenda o "necitelnosti" Perlu, a vtipy typu ze Perl je spustitelny sum. Napriklad je schopen pokladat neznama slova za retezce, ma jednopismenne magicke promenne, atd.
Perl je vsak jazyk velmi ohebny a postupnym vyvojem se z nej nenasilne (a to je potreba zopakovat, neni to nabalovani funkci, vse do sebe pekne zapada) stalo neco v cem jsou napsane prehledne a bezpecne i velke systemy. Jednim z casto pouzivanych je napriklad system RT, ktery pouziva kazdy druhy helpdesk velkych i malych firem.
Takze v Perlu mate oboji, muzete splacat par veci na hromadu a pouzit ho jako lepidlo, a nebo muzete pouzit prislusne programovaci techniky a nastroje a mit robustni velkou aplikaci. Myslim si, ze spousta dalsich modernich jazyku trpi touto dualitou.
Re: Skripty nebo appky?
celé vláknoRe: Skripty nebo appky?
celé vláknoKaždopádně Perl rozhodně je hnací motor velkého množství těch nejfrekventovanějších sajt. I když zrovna Wiki ne. Někde jsem viděl pěkné porovnání technologií asi 8 nejnavštěvovanějších stránek a Perl hnal víc než polovinu, což je slušné.
Re: Skripty nebo appky?
celé vláknoRe: Skripty nebo appky?
celé vláknoNapř. Perl vs. Java je souboj tak nějak bez uvažování přiřknutý Javě (neprávem), ale když se na to člověk opravdu podívá, tak Javy na Internetovém webu žádné extra úspěchy neslaví. Její místo ve firemních spatlaninách ji ale samozřejmě nikdo nebere - naopak, já osobně jí to fakt _přeju_. Myslím, že mutilaci v rukou všech těch ubožáků si zaslouží. :) Taky je dobrá na aplikace pro výkonné servery a okrajově pro desktop, o těchto oblastech ale není řeč.
Re: Skripty nebo appky?
celé vláknoRe: Skripty nebo appky?
celé vláknonebo http://highscalability.com/youtube-architecture
na posledně zmíněné stránce se můžete dočíst i o technologiích použitých v jiných projektech.
Re: Skripty nebo appky?
celé vláknoRe: Skripty nebo appky?
celé vláknoAle že v Perli lze kryptický kód napsat s podstatně menší námahou než třeba v Pythonu nebo Javě, to je také jistě pravda.
Neni ten priklad s print_tree "unperlish"?
celé vláknoChci rict: Pokud si muzu pro "print" vybrat mezi
print "some string";
a
print $out "some string";
tak bych ocekaval, ze funkce print_tree se bude chovat se stejnout semantikou, tj. ze volam bud
print_tree $cur_elem, $recursion_lvl, $enum_label;
nebo
print_tree $out $cur_elem, $recursion_lvl, $enum_label;
Clanek jen ukazuje, jak udelat
print_tree $out, $cur_elem, $recursion_lvl, $enum_label;
ale to je neco jineho a vypada to neperlovsky...
Re: Neni ten priklad s print_tree "unperlish"?
celé vláknoVlastne by se ta funkce print_tree mela volat takto:
print_tree($out, $cur_elem, $recursion_lvl, $enum_label);
(Nejsem moc velkym priznivcem volani fci bez zavorek.) Nicmene dalo by se to upravit tak, aby bylo mozno ji zavolat s nebo bez toho $out a sice ze bychom testovali zda prvni argument je reference na IO nebo ne. Mne to prislo pro tento priklad zbytecne.
Zbytecne to bude mozna i celkove, jelikoz pokud bych chtel tisknout na STDOUT, tak si tam tu referenci predam. Na druhou stranu kdybych chtel naznacit, ze nektere argumenty jsou volitelne, udelal bych funkci tak abychom ji mohli volat pomoci pojmenovanych parametru a pak bychom mohli vynechat i "inicializacni hodnoty", tj. print_tree(out => $neco) nebo print_tree().
Co se tyce vynechane carky po $out a zejmena moznost ze to tam muze a nemusi bejt (ala print), tak pokud mi neco neuniklo tak to nejak jednoduse zaridit nejde (ci snad vubec). Maximalne muzeme pomoci prototypovani dosahnout funkce ktera se chova podobne jako preddefinovane map nebo grep, cili ve stylu moje_f { neconeco } argumenty. Pokud se mylim, tak me prosim nekdo opravte.
Re: Neni ten priklad s print_tree "unperlish"?
celé vláknoNejasne si vzpominam, ze
print $out "nejaky string"
je v podstate syntakticky cukr pro
$out->print("nejaky string")
ale ruku do ohne bych za to nedal. A chtel jsem postouchnout, abych se to doopravdy dozvedel :-)
Re: Neni ten priklad s print_tree "unperlish"?
celé vláknoneni to uplne presne.
$out->print("ahoj") je syntakticky cukr pro IO::neco::print($out, "ahoj"), pricemz IO::neco je potomek tridy IO::Handle, napriklad IO::File. navic to $out musi byt vytvoreno pomoci toho modulu a ne klasickeho open. je to jakoby "objektovy" pristup k I/O.
zabudovanej print s tim nema nic spolecneho, navic ta absence carky za filehandle je tak trochu syntakticky hack.
přímé užití IO reference
celé vláknoZdravím,
narazil jsem na chování Perlu, kterému nerozumím. Použít IO referenci tak, jak je ukázáno v článku, se mi daří. Ukazuje to subrutina tisk2 níže.
Nevím ale, proč přímé použití reference (ukazuje zapoznámkovaná s. tisk1) jako prvku pole @_ působí syntaktickou chybu při překladu (v novějších verzích Perlu; ve starších překlad prošel, ale konstrukce nedělala to, co tisk2).
Uměl by to někdo vysvětlit?
#sub tisk1 {
# print $_[0] "ahoj\n"
#}
sub tisk2 {
my$fd=$_[0];
print $fd "ahoj\n"
}
open(my$f,'>','/tmp/file.pok');
tisk2($f);
Re: přímé užití IO reference
celé vláknoten I/O argument printu musi byt bud I/O objekt (napr. STDOUT) nebo prosta skalarni reference ($f). cokoliv slozitejsiho musi byt v bloku.
sub tisk1 {
print {$_[0]} "ahoj\n"
}
...by melo fungovat. je to podobny jako dereferencovani. bud jednoduchej skalar nebo blok.

