stejně jako vim nebo Emacs, postrádá prakticky použitelná makra (aby se odposlouchávalaNemůžu mluvit za Vim, ale proč emacsová odposlouchávací makra nejsou použitelná?
a ne programovala v nějakém obskurním jazyce, pamatujícím kuličková počítadlaA nafackovat nechcete? A Pythagorovu větu taky nahradit něčím novějším? Ta taky musí "pamatovat kuličková počítadla", takže je zralá na nahrazení něčím "modernějším", že? Kdybyste řekl "nechci makra povinně programovat", tak to pochopím, a úplně by to stačilo. Ale s tímhle nedoufejte, že vám budou lidi lízat boty. (Já bych klidně mohl říct, že zase nechci sázet v programu, co pamatuje děrné štítky. Osobně mi TeX jako jazyk přijde mnohem obskurnější, asi jako XSLT, to mi přijde asi tak stejně "použitelné". Ale necítím potřebu to někomu vymlouvat.)
Rejpale, doufám, že chápete rozdíl mezi objektivně platící (a platila by, i kdyby nebyli na Zemi žádní lidé) Pythagorovou větou a programovacím jazykem z doby, kdy počítače byly pomalé a primitivní, takže horu práce za něj musel udělat programátor při praní programu. LISPoidní programy jsou dnes dobré do inteligentních toustovačů s programovatelným mikroprocesorem, jinak je to historie. Nemám rozhodně nikomu za zlé, že tím ještě programuje na strojích, kde existují řádově modernější a výkonnější programovací jazyky, ale osobuji si právo mít za zlé to, že mi použití těchto jazyků někdo vnucuje. Kdyby byla komunita kolem Emacsu co k čemu, tak už tam vedle LISPu dávno dali python, perl, nebo nějaký jiný moderní jazyk (i GIMP už koketuje s pythonem pro skriptování).
Děkuji. Tímto jste mi dokázal, že vůbec nevíte, která bije. V situaci, kdy programátoři znovu tzv. "objevují" vlastnosti Lispu (totiž překvapeně zjišťují, co existovalo již před třiceti lety), prohlásit Lisp za nemoderní jazyk, jasně svědčí o tom, jak moc je třeba brát Vás vážně, a sice minimálně, pokud vůbec. Moderní jazyky dneška jsou například Haskell a Lisp. Haskell je zcela aktuální. Common Lisp odpovídá stavu výzkumu z přelomu 80. a 90. let (viz třeba CLOS), díky rozšiřitelnosti měl ovšem Lisp vždy navrch co do schopnosti implementovat nové koncepty, třeba AOP lze v Lispu implementovat bez potřeby přepisovat kompilátor, což není třeba případ AspectJ. :-) Bohužel pro Haskell momentálně neexistuje komerčně podporovaná implementace, kterou by firmy braly na vědomí, a interaktivita GHC trošku kulhá. Enterprise-grade implementace Lispu jsou dvě a jsou velmi kvalitní.
Bohužel díky nešťastným okolnostem je aktulizace ANSI normy téměř mimo diskusi a tak nový výzkum táhne Scheme - viz třeba práci Olega Kiselyova. Ovšem jeho díla v tzv. "moderním" Pythonu a Perlu naimplementujete značně pracně, protože ty jazyky prostě nevyhovují. Java, Python, C#, Perl a spol. jsou zamrzlé na začátu osmdesátých let, nenabízejí víc, než trošku okořeněný SmallTalk-80, v případě Perlu trošku zhybridizovaný s jakýmsi bizarním speciálním jazykem na zpracování textů. Nelze říci, že by Perl nebyl praktický (ostatně to říká první písmeno jeho názvu) nebo nedejbože že by nebyl použitelný, ale to nemá nic do činění s moderností, ať už "modernost" znamená cokoliv. Však taky Perl nikomu neberu, má své kouzlo i pro mě.
Pokud jde o to, že Emacs je psán v Lispu, pak lze k tomu říci pouze to, že to je jedině dobře. Můžete mít představy, jaké chcete, ale Lisp je velmi produktivní jazyk, čehož si všimli i programátoři, takže po určitém období útlumu kolem poloviny devadesátých let zájem o něj v současnosti neustále vzrůstá, a píší se v něm nové velké systémy, které by v jiných jazycích bylo mnohem pracnější napsat (vyhledávače leteckých spojů, velké transakční systémy - Polaris pro Air Canada, statisíce řádků kompaktního Lispu leckdy nahradí miliony řádků C++). Netuším, jestli "výkonem" míníte výkon kompilovaného kódu nebo výkon programátora, ale kompilátory Common Lispu generují kód téměř na úrovni jazyka C, zatímco produktivita programátora v něm je srovnatelená s Pythonem. Nevím, co víc byste chtěl. Jste asi pořádně rozmazlený.
Mimochodem, Pythagorovou větou Lispu je lambda kalkul, nevím, co objektivnějšího může člověk chtít. Jsem zvědav, co mi jako Pythagorovu větu nabídnete v případě Perlu. :o) Snad ne Kleenovu hvězdu? ;-)
TeXovský jazyk (praktické zkušenosti s programováním mám jen z jeho varianty pro Metapost) je +- standardní procedurální jazyk se syntaxí sice velmi svébytnou (kus Pascalu, kus Perlu a mnoho dalších, asi jako takový správný vesnický pes "podvraťák"), ale kupodivu je to docela logické a dá se v tom intuitivně orientovat. Další věcí je, že v (La)TeXu jako takovém (= zpracování textu) většinou programovat nemusíte a jednoduchými makry v podstatě jen nahrazujete to, co by se dalo otrocky zvládnout copy - paste stylem.Sice nejsem TeXař, ale jeví se mi značně podezřelé dávat dohromady Metapost a makrojazyk TeXu. Já měl za to, že TeX je turingovsky úplný kvůli konstrukci if-then-else a faktu, že jeho makroexpanze má charakter tail callu. Nějakého Pascalu jsem si \mezi{těmi}[legračními]\konstrukcemi\nevšiml, a makrojazyk TeXu snad není Metapost.
A co to ma spolecneho s Lispem/Scheme, o kterem se bavil Rejpal?To vám bude muset zodpovědět Rejpal, mé znalosti obou jazyků jsou velmi povrchní. To "a" jsem úplně přehlédl, četl jsem "Reverzní polská notace". Když člověk má něco zažitého, tak to tam taky vidí... Možná šlo jen o překlep původního autora, ne o vyslovené zmatení pojmů.
(apply + data)
nebo (apply * data)
pro součet nebo součin seznamu čísel (v případě Common Lispu (apply #'+ data)
nebo (apply #'+ data)
). Součet nula čísel je přitom definován jako nula a součin nula čísel jako jedna, takže lze výsledky pohodlně kombinovat a nejsou zapotřebí funkce jako sum.
Reverzní polská anotace: Nedokážu si představit, jak v tom udělat nějaký vzoreček, složitější než naprosté triviality, které bývají v nadšených článcích (třeba výpočet Gaussovy křivky). Přinejmenším by to znamenalo se léta učit úplně odlišnou matematiku. Většinou je v tom dost složité zpracovávat texty nebo binární data. Je to prostě hračka pro exkluzívní skupinu, která má na hračky čas.
Určitě máte na mysli reverzní polskou notaci. :-) Ta ale nemá nic společného s Lispem, a vůbec nechápu, proč by se kvůli tomu měl člověk učit jinou matematiku. Asi si pletete algebru s matematikou, ale to dělá víc lidí, takže se to dá chápat. Nicméně významné procento inženýrů používá RPN kalkulátory (aspoň v místech, ve kterých se daly historicky normálně sehnat, jako je třeba USA) a nemají s tím sebemenší problémy. Když jsem měl RPN kalkulátor, přišel mi zcela bezproblémový na používání, ba dokonce ještě přirozenější (počítá to tak, jak bych počítal já). Ale možná máte pravdu v tom, že pro inženýra je takový kalkulátor i hezká hračka, stejně jako třeba počítač nebo multimetr.
Věta "Většinou je v tom dost složité zpracovávat texty nebo binární data" je trošku mimo mísu, nemyslíte? Násobení a dělení při zpracování textů přeci nepoužíváte a funkce jako read(jaky_soubor, kolik_bajtu) nebo subst(retezec, regularni_vyraz, nahrada) a podobně určitě nejsou infixové. Nanejvýš v jazycích s message passingem můžete dostat název za objekt, kterému zasíláte zprávu (s tím, že další argumenty jsou, na rozdíl od Lispu a Dylanu, diskriminovány a pak se vymýšlejí "návrhové vzory" typu návštěvník, protože jazyk nemá dostatečné vyjadřovací schopnosti).
"Výkonem" jsem myslel paměť a rychlost procesoru, kdy není nutno složitými hacky bojovat o každý bit paměti a každý cyklus. Tyhle jazyky mají prostě význam na nevýkonných počítačích s malou pamětí ("inteligentní toustovač"), kam se nic rozumného implementovat nedá a úkol je současně moc složitý na assembler nebo strojový kód.
Tak v téhle kategorii AFAIK vede právě Common Lisp. :-) Rozhodně je na tom líp, než třeba Python nebo Java. Osobně se přiznám, že k němu mám ambivalentní postoj, protože ve své dově bohužel vznikl jen jako prostředek ke sjednocení divergujících dialektů jazyka. A sám bych byl rád za něco lepšího, ale ono moc na výběr není. CL ale má sílu v tom, že tu prostě je, jako jazyk s dvěma silnými komerčními implementacemi (byť proprietárními, ale jedna z nich má takový user support, že by si o něm leckterá firma mohla nechat zdát :-)) a několika svobodnými, z nichž aspoň dvě rozhodně nelze označit za pomalé. Na rozdíl od C++ (asi hlavní konkurent) nabízí ovšem žádoucí interaktivitu à la Python. Vy se můžete domnívat, že na velkých strojích nemají význam, ale jsou firmy, co na Lisp na serverech vsadily krk. ;-)
Nicméně tohle je mimo zase z mojí strany. Původní vaše rýpnutí, které mě, jak vidno, dost popudilo, se totiž týkalo toho, že v Emacsu se údajně "makra programují v nějakém obskurním jazyce, pamatujícím kuličková počítadla". To rozhodně není pravda, Elisp byl navržen v první polovině 80. let pouze kvůli napsání textového editoru a k jeho následnému rozšiřování. Tedy má funkce a prostředky přímo k psaní textových editorů. :-) Klidně by v něm mohl být napsaný třeba Vi, nejspíš o dost snáze, než v Cčku. Je to jiný jazyk než LISP 1.5 z roku 1962 "pamatující kuličková počítadla", a jiný jazyk než Common Lisp (tentokrát už jen s prvním písmenem velkým, bacha na to), jehož implementace čistě za tímhle účelem by nebyla tak jednoduchá a navíc v té době teprve vznikal. Pokud se Vám zdá divný zápis funkcí (f x y) (což je asi jediná věc, kterou má Elisp společného s "jazykem pamatujícím kuličková počítadla", společně s minimálním funkcionálním jádrem) tak s tím musíte jít za matematiky, ti to totiž píší přesně takhle (nanejvýš vynechávají závorky, pokud není třeba zapisovat prioritu, stačí se podívat třeba na http://en.wikipedia.org/wiki/Lambda_calculus). Koneckonců to jeden z nich vymyslel.
Pan Knuth napsal jazyk web pro TeX a Metafont, Metapost je syntakticky téměř shodný s Metafontem, obsahuje pouze rozšíření pro barvy a vkládání písmen (fontů) do obrázků a má menší omezení velikosti výsledného obrázku, Metafont má zase navíc ve spouštěcích příkazech generování bitmapy o konkrétním rozlišení a velikosti, zatímco Metapost má jako výsledek postskriptový formát (vektor).
Já jsem měl na mysli samotný TeX. Nikomu neberu Metapost, ale většina lidí, co používají TeX, píše v makrojazyku TeXu - no, dobře, většina z nich asi používá hotová makra v LaTeXu. ;-) Ale ti, co používají plain, v něčem píší svá makra, a ten jazyk není ani web, ani metapost. Osobně mi to přišlo jako vylepšený Troff, má to zhruba podobný model. Problém je, že když se v tom člověk pokusí dělat složité věci, začne to být zajímavé. V TeXu člověk nemá jinou možnost, na rozdíl třeba od Troffu, kde se dají makra expandovat filtrem psaným v jakémkoli jazyku. Je to Unix, používá to pajpu. ;-)
Osobně svůj "ideální nástroj" co do výstupu a sazby stále hledám. V jednu chvíli jsem uvažoval o TeXu, ale víc než vstupní jazyk mě odradily jiné zlotřilosti. Syntaxe TeXu jako vstupního jazyka pro text je téměř dokonalá, jako prostředek k zápisu maker se mi líbí již mnohem méně. Taky by bylo bezva, kdyby se člověk nemusel potýkat s věcmi, jako je kódování, písma a podobně. Třeba jedna firma, ve které jsem pracoval, přešla z TeXu na XSL:FO kvůli problémům TeXu s exotickými jazyky. Já sice uznávám CM jako nádherné písmo na spoustu (především technických) aplikací, ale bylo by pěkné, kdyby se třeba OpenType písma dala v TeXu používat tak snadno, jako v dnes již stařičkém Troffu (viz ukázka: http://heirloom.sourceforge.net/doctools/troffdemo.pdf). Možná to ještě zkusím, přiznávám, že se mi moc líbí ConTeXt, ale zatím váhám.