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

Petr Hájek 15. 11. 2010

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.

widgety

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?
Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Vitalia.cz: V Kauflandu už začaly Vánoce

V Kauflandu už začaly Vánoce

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují

Root.cz: Hořící telefon Samsung Note 7 zapálil auto

Hořící telefon Samsung Note 7 zapálil auto

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

Podnikatel.cz: ČSSZ posílá přehled o důchodovém kontě

ČSSZ posílá přehled o důchodovém kontě

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Vitalia.cz: Fyzioterapeutka: Chůze naboso? Rozhodně ano!

Fyzioterapeutka: Chůze naboso? Rozhodně ano!

Vitalia.cz: 5 chyb, které děláme při skladování potravin

5 chyb, které děláme při skladování potravin

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

DigiZone.cz: Funbox 4K v DVB-T2 má ostrý provoz

Funbox 4K v DVB-T2 má ostrý provoz

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

DigiZone.cz: Ginx TV: pořad o počítačových hráčích

Ginx TV: pořad o počítačových hráčích