Web byl hack už od samého počátku

Na Lupě včera vyšla Martinova glosa Máte tam chybu, Time... Martin se v ní zabývá otázkou, kde se vlastně vzal laxní přístup dnešních prohlížečů k HTML. Ty překousnou mnohé prohřešky proti správné syntaxi, poradí si s překříženými tagy, apod. Který prohlížeč s tím ale začal? Po menším průzkumu vyšlo najevo, že už ten první – WorldWideWeb od "otce webu" Tima Bernerse-Lee.

Na glose mám jistý malý podíl. Martin si o mě totiž z nějakého důvodu myslí, že rozumím problémům parsování, a tak jsem spolu s ním jeden večer trávil koukáním do zdrojového kódu WorldWideWebu a v hlavě simuloval stavový automat, kterým tento prohlížeč louskal HTML. Mohl jsem mu tak potvrdit, že WorldWideWeb byl opravdu k syntaxi HTML tolerantní a problém, o kterém následně napsal, vznikl hned na počátku webu.

Při studování zdrojového kódu prvního parseru HTML mě mimochodem zaujalo, jak špatně byl napsaný. Jeho stavový automat obsahoval kromě obecných stavů také jeden nebo i více stavů pro každý HTML element. Každý, kdo má o psaní parserů trochu představu, ví, že to není z mnoha důvodů správný přístup 1. Mnohem rozumnější je parsování napsat obecně, s omezenou množinou stavů společných pro všechny elementy. Při parsingu je pak třeba někam si průběžně ukládat název právě čteného elementu a mapu atributů a teprve po koncovém ">" se podívat, co jsme to vlastně našli a podle toho provést příslušnou sémantickou akci. Na parseru by se našly i další menší neduhy.

Parser v prvním prohlížeči byl zkrátka hack, napsaný nepříliš čistě a udržovatelně. A troufnu si tvrdit, že jeho tolerance k chybám měla původ hlavně v lenosti je nějak ošetřovat. (Další možnost je, že to byl záměr v duchu Postelova zákona – "be conservative in what you do, be liberal in what you accept from others". A nedá se vyloučit ani to, že Tim Berners-Lee se chybnými dokumenty příliš nezabýval, protože předpokládal, že kód bude generován editory a nikoliv ručně, a chybné dokumenty se tedy nebudou na webu prakticky vyskytovat.)

Přijde mi, že přístup autora prvního webového prohlížeče k parsování HTML předznamenává celý další vývoj webu. Ten byl hacků, špatného kódu, tolerance chyb a jiných neduhů plný. A my se dnes můžeme jen dohadovat nad tím, zda to v konečném součtu bylo dobře nebo špatně. Není totiž úplně vyloučeno, že kdyby byl web jiný, vůbec by tu nebyl 2.


Poznámky

  1. Hlavním důvodem je především jasné oddělení vrstev lexikální, syntaktické a sémantické analýzy a s tím spojená lepší udržovatelnost kódu. Jednoduše řečeno, když chci přidat nový element, nemusím sahat na stavový automat, ale jen přidám funkci s příslušnou akcí a ukazatel na ni do nějaké rozhodovací tabulky.
  2. Diskuze o tom viz Martinův blog na Rootu.