C'è una grande quantità di linguaggi per IF, ognuno con la propria virtual machine, e molti altri se ne stanno scrivendo. Ci sono anche un sacco di piattaforme differenti là fuori, e nuovi computer e sistemi operativi stanno vedendo la luce. Questo ha portato ad un problema che dovrebbe suonarvi familiare se avete letto le sezioni precedenti. Ogni volta che arriva un nuovo sistema per la programmazione di IF, le persone hanno la necessità di scrivere un interprete per ogni piattaforma su cui vogliono essere in grado di far girare i giochi del vostro sistema: Windows, DOS, Mac, Acorn, Amiga, BeOS, Unix, e moltissime altre. Ed ogni volta che una piattaforma su cui sia possibile giocare con l'IF arriva -- ad esempio delle persone che voglio giocare su un MUD, o su un telefono cellulare abilitato ad Internet -- le nuove piattaforme hanno bisogno di un interprete Z-code ed un interprete TADS ed un interprete Hugo ed un interprete Alan e così via.
Inoltre molto del lavoro che riguarda la scrittura di un interprete è fatica
sprecata.
Vedete, un interprete deve fare due cose più o meno indipendenti: il trattamento
dei dati -- interpretazione dei comandi (parsing), tenere traccia degli oggetti
nel gioco, e cose così -- e l'input/output (abbreviato in I/O per
semplicità), che ha a che fare con l'esattezza con cui le cose il programma dice di
stampare vengono visualizzate. E con qualche limitata eccezione (di cui ci occuperemo
tra breve), la parte di trattamento dati non si preoccupa di ciò che fa la parte
di I/O. Dice alla porzione di I/O l'equivalente in codice macchina di "Scrivi queste
tre frasi", ma alla parte di trattamento dati non interessa se queste frasi appaiono
in testo piano su una shell Unix o se appaiono con un bel font in una finestra grafica
con delle barre di scorrimento. La stessa cosa per la parte di I/O, che si preoccupa
solo di mostrare le cose che gli è stato detto di mostrare. Non si preoccupa di tutti
gli algoritmi che la parte di trattamento dati ha usato per arrivare alla decisione
di cosa stampare.
Si preoccupa solamente di fare la visualizzazione. Questo significa che mentre la
porzione di trattamento dati di tutti gli interpreti Z-machine è vicina ad essere
identica, la porzione di I/O differisce drasticamente: DOS Frotz, progettato per
essere usato in un ambiente senza supporto per font differenti, richiede delle routine
di stampa del testo molto differenti da quelle usate in WinFrotz. Allo stesso modo,
mentre la parte di trattamento dei dati dei vari interpreti Mac può essere
piuttosto diversa -- TADS e Inform e AGT ed altri semplicemente non macinano i numeri
allo stesso modo -- la parte dell'interprete che ha a che fare con il look and feel, l'I/O, può essere più o meno la stessa indipendentemente dalla VM che si sta usando.
Ma visto che ogni potenziale coppia deve essere messa insieme, il lavoro finisce per
essere rifatto tutte le volte.
Inizia Glk. Glk è il tentativo di rendere tutto questo processo più efficiente
separando le due funzioni degli interpreti IF tradizionali. Lo fà definendo una serie
di routine, scritte nel linguaggio per computer C, e raccogliendole nella libreria
Glk. I programmatori che hanno familiarità con il C possono scrivere delle
applicazioni Glk (Glk applications), che fanno il trattamento dei dati
e restituiscono i risultati in un formato che Glk può capire -- GlkInform, GlkTADS,
e così via -- e delle librerie Glk (Glk libraries, chiamate anche "implementazioni Glk", Glk implementations), che adattano le funzioni
Glk ad una specifica piattaforma: WinGlk, XGlk, MacGlk, ecc. Lo scrittore di interpreti
non deve far altro che unire tra di loro applicazioni e librerie.
Se non è chiaro come questa cosa sia utile, immaginiamola in questo modo.
Diciamo che invece di cercare di adattare differenti linguaggi per IF a differenti
piattaforme, stiamo cercando di costruire un sistema ferroviario che trasporti le
persone da alcune città della costa ovest degli Stati Uniti -- Seattle, Portland,
San Francisco, Los Angeles, ecc. -- alle città della costa est: Boston, New York,
Philadelphia, Washington, ed altre. Il sistema pre-Glk di collegamenti diretti avrebbe
comportato la costruzione di rotaie da Seattle a Boston, da Seattle a New York, da
Seattle a Philadelphia, ecc., poi da Portland a Boston, da Portland a New York, ecc.
Se fosse venuto fuori un nuovo punto di partenza, avremmo dovuto costruire un intero
nuovo insieme di rotaie: da San Diego a Boston, da San Diego a New York, ecc.
E lo stesso sarebbe accaduto per ogni nuova destinazione: avremmo dovuto costruire da Seattle
a Miami, da Portland a Miami, da San Francisco a Miami, e così via.
Glk stabilisce un centro, un concentratore. Nella nostra analogia diciamo che
sia Omaha nel Nebraska. Così, invece di costruire rotaie direttamente dai punti
di partenza alle destinazioni, noi costruiamo da Seattle a Omaha, da Portland a
Omaha, da San Francisco a Omaha, ecc. E poi costruiamo da Omaha a Boston, da Omaha
a New York, ecc. Questo riduce drasticamente il numero di rotaie che dobbiamo
costruire. E se viene fuori un nuovo punto di partenza, dobbiamo costruire solo una
rotaia: da San Diego a Omaha. Una nuova destinazione? Una rotaia: da Omaha a Miami.
E le persone che arrivano da San Diego possono cambiare treno a Omaha per andare
ad ogni altra destinazione, e le persone che arrivano da qualunque parte della costa
ovest possono cambiare treno a Omaha ed andare a Miami.
Così diciamo che qualcuno scrive un nuovo linguaggio per IF chiamato ABC. Non ha
bisogno di scrivere degli interpreti ABC-per-Windows, ABC-per-Mac, ABC-per-Palm;
invece scrive semplicemente un interprete ABC-per-Glk, e le persone di tutte le
piattaforme con le librerie Glk possono giocare ai giochi ABC. Allo stesso modo se la
Toastent Technologies rilascia il Cybertoaster, tutto quello che deve essere scritto
è una libreria Glk-per-Cybertoaster, ed il Cybertoaster è istantaneamente pronto
per usare i giochi Inform, TADS, Hugo, o giochi che usino qualunque altro sistema
per il quale ci sia una applicazione Glk -- tutto quello di cui hanno bisogno gli
utenti Cybertoaster è qualcuno che metta insieme le librerie e le applicazioni
per creare degli interpreti.
Potreste chiedervi: le applicazioni Glk ricevono dalle virtual machine e riformattano
il loro output così che Glk possa capirlo. Esistono virtual machine il cui output sia
già adatto all'uso con Glk? La risposta: ci potete scommettere. Questo è Glulx.
Prossima sezione: Glulx e Glulx Inform
O ritorna al sommario