Hlavní navigace

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

15. 11. 2010
Doba čtení: 5 minut

Sdílet

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.

CS24_early

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

Byl pro vás článek přínosný?

Autor článku

Petr Hájek vystudoval obor "Aplikace výpočetní techniky v ekonomice", živí se jako novinář a má rád Gentoo, Javu a Free Pascal.