ale 99% diskutujících nemá ani znalostní, ani inteligenční předpoklady k tomu, aby problémy tohoto typu řešili. To nejlepší, co můžete udělat, je nepokoušet se to řešit vůbec. Těch všemožných paskvilů za uplynulých 15 let vzniklo snad už dost. Za těch 60 let se okolo počítačů vymyslelo spousta vychytávek, některé se ujaly, jiné ne, některé možná čeká jejich renesance, některé současné hity do 10 let zmizí v zapomnění. Jestli si snad někdo z vás myslí, že dokáže přijít na něco nového, tak je to jen důkazem, jak málo toho ví a jak se málo orientuje. Jakmile by se o to začal zajímat více a do hloubky, zjistil by, že něco podobného vymyslel někdo jiný 20 let před tím, než se dotyčný vůbec narodil, a že to vymyslel mnohem sofistikovaněji. Ale řízením osudu se to neujalo.
Dojímá mne, jak se autoři Pythonu a jiní každou chvíli vytasí s nějakou super novinkou, jež je ovšem jen trapnou karikaturou něčeho, co tu bylo už před dávnými lety. Když čtu některé meditace některých přispěvatelů zde na téma zavedení hieroglyfů místo normální abecedy z důvodu úspory při psaní a jiné nesmysly... kdopak ví, jestli se zamysleli, proč se příliš neujal třeba jazyk APL, nebo mnohem obecněji - proč píšeme latinkou/azbukou/řeckou/arabskou abecedou a ne hieroglyfy... proč ve Smalltalku byl znak šipky vlevo raději nahražen dvojicí dvojtečka-rovná se...
A vůbec - dojemný je i podtitul článku - "při návrhu syntaxe nového jazyka"... Prosím vás, kolik běhá na této planetě lidí, kteří dokážou navrhnout nový jazyk? Tím myslím PŘÍNOSNÝ nový jazyk? Kdejaký nedovzdělaný čičmunda má pocit, že právě ten "jeho" jazyk světu ještě chyběl, tak nás o něj musí obohatit a spoustě dalším lidem tak pokud možno zkomplikovat práci, protože se vždycky najde nějaký trotl, který ten jazyk k něčemu opravdu použije a někdo jiný to po něm bude muset udržovat. Za uplynulých 15 let nevznikl ani jeden, ANI JEDEN jazyk, který by byl v něčem nějak přínosný, tj. jazyk, který by obsahoval nebo elegantněji řešil něco, co nebylo vyřešeno dostatečně elegantně v nějakém starším jazyku.
Myslím, že lidi by měli konečně přestat řešit kraviny a měli by se více věnovat tomu, s čím mají největší problémy - myšlení. Mám totiž neodbytný pocit, že současní programátoři jsou líní nejen psát, ale dokonce i myslet. A to je pro IT ta největší katastrofa!
Možná máš pravdu z hlediska teorie programování, ale z hlediska praxe může mít "nový" mikrojazyk výhodu v tom, že umožní lépe řešit nějaký konkrétní problém, kvůli kterému byl navržen. Pro některé účely je "plnotučný" jazyk prakticky nepoužitelný overkill, který je jen na škodu věci. Kdyby se každý autor vychytávky nechal zastavit tím, že možná za 60 let jeho vychytávka nebude potřebná, tak nemáme vychytávky žádné.
Nějaký příklad?
Ale to je nedorozumění. Oni ti současní autoři žádné nové vychytávky nevymýšlejí. Oni si to jen myslí - a s nimi tisíce dalších, kteří jsou přesvědčeni o tom, že k programování nepotřebují znát historii svého oboru, matematiku atp. A mají v podstatě pravdu - ovšem k tomu, aby mohli vymyslet něco nového nebo aby mohli posoudit smysluplnost nějakého přístupu, už tyto znalosti nezbytně potřebují. Taky jsem byl takový - když mi bylo 15. Ale čím více mi je, čím déle programuji a čím více typů problémů už jsem potkal, tím více si uvědomuji, že lidí, kteří jsou schopni přinést něco opravdu nového, je strašně málo. Že my - normální - pokud chceme vyniknout, měli bychom především studovat práce a myšlenky těch několika geniálních. Dám analogii:
Matematici vymyslí diferenciální a integrální počet, který můžete použít k výpočtu obsahů, objemů, ale také ke spoustě jiných věcí, jež s těmi obsahy a objemy na první pohled nijak nesouvisí - třeba k rozvoji funkcí do nekonečných řad, zjištění asymptotického chování atd... Vymyslí k tomu algebraické konstrukce, postupy, zápisy, terminologii, zavedou potřebné objekty a vysloví a dokážou věty, včetně předpokladů, za jakých lze to či ono provádět. Ale spoustě lidí se to zdá příliš komplikované, není jim to na první pohled hned jasné, museli by nad tím párkrát zapřemýšlet a to je pracné a zdlouhavé, tak to považují za nepohodlné a nepraktické. Místo toho čas od času někdo přijde s návodem, jak spočítat kus plochy pod parabolou, který pro hyperbolu není použitelný, že nějaká funkce má takový a takový mocninný rozvoj, aniž by ovšem řešil problém jeho konvergence a až někdo přijde na to, že při určitých hodnotách argumentu to nefunguje, tak se řekne - no jo, to je nějaké divné, ale hlavně že to funguje tam kde to potřebuju já... Všichni vždycky zaplesají nad tou "novou" "vychytávkou", která tolikrát chyběla, aniž by si uvědomovali, že kdyby bývali vynaložili trochu toho úsilí, tak by zjistili, že tohle všechno už za ně dávno vyřešili jiní a mnohem elegantněji. Jistě - po tesařovi nemůžeme chtít, aby si odvozoval z teorie pružnosti vzorce k výpočtu statiky střešních konstrukcí. Ale stejně tak si ten tesař nesmí na to dělat ty ambice, že na základě svých sporých znalostí fyziky a matematiky bude vymýšlet nějaké poučky o statice, posuzovat užitečnost tenzorového počtu apod. Na to nemá dost kvalifikace - může maximálně mektat do kvality dlátek, paliček apod. - a to ještě s tou výhradou, že by to měl být zkušený fachman a ne nějaké mejdlo, které nadává na nešikovnost a překonanost klasického hoblíku jen kvůli tomu, že je to nemehlo a nedokázal se naučit používat ho tak, jak se má.
Predstava ze existuje nejak vyrazne mnoho typu problemu z nichz kazdy vyzaduje svuj vlastni jazyk je myslim velkym omylem.
A co se praxe tyce, napsat si novy "mikrojazyk" jako sadu maker do lispu bude urcite radove snadnejsi nez psat novy jazyk. Samozrejme ze clovek co nikdy lisp nepouzival, nebo dokonce netusi co to lispova makra jsou (a pro ty co to netusi: jsou to programy co pisou jine programy. s makry v C to nema NIC spolecneho), to ihned odmitne, coz je chyba. Schopnost vytvaret specializovane "mikrojazyky" je totiz pro lisp typicka.
A pokud se ma jednat o neco supernenarocneho, je tady forth, ktery je primo idealni pro ruzne mikrokontrolery.
Nerikam, ze neni mozne vymyslet novy jazyk, ktery bude lepsi nez kterykoliv existujici, ale rikam ze to je TEMER nemozne. Zvlast proto ze 99% vsech "novych" jazyku jsou jen nescislnekrat opakovane variace na tema "C++, Java, C#" s rozdily, ktere pripadaji velke lidem co se chlubi tim ze umi "4 programovaci jazyky" (C, C++, Java, C#). Je to asi tak stejne jako kdyz se budu chlubit ze se plynne domluvim 4 jazyky a budou to: cestina, cestina s moravskym prizvukem, slovenstina a zahoracka slovenstina - ale je asi neco jineho kdyz nekdo umi cesky, anglicky, nemecky a cinsky, ze ano?
No aby se vymyslel jiný programovací jazyk, nesmělo by se vycházet z analytického jazyka jakým je angličtina, ale třeba z nějakého polysyntetického jazyka, jako je inuitština, což by umožnilo lépe propojit syntaxi se sémantikou a zavést operace nad programem, které by byly schopny program strojově modifikovat, program by mohl začít 'myslet' na základě vyhodnocování syntakticko-sémantických pravidel.
jen napůl :-) Eskymáci slova tvoří příponami a předponami tak, že sémanticky vyjadřují celé věty. Stejně jako například čeština minulý čas slovesa vytvoří příponou. Takže morfologický tvar slova určuje jeho i jeho sémantický obsah. V češtině třeba u slovesa čas a osobu, změnou přípony dosáhnete změny času i osoby. V inuitštině nejen čas, ale téměř všechny gramatické jevy. Jedno inuitské slovo je v překladu věta. A stačí jim na to cca 700 pravidel, výjimky skoro neexistují. Kdyby COBOL vymyslel nějaký eskymák, vypadal by úplně jinak :-)
A z toho nějak vyplývá
"...což by umožnilo lépe propojit syntaxi se sémantikou a zavést operace nad programem, které by byly schopny program strojově modifikovat, program by mohl začít 'myslet' na základě vyhodnocování syntakticko-sémantických pravidel.""
- nebo je tahle část příspěvku vtip? Zní to jako totální blábol.
No představte si, že v inuitštině popíšete nějaká data, které popisují nějakou situaci. Díky vhodné struktuře jazyka snadno poznáte co je kořen slova, a aniž byste znal jeho význam, na základě asi 700 gramatických pravidel bez výjimek a vztahů mezi nimi můžete automatizovaně odvozovat závislosti z textu.
Takže jestli to správně chápu, tak výhoda inuitštiny je snadné parsování a pravidelná gramatika, takže by se dala použít na automatické odvozování atd. místo nějakého formalizovaného jazyka vycházejícího např. z angličtiny. Dnešní programovací jazyky jsou na tom ale podobně - jsou naprosto odlišné od angličtiny, jenom si z ní vypůjčují pár slov (některé víc, jiné míň) - ale co se týká gramatiky, je to něco úplně jiného. Takže myslím, že jazyk od eskymáků by se lišil především tím, že by měl klíčová slova v jejich jazyce :)
Jazyk, kterým člověk mluví, může asi mít nějaký vliv na programovací jazyk co vymyslí, jeho filozofii - např. tipuju, že severoameričtí indiáni se svými polysyntetickými jazyky, které v podstatě nerozlišují podstatná jména od sloves (všechno je jakoby nějaký tvar slovesa, věc je určená tím, co dělá), by zvolili jako typový systém duck typing :)
Ano, to je možné. No dnešní procedurální programovací jazyky jsou po angličtině analytické. Taky nejpropracovanější je teorie bezkontextových gramatik vycházejících z modelu analytického jazyka, kde záleží na pořadí klíčových slov. I když téměř čistý polysyntetický programovací jazyk existuje - assembler. Počítač tedy 'myslí' na nejnižších úrovních polysynteticky. Což je vlastně zajímavé :-)
A ještě něco, struktura instrukce assembleru je odrazem struktury procesoru, takže nenese žádnou informaci o nějakém konkrétním algoritmu, ale struktura slova reálného polysyntetického jazyka je odrazem reality, takže jeho analýzou na základě gramatických jevů můžete z oněch slov získávat další informace o popisované realitě, analýzou syntaxe tak odvodíte další poznatky, které nejsou explicitně v zápisu vyjádřeny. Formalizací tohoto postupu byste se třeba dostal k sémantickému webu na základě částečného a strojového porozumění textu.
Myslím, že dost velký problém ve strojovém porozumění je, že stroj si sice text dokáže "přeložit", ale aby mu opravdu rozuměl, musel by umět přemýšlet v souvislostech podobně jako člověk - porovnávat si to se svými dosavadními vědomostmi a nějak si získané informace mezi ně zařadit. Zatím překladače umí obecný text (ne nějaký formální jazyk napodobující přirozený) docela dobře přeložit, ale nerozumí mu. To je zatím sci-fi kdekoliv, ne jenom na webu. Myslím, že automatické překladače na tohle dřív nebo později narazí - že na kvalitní překlad je potřeba vědět něco o tom, co překládám.
Ti co umeli cist byli po vetsinu lidske historie take mensinou. Cela historie vedy a techniky je plna slepych ulicek, tezkopadnych reseni i uplnych nesmyslu. Spousta z nich se dlouhou dobu drzela, ale drive nebo pozdeji se lepsi reseni prosadi.
Na konci 19.stoleti byli zastanci letadel tezsich nez vzduch vysmivanou mensinou a i uznavani vedci prohlasovali ze nic tezsiho nez vzduch letat nemuze.
Kdyz pak vetsina "lepicu kodu" vyznava nazor typu: "cemu nerozumim to me urazi", sice je to smutne, ale verim, ze v budoucnosti se lide budou jazykum jako je C++ smat stejne, jako se dnes smejeme "futuristickym" kresbam z konce 19.stoleti, ve kterych lide, psi, i domy letaji na balonech a vzducholodich...
A ted realisticky: kvalitni napad mam, a ani neni nutne menit mozky :)
Staci programatory prinutit naucit se nejaky slusny jazyk. Jiste se najdou jedinci, kteri to nezvladnou vubec (jako vsude), ale vetsina to zvladne, a mala mensina to zvladne skvele.
Navic je to myslim dobry test schopnosti programatora - behem zkusebni doby dostane za ukol naucit se common lisp a napsat v nem nejakou komponentu - kdo to nezvladne, muze zkusit stesti jinde :)
Lepici kodu se musi smirit s tim ze ne kazdy muze byt architekt a navrhovat uzasne prevratne mostni konstrukce - nekdo proste nema na vic nez davat na sebe cihly, pripadne jezdit s nakladakem - tak to je, bylo a bude.
Stezovat si, ze ne kazdy dokaze "myslet v lispu" (nebo jinem "lepsim" jazyku) a proto je lisp spatny je jako tvrdit ze vypocty tuhosti mostni konstrukce sou blbost, protoze je vetsina lidi na stavbe nechape..
Jako programatori jsme ted v praveku, kde se valena klenba povazuje za moc slozitou a vsichni si svorne pobrukuji ze to je "teoreticka vymyslenost", ktera je k nicemu, kdyz prece zemljanku dokaze postavit kazdej a uplne v pohode staci.. :)