Ehm...upřímně, já nevím, kdo z lisperů může pohrdat novinkami. Řekl bych, že asi nikdo: Oni je totiž prakticky všechny vymysleli, minimálně tedy ty nejpodstatnější.
Mimochodem, spousta lidí dělá weby v lispu. Vzhledem k popularitě obou jazyků na absolutní čísla samozřejmě vede Python, ale procento lisperů dělající weby v lispu vůči celkovému počtu lisperů se asi nebude moc lišit od procenta všech pythonistů dělajících weby v pythonu vůči všem pythonistům.
Teoretická elegance není podstatná. Ta je možná důležitá pro vývoj kompilátoru, ale z hlediska programátora je spíš na škodu, protože existuje určitá množina běžných operací, které chceme obvykle v programu provádět, a ta se zrovna nekryje s nějakou teorií. Myslím, že se tomu obecně říká "vzory" (patterns). Takže pokud máte minimalistický jazyk (jako Lisp nebo Smalltalk), tak z principu (minimalismu) nepokrývá mnoho těchto vzorů, a:
1. Beztak se je programátor musí naučit, akorát bude používat podivnou syntaxi, která je dána minimalismem jazyka.
2. Nejsou v tom jazyce přímo dány, a tedy je pravděpodobnější, že je každý použije v trochu jiné podobě, a tím se sníží srozumitelnost cizího kódu.
...a právě proto je neodmyslitelnou součástí Lispu eliminace tzv. vzorů prostřednictvím syntaktických transformací všeho druhu (proto všechny ty makrosystémy). :-) Je to jednoduché, sám říkáte, že je ta elegance důležitá pro autora kompilátoru - hlavním motivem Lispu je právě zapojit (aspoň občas, nikdo neříká, že pořád!) programátora jako spoluautora jazyka i kompilátoru. Je zajímavé, jak to koresponduje se svobodným softwarem: Tak, jako je uživatel postaven prakticky na roveň autorovi co do práv, i v Lispu je aplikační programátor postaven prakticky na roveň autorovi kompilátoru, co do možností.
Tedy tvrdím, že v 99% věcí napíšete v praxi čitelněji a snáz v Pythonu právě proto, že se nesnaží být naprosto elegantní, ale jenom tak nějak prakticky elegantní.
Je to podobné jako v matematice - samozřejmě by matematici mohli pro komunikaci používat jazyk logiky prvního řádu, ale bylo by to velmi těžkopádné, právě z důvodu určitého minimalismu. Proto v praxi používají aritmetické symboly a integrály, byť jde o velmi speciální záležitosti (z hlediska matematické logiky).
Souhlasím. A proto se neprogramuje pomocí bitových posuvů a podmíněných skoků, ani pomocí beztypových lambd. Myslím, že Python i Lisp jsou na tom co do praktické expresivity vyrovnaně. To, co píšete, platí spíš pro Scheme, ale jak tím vysvětlíte existenci velice praktických a značně neteoretických (== „jsou předmětem všelijakých flejmů mezi samotnými lispery“... ;-)) maker LOOP a ITERATE? (Případně naprosto geniální věc jménem SERIES, ale to už pro některé může smrdět funkcionální magií... ;-))
Trošku si rýpnu - vždyť Python Lisp compiler existuje od roku 1985... ;-) Mám pocit, že jsem pár takových návrhů (kompilátor jazyka Python do/v Lispu) viděl, ale vzhledem k tvrzení předchozí věty se dost špatně hledají Googlem.PS. Pokud jsou kompilátory Lispu rychlejší než kompilátory Pythonu, proč někdo nenapíšete překladač Pythonu do Lispu, hm?
Existuje velice malá množina slov / obratů, které se používají skoro pořád a ten obrovský zbytek jenom občas. Python se snaží udělat používání této malé množiny velice jednoduché trochu na úkor použití toho zbytku. Já sám jsem se snažil LISP pochopit a používat (konkrétně Common LISP), ale docela tvrdě jsem narazil. Udělat v něm cokoliv je totiž neskutečně komplikované, hlavně kvůli té minimalistické syntaxi a sémantice. Naproti tomu Python je až brutálně jednoduchý (seznamy. slovníky, intensionální seznamy atd). LISP můžu obdivovat, ale programovat bych v něm nechtěl.Máte samozřejmě pravdu. Ale všechno je asi dost subjektivní otázka vkusu a hlavně způsobu myšlení – přesně z toho důvodu má Perl všechna ta zájmena ($_, $1, $2 a podobně...) Viz třeba stránka http://www.wall.org/~larry/natural.html. (Larry Wall je lingvista a na návrh Perlu to asi mělo vůbec největší vliv.)
Přijde mi, že každý jazyk má nějakou tu svou množinu "sweet spotů", leckdo třeba upozorňuje, že a=b+c je jednodušší než (setf a (+ b c)) a nepochybně má pravdu, ale relativní frekvence výskytu takových věcí ve skutečném kódu asi nebude obdobná, už jen proto, jak zřídkavou operací je v kanonickém Lispu nebo Scheme přiřazení (viz SICP, třeba... ;-)). Zarytí odpůrci Lispu přitom taktně mlčí o 0+–aritě operátoru #'+ ( (+), (+ 1), (+ 1 1), (+ 1 1 1 ... 1)), která má své uplatnění, a o tom, že díky tomu umí věci jako (apply #'+ sekvence-dat-libovolne-delky-klidne-treba-i-prazdna).
Ještě lepší jsou věci jako (reduce #'+ data), kterým stačí i specializovaná binární verze operátoru, kterou kompilátor může snadno inlinovat. Z hlavy mě nenapadá pythonovská verze, která by byla kratší a nebylo to přitom volání pomocné funkce. (BTW, komu chybí v Lispu pythonismy, může si je tam dopsat, infix už existuje snad od nepaměti. :-))
Ergo, každý jazyk se snaží nějak komprimovat kód, ale většina zavržení z řad potenciálních uživatelů IMHO pochází buď z nepochopení správného stylu, nebo ve zjištění, že „mi to takhle prostě nesedne“. To samozřejmě není zločin. :-) No a pak jsou tu ty věci jako srozumitelnost. Pokud někdo přichází z Cčka, pak Python pro něj s největší pravděpodobností právě Python bude tím pravým Lispem. ;-) Což myslím jen a jen pozitivně. Já se tak nějak snažím pokud možno vrtat ve všem, a to i pokud mi jazyk přijde ne úplně pochopitelný, páč je mi jasné, že opravdu špatnou věc, by podstatná masa lidí nepoužívala (z určitých úhlů pohledu mají výdohy dokonce i Cobol a Java... ;-)), ale z nějakého důvodu mě to k těm závorkam pořád vrací. A nic s tím nenadělám, jsem ztracený případ:-)