Část o jazyku Inform mi přišla poněkud povrchní, i s přihlédnutím k příštímu dílu. Říct o Inform, že kompilace pro Z-Machine je zajímavost, je jako říct o Céčku, že zajímavostí je překlad do spustitelného kódu :). Inform je přeci jazyk, pro který byla kompatibilita se Z-Machine hlavní cíl.
Jinak Inform je v současnosti Inform6 a Inform7 - pokud vím, používají se oba. A nestálo by za to, ukázat spíš kód, než generické screenshoty z Gargoyle, které daný jazyk nijak nepředvádí? Aspoň nějakou složitější konstrukci, než "out"? To ostatně platilo pro všechny jazyky.
Seriálu ale každopádně fandím. Díky!
Mě to třeba s tou Z-mašinou překvapilo, protože je docela zvláštní, že se pořád ještě používá na něco dalšího, než jen na přehrávání Zorků :-) Trošku jsem se na specifikaci Z-mašiny díval a kromě grafu objektů tam vlastně nění nic tak speciálního, co by textovkářům pomohlo! Dokonce ani parser, takže - doufám že to správně chápu - pokud budu mít 100 textovek ve formátu dejme tomu .z6, tak budu mít na disku zbytečně 100x ten samý parser, 100x tu samou základní logiku ovládání atd.?
Pokud vím, tak Inform kompiluje do Z-machine i do Glulx. Do Z-machine ale dokáže zkompilovat jen menší hry, protože formát má svá omezení. V podstatě zvádne jen určité počty objektů atp. Podpora staršího formátu je daná hlavně historicky (Glulx vzniklo až z potřeby provozovat složitější hry) a také hraje roli kompatibilita (Z-machine je tu od počátku a tak je přeci jen větší nabídka interpretrů vč. historických platforem).
A ano, Z-machine i Glulx jsou poměrně nízkoúrovňové virtuální mašiny, vůbec se to neblíží vysokoúrovňovému jazyku, je to spíš takový "assembler". Nicméně oproti strojovému kódu určenému pro HW mikroprocesor se bytekód určený k vykonání SW virtuální mašinou přeci jen liší a občas má sklony k instrukcím vyšší úrovně abstrakce. U té Z-machine je např. vidět operační kód "tokenise", který provede rozložení příkazu zadaného hráčem na jednotlivé tokeny a zadaná slova porovná se slovníkem hry a připraví tabulku shod.
Zbytek parseru, tedy sémantická analýza zadaného příkazu, se už neprovádí v interpretru, ale v programu spuštěném na dané virtuální mašině. Takže ano, můžete mít stokrát to samé, ale v praxi to tak nebude zcela. Každá z těch 100 her může mít trochu jiný parser, třeba jen lehce upravený a doladěný podle dané hry, ale třeba i úplně jiný, pokud je hra vytvořena v jiném nástroji, který také kompiluje do .z6. To samé platí pro ten zbytek, tedy model světa. Opět záleží na nástrojích, ve kterých hry vznikají a i v rámci řekněme Informu pak záleží, jaká rozšíření si autor do hry vloží, takže se může hru od hry lišit.
U TADSu, o kterém přeci jen vím podstatně více, je to s virtuální mašinou podobné, tedy interpret poskytuje tokenizaci a matchování vůči slovníku. Celý zbytek parseru je naprogramovaný přímo v jazyku TADS v knihovně a přeložený do bytekódu, takže se dá prakticky libovolně přizpůsobit potřebám hry.
VM jde ale o podstatný kus dál, než Z-machine, poskytuje TADSovému programu hromadu zabudovaných (= naprogramovaných v C++ v rámci interpretru) funkcí a tříd (intrinsics), které kromě zprostředkování běžných věcí, jako vstup a výstup na obrazovku a do souborů nabízí různé datové struktury a kolekce (list, pole, bigint,...), regulární výrazy a i třeba zmíněnou infrastrukturu pro síťovou komunikaci. Co se týče instrukční sady VM, tak kromě těch instrukcí, které připomínají assembler, jsou zde i takové zajímavosti, jako instrukce, která provede volání metody na polymorfním objektu nebo třeba instrukci pro vyvolání výjimky.