Hlavní navigace

Omezuje prastaré ASCII dnešní programátory?

Petr Hájek

Při přípravě nového programovacího jazyka musí jeho vývojář zvážit celou řadu různých vlastností. Překvapivě nejde ale jen o otázku syntaxe, ale také o to, jak všechny potřebné vlastnosti jazyka naroubovat na padesát let starý ASCII standard. Ten dnes omezuje většinu programátorů. Není čas na Unicode?

Jsme určitě toho názoru, že by se výborný programátor neměl omezovat ve své práci, návrhu a kódování opravdu naprosto ničím (maximálně snad pouze svým svědomím), proto je určitě na místě se nad dnešním článkem zamyslet a upřímně si uvědomit, zda ASCII vnímáte spíše jako omezení nebo příjemný mantinel a jistotu. Ale k věci.

Článek (a potažmo i stejnojmenný web), který rozvířil vody okolo otázky programování v ASCII či Unicode, se objevil v magazínu Communication of the ACM, kde je pod ním podepsán Poul-Henning Kamp. Ten se nad řečenou věcí zamyslel při psaní svého posledního programu, kdy si všímal nejenom tradiční syntaxe, ale i těžkostí spojených s jejím zápisem.

Autor obdivně mluví o Robertu Pikovi, který se nebojí trefně „špičkovat“ Javu (samozřejmě se tím myslí syntaxe, nikoliv platforma), nad čímž když se člověk zamyslí, pak zjistí, že to zní hodně jako věci, které James Gosling řekne o C++, resp. jaké řekl Bjarne Soustrup o starém dobrém C. Ke cti Pikových názorů je nutno připočíst ten fakt, že se jedná o výborného vizionáře, jehož schopnost předvídat programátorskou budoucnost je během let podezřele konzistentní.

Pike se naštval po čase jak na C++, tak i na Javu a udělal to, co každý správný hacker – vytvořil si vlastní jazyk, v jeho očích (a nejen těch) lepší než Java, C++ i C – jde o jazyk Go. Jak daleko se však Go dostalo? Čistě programátorsky vzato se nijak zásadně neliší od většiny jazyků, které většina z lidí zná a používá (C, C++, Java, Python, Tcl, …). Pořád je to o tom, něco napsat a správně vyjádřit problém. Programátoři jsou ale ohledně syntaxe jazyka vybíravější nežli přírodní samičky, takže se dle autora článku neustále hádají na téma „je můj jazyk lepší než tvůj?“ a zapomínají přitom na větší obrázek. Říká se tomu taky občas „pro stromy nevidět les“ či na Rootu spíše „pro bity nevidět bajt“.

Jednu kvalitní syntax prosím!

Jde o to, že autoři programovacích jazyků dnes často nijak přehnaně nezápasí s tím, jak kvalitní, obsažnou a specifickou syntax do jazyka zařadit, ale zcela s jinou věcí, kterou je nutné zdůrazni – s tím, jak vše co nejefektivněji skloubit s ASCII tabulkou!

Vše začalo v dobách jazyka ALGOL, který byl lingua franca počítačové vědy v počátcích. ALGOL byl standardizován v roce 1960 a specifikoval něco přes deset matematických symbolů (x,–, …) a něco dalších drobností. Tehdy byly počítače stavěné ručně, takže vlastnění klávesnice optimalizované přímo na míru konkrétnímu jazyku bylo to nejmenší, co tehdy programátory tížilo. Po pár letech se objevil i jazyk APL, jež obsahoval rozšířenou znakovou sadu (v níž převládaly matematické symboly) a dodnes je používán na několika exotických a obskurních pozicích (ekonomické modelování, pojištění, …).

Poté se objevilo ASCII, zhruba kolem roku 1963 a od té doby až dodnes se do něj programovací jazyky snaží poslušně kompletně vecpat. Wikipedie mimochodem tvrdí, že ASCII zařadila zpětné lomítko „\” jen proto, že jej ALGOL potřeboval k booleovským operacím „/\” a „\/”, tato informace je nicméně nepotvrzená.

