Hlavní navigace

Nástroje a utility

Jak vyčistit disk s Linuxem?

Názory k článku
Perličky: datové struktury a I/O reference

alblaho
alblaho (neregistrovaný)
7. 3. 2008 15:25 Nový

Skripty nebo appky?

celé vlákno
Mám takový dotaz. Perl je jistě vhodný na všelijaké skripty a utilitky, kde bash nestačí. Je možné Perl použít i na větší věci, tj aplikace, bez toho aby se člověk zbláznil? Jaká je největší aplikace napsaná v Perlu?

Python si na větší věci představit dovedu. Největší věci v PHP asi taky nebudou zrovna malé.
uživatel si přál zůstat v anonymitě
7. 3. 2008 15:35 Nový

Re: Skripty nebo appky?

celé vlákno
je www.amazon.com neco maleho?
tukan
tukan (neregistrovaný)
7. 3. 2008 15:47 Nový

Re: Skripty nebo appky?

celé vlákno
Obrovská a technicky nejvymakanější je asi Wikipedie. Ta je celá kompletně v Perlu, na několika úrovních (aplikační server, cachování, etc). Celá infrastruktura je veřejně zdokumentovaná - můžeš si to ověřit.

U 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...
Michal Svoboda
7. 3. 2008 16:11 Nový

Re: Skripty nebo appky?

celé vlákno
Ani PHP bych ze stejneho duvodu nezatracoval.

Nicmene 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.
alblaho
alblaho (neregistrovaný)
7. 3. 2008 16:46 Nový

Re: Skripty nebo appky?

celé vlákno
Wikipedie? Já myslel, že je to Mediawiki (tedy PHP) a Mysql...
tukan
tukan (neregistrovaný)
8. 3. 2008 3:00 Nový

Re: Skripty nebo appky?

celé vlákno
Máš recht, asi to je stará informace. Kdysi jsem se Wikipedií inspiroval, takže jsem ji studoval do hloubky a bylo to celé na Perlu.

Kaž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é.
Inkvizitor

Re: Skripty nebo appky?

celé vlákno
Kterých tedy? Jediné dvě sajty (o kterých vím), které stojí za řeč a běží na Perlu, jsou Slashdot a Kuro5hin. Nerýpu, ptám se.
tukan
tukan (neregistrovaný)
8. 3. 2008 18:12 Nový

Re: Skripty nebo appky?

celé vlákno
imdb, wired, youtube, amazon, ebay, yahoo auctions, techweb, adobe.com - ty co vím z hlavy; snad ti to stačí jako vzorek, nemůžu najít to srovnání technologií top sites, ale jako důkaz, že Perl není jen pro freaky a geeky to postačí. Vzhledem k obrovskému počtu existujících web technologií si na tom Perl rozhodně nestojí špatně. Tohle jsou jen stránky co člověk potkává běžně a já si pamatuju. Není to vyčerpávající seznam. Ani nejde o snahu dokázat, že Perl je da best, každý ví, že všechno má své místo a svá pro a proti. Je to důkaz toho, že _to_jde_. Že Perl se od verze 1.0 hodně změnil a je to dobrý jazyk pro poměrně vysoký vertikální řez možných typů aplikací.

Např. 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č.
Inkvizitor

Re: Skripty nebo appky?

celé vlákno
Tenhle výčet je dostatečně reprezentativní, díky.
agaba
agaba (neregistrovaný)
8. 3. 2008 20:44 Nový

Re: Skripty nebo appky?

celé vlákno
youtube v současné době využívá hlavně python: http://mail.python.org/pipermail/python-dev/2006-December/070323.html
nebo 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.
Pavel Stěhule aura:89
9. 3. 2008 12:12 Nový

Re: Skripty nebo appky?

celé vlákno
reality.cz
Inkvizitor

Re: Skripty nebo appky?

celé vlákno
Taky děkuju. O některých českých projektech vím, tak si ho přidám do sbírky.
alblaho
alblaho (neregistrovaný)
7. 3. 2008 16:49 Nový

Re: Skripty nebo appky?

celé vlákno
Nečitelnost perlu je dána tím, že místo operátorů v angličtině používá symboly. Kdo se symboly naučí, pak už to přečte.

Ale ž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.
Petr
Petr (neregistrovaný)
7. 3. 2008 19:30 Nový

Neni ten priklad s print_tree "unperlish"?

celé vlákno
Neni ten priklad s print_tree trochu "unperlish"?

Chci 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...
Michal Svoboda
7. 3. 2008 21:02 Nový

Re: Neni ten priklad s print_tree "unperlish"?

celé vlákno

Vlastne 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.

Petr
Petr (neregistrovaný)
10. 3. 2008 19:10 Nový

Re: Neni ten priklad s print_tree "unperlish"?

celé vlákno
To jsem se prave chtel dozvedet, jak to je :-)

Nejasne 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 :-)
Michal Svoboda
11. 3. 2008 7:17 Nový

Re: Neni ten priklad s print_tree "unperlish"?

celé vlákno

neni 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.

uživatel si přál zůstat v anonymitě
10. 3. 2008 20:14 Nový

přímé užití IO reference

celé vlákno

Zdraví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);
Michal Svoboda
11. 3. 2008 7:20 Nový

Re: přímé užití IO reference

celé vlákno

ten 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.

uživatel si přál zůstat v anonymitě
11. 3. 2008 9:52 Nový

Re: přímé užití IO reference

celé vlákno
Děkuji pěkně.
Zasílat nově přidané příspěvky e-mailem