Al cuore di ogni computer c'è la central processing unit, o CPU. Il lavoro di una CPU è quello di eseguire le istruzioni che le vengono fornite in codice macchina, che è semplicemente una stringa di cifre binarie: "1101011010010001" (nota) potrebbe voler dire "vai alla 106esima locazione di memoria di questo computer ed aggiungi 1 a qualunque sia il numero che ci trovi". Come fa la CPU a conoscere il significato di questa stringa di numeri? Il motivo è che i chip di silicio sono costruiti in modo che l'invio di una serie di impulsi elettrici che rappresentano quel numero all'interno del chip portano al risultato voluto. E come fa il programmatore a sapere che cosa significa quella stringa di numeri? A meno che si stia lavorando con un linguaggio molto a basso livello, non è possibile saperlo. È per questo che ci sono i compilatori.
Un compilatore è un programma che prende il codice sorgente di
un linguaggio ad alto livello, abbastanza comprensibile come Inform, e lo converte
in codice macchina. Comunque è qui che cominciano i problemi. Ogni tipo di macchina
è differente. Una stringa di numeri che significa "somma tra di loro questi due
numeri" sulla CPU di una macchina Intel, può significare qualcosa di diverso -- o
non significare nulla -- su una macchina Apple. Una soluzione a questo problema
potrebbe essere quella di prendere il vostro codice sorgente, trovare una macchina
su cui gira Windows, e compilare un file eseguibile
-- cioè , un programma che può girare per proprio conto, come ogni altro programma
che usate -- per Windows.
Poi cercare un Mac compilare un eseguibile per Mac. Poi prendete un Palm Pilot e
compilate una versione per il Palm. E una per l'Acorn, una per l'Amiga, e poi una
nuova ogni volta che esce un nuovo tipo di macchina... è facile vedere come questa non
sia la soluzione migliore se volete che persone differenti con tipi differenti di
macchine siano in grado di usare il vostro gioco.
Invece la soluzione adottata dalla comunità IF è quella di compilare i propri
programmi per delle macchine virtuali (virtual machine).
Invece che compilare per il Mac o per DOS, gli utenti di TADS compilano i file
per la "VM TADS", quelli Hugo per la "VM Hugo", e gli utenti Inform compilano per
la "Z-machine".
I documenti con le specifiche per la Z-machine sono come i documenti con le
specifiche per ogni altra macchina: dicono agli scrittori di compilatori come
appare il codice macchina interpretabile dalla Z-machine. L'unica differenza è che nessuna
Z-machine è stata realmente costruita: nessuna fabbrica connette Z-chip-di-silicio a
Z-circuiti-stampati, e non vedrete Z-laptop in vendita da CompUSA.
Ma potete ancora compilare programmi per queste.
Così avete avuto un'idea per un gioco, avete imparato Inform, avete scritto il
vostro codice sorgente e lo avete compilato. Quello che avete adesso è il file
di un gioco progettato per essere eseguito su una macchina che non esiste.
Cosa c'è di buono in tutto questo? Continuate a leggere.
Prossima sezione: Dal codice della virtual machine al vostro schermo
Sottosezione: (nota su binario ed esadecimale)
O ritorna al sommario