12. Vnitřní požadavky na jazyk

Ilustrační obrázek k článku: Vnitřní požadavky na jazyk
Tento článek popisuje návrh vlastního jazyka pro náš CSS 3D CAD – polyglotní skript běžící v PHP i JavaScriptu. Upřesníme si pravidla typování, práci s poli a serializaci.

V jednom z prvních článků jsme si řekli, že budeme používat jazyk, který běží nativně jak na PHP serveru, tak i v prohlížeči. V dalším jsme si tento jazyk zvolili i jako makrojazyk CADu. Teď nastal čas si ho specifikovat:

Specifikace

Podpora stínů a nastavitelná průhlednost, čisté CSS. Všimněte si, že průhlednost se promítá i do stínu

Silné typování

Další důležitá otázka: bude jazyk silně, nebo slabě typovaný? Tedy – pokud má funkce dostat parametr určitého typu, co se stane, když dostane jiný? Má se typ automaticky převést, nebo má být vyhozena chyba?

Vzhledem k tomu, že přetypování probíhá v PHP a JS často velmi odlišně, rozhodl jsem se pro silné typování. Slabé typování by sice někdy kód zjednodušilo, ale u programátorů zvyklých jen na jeden z těchto jazyků by mohlo vést k nečekaným a matoucím výsledkům.

Výjimky

A jak se má funkce zachovat, když typ nesouhlasí? Možností je víc – třeba vrátit false a zalogovat chybu. My ale půjdeme cestou přehlednosti a bezpečnosti: při nesouhlasu typu funkce vyhodí výjimku.

Pole odkazem

Další rozhodnutí se týká předávání polí – bude probíhat hodnotou (jako v PHP), nebo odkazem (jako v JS)? Z důvodu úspory paměti volím: předávání odkazem.

Tabulková pole

Kromě dvou základních typů polí (číselně indexovaná a asociativní) zavádím ještě třetí typ"tabulková pole". Ta budou mít číselné indexy, ale po vymazání prvku se další prvky neposunou. Místo smazaného prvku vznikne "díra", a původní indexy zůstanou zachovány. Tento přístup se chová podobně jako databázová tabulka s auto-incrementem.

Důvod? Chci, aby bylo možné s těmito poli pracovat jako s databázovými tabulkami. Tj. není nutné přepisovat odkazy na ID záznamů, pokud se některý z nich odstraní.

Předchozí   Následující