Dal codice sorgente al codice della virtual machine

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