První problémy s ASCII začaly zřejmě již s příchodem jazyka C, kdy byly potřeba dva operátory „and“ i „or“. Samozřejmě šlo napsat třeba „or“ a „bitor“, ale proč si neušetřit práci, že ano? Proto vzniklo „|“ a „||“ šetřící při psaní jedno až tři písmena. To dávalo na tehdejším zadávacím nástroji ASR-33 zisk 0,1 až 0,3 s k dobru. Autor článku tvrdí, že to sice zvýšilo rychlost zadávání, ovšem na druhou stránku i přidalo do C další třídu těžce odhalitelných bugů.

Niklaus Wirth se poté pokusil některé věci řešit v Pascalu jinak a přehledněji, čímž sice došlo ke zvýšení přehlednosti, ovšem z „begin“ a „end“ zde jde často nezkušenému hlava kolem.

A blížíme se k C++, jež je s největší pravděpodobností jazykem, kterému se podařilo „podojit“ ASCII tabulku nejvíce (templates, operator overloading, …). Pokud si u něj totiž neprohlédnete datové typy, pak netušíte, co vlastně to „+“ dělá (to je možná i důvod, proč se neobjevila dostatečná snaha po uspořádání soutěže v duchu International Obfuscated C++ Code Contest tak, jako se to děje u jazyka C). C++ ale také jednomu nedovolí vše – kupříkladu nejde definovat „:-:“ jako operátor, člověk musí zůstat u těch předdefinovaných. Pan Kamp je tedy toho názoru, že kdyby byl Bjarne Stroustrup ambicióznější, mohl s C++ porazit Perl a i dnes jej v podstatě zastoupit.

Znaky pochyběly jistě i Guido van Rossumovi u Pythonu, který pro rozsah platnosti namísto znaků „{“ a „}” používá pro tento účel pouze odsazení (toto rozhodnutí mimochodem zabránilo i v tom psát fortranovské programy v Pythonu).

Když se autor syntaxe rozhodne pro pravý opak, pak věci skončí jako u Tcl. Navzdory všem jeho skvělým vlastnostem trpí nadužíváním (či významově leckdy těžko pochopitelným) „[]“ a „{}“.

Dokonce ani s Go Roberta Pika nejsou věci ideální – zbytek světa se od ASCII pohnul směrem k Unicode, avšak Go nikoliv. Člověka to nutí k otázce: „Proč se snaží nacpat expresivní syntax moderního jazyka do 95 znaků ASCII, když programátorský svět zhruba již desítku let akceptuje Unicode?“

Naopak v Unicode nalezne programátor skutečně vše potřebné – od řecké abecedy přes všechny představitelné matematické symboly až po vysloveně podivné glyfy s popisem na řádek.

Nedá se nic dělat. Lidé okolo počítačů jsou i dnes stále velmi konzervativní a to navzdory době, v níž žijeme. Stále tak leckde mívá prioritu správné vypsání výstupu na terminálu ASR-33 a použití ASCII tabulky z počítačového středověku l.p. 1963. To jistě může občas omezovat váš rozlet a touhu psát skutečně jak a v čem chcete (nepředpokládáme, že by někomu v Unicode snad něco chybělo). A aby toho nebylo málo. Jistě ani tomu nejtvrdšímu hardcore hackerovi jistě neuniklo, že dnes již nelze sehnat delší dobu monochromatické monitory, takže pan Kamp přišel i s kacířskou myšlenkou učinit barvu součástí syntaxe! (Ještě než začnete rovnat dříví na hranici, tak ruku na srdce – OPRAVDU ani vy raději nepoužíváte barevné zvýrazňování syntaxe v konzoli, editoru či IDE?) A pokud ne, tak proč ne, když práci usnadňuje a zpřehledňuje?

Zdroj: ACM

Našli jste v článku chybu?

15. 11. 2010 11:39

Biktop (neregistrovaný)

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 j…

15. 11. 2010 3:11

Z roota se nam asi stava novy Blesk pro programatory. Sokujici titulek se snazi nalakat na nesmyslny clanek o nesmyslech :(
Ale aspon si pak clovek muze zlepsit naladu u diskuse :)


Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

DigiZone.cz: „Black Friday 2016“: závěrečné zhodnocení

„Black Friday 2016“: závěrečné zhodnocení

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Vitalia.cz: Co pomáhá dítěti při zácpě?

Co pomáhá dítěti při zácpě?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?