Inform e Glulx/appendici/Appendice C - Gli errori della compilazione: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nuova pagina: ==Appendice C - Gli errori della compilazione== '''La compilazione è quel processo che trasforma un file sorgente''' (nel caso di Inform il file contraddistinto dall’estensione <tt>...
 
Nessun oggetto della modifica
Riga 1:
==Appendice C - Gli errori della compilazione==
'''La compilazione è quel processo che trasforma un file sorgente''' (nel caso di Inform il file contraddistinto dall’estensione <tt>.inf</tt>) '''in un file eseguibile''' (il file nel formato <tt>Z-code</tt>, ovvero l’avventura testuale stessa<ref>In realtà, i file codificati in questo formato non sono dei veri e propri file eseguibili (che sono invece contraddistinti dall’estensione <tt>.exe</tt>); questo perché i file nel formato Z-code hanno bisogno, per essere eseguiti, di un programma chiamato '''interprete''' (mentre un file eseguibile si avvia da solo, senza nessun programma aggiuntivo). Gli interpreti variano a seconda del sistema operativo usato e su Windows il più famoso è sicuramente Windows Frotz 2002 di David Kinder. Per ulteriori informazioni, consultate il [http://it.wikibooks.org/wiki/Inform_e_Glulx/Cosa_occorre_per_iniziare capitolo 2].</ref>). Nonostante JIF e IF-IDE mettano a disposizione degli appositi tasti per effettuare quest’importantissima operazione, non sempre tutto va per il verso giusto (possono cioè verificarsi degli errori che impediscono la creazione del file eseguibile). Vediamo allora di elencare alcune regole per impedire che accada quest’evento (o perlomeno per evitare che accada spesso):
# '''ad ogni parentesi graffa aperta ({), ne deve sempre corrispondere una chiusa (}); la stessa cosa vale per le parentesi tonde e quadre ([ ])'''. Questo è l’errore più tipico che si possa fare, e purtroppo è anche uno dei più difficili da trovare, perché il compilatore produce in genere una sfilza di errori che non hanno nulla a che vedere con quello che a noi interessa. Spesso poi, non bisogna fidarsi troppo dei numeri di riga, perché non è detto che l’errore sia sempre nelle righe corrispondenti, ma magari è nelle "vicinanze" (qualche riga più sopra o più sotto) o addirittura in qualche altra parte del programma. JIF, comunque, ci viene in aiuto con un’apposita funzione di controllo delle parentesi;
# '''ogni istruzione deve terminare (salvo alcune eccezioni) con un punto e virgola (;)'''. Se questo simbolo viene omesso il compilatore genera, come nel punto 1, una sfilza di errori che non hanno nulla a che vedere con quello che a noi interessa;
Riga 7:
# '''a parte rare eccezioni (riguardanti soprattutto alcune estensioni), il file eseguibile deve essere sempre creato senza le segnalazioni di warning'''. Esistono infatti due tipi di errori: quello più grave (indicato dal compilatore come <tt>Error</tt> &nbsp;&#x27A8;&nbsp; impedisce la creazione del file eseguibile) e quello più "lieve" (indicato dal compilatore come <tt>Warning</tt> &nbsp;&#x27A8;&nbsp; non impedisce la creazione del file eseguibile, ma può dare dei problemi durante lo svolgimento del gioco);
# '''se viene generata una lista di errori, occorre risolvere il primo e, dopo, tutti quelli che lo seguono'''. Nella maggior parte dei casi, infatti, alcuni errori nascono come conseguenza di quelli fatti prima. Risolti questi ultimi, anche gli altri scompaiono;
# '''non si può definire un nuovo verbo che è già esistente'''. Potete però ampliarne il significato tramite le istruzioni <tt>Extend</tt> e <tt>Extend only</tt>, come spiegato nel [http://it.wikibooks.org/wiki/Inform_e_Glulx/RUINS,_l%27avventura_comincia/Il_ritorno_della_mummia_(non_%C3%A8_un_film,_%C3%A8_tutto_vero) paragrafo 4.9]<ref>Un esempio di messaggio per questo tipo di errore è <tt>#C:\Jif\games\Ruins.inf(1059): Error: Two different verb definitions refer to "prendi"</tt> dove si è cercato di definire, mediante l’istruzione <tt>Verb</tt>, il verbo <tt>prendi</tt> che esiste già in Infit.</ref>;
# '''in Inform si possono usare, di default, solo i valori numerici compresi tra –32768 e 32767'''. Una variabile, cioè, può contenere solo un valore numerico compreso nel range sopra indicato. In caso contrario, il compilatore non genera un errore, ma i valori memorizzati in essa sono completamente diversi e casuali, con dei risultati totalmente imprevedibili;
# '''le librerie di sistema non si devono mai modificare'''. Vanno invece usate le apposite istruzioni per la modifica dei messaggi di default, delle azioni e della status line<ref>Con questo termine s’intende la barra in alto che compare nella finestra di Windows Frotz 2002 (o in qualsiasi altro interprete Z-code) quando iniziate a giocare un’avventura testuale. Per ulteriori informazioni, consultate il [http://it.wikibooks.org/wiki/Inform_e_Glulx/Inform_e_ancora_Inform/La_Status_Line capitolo 5].</ref>; in questo modo si evitano dei possibili errori e (soprattutto) non si violano i diritti di copyright (le librerie di sistema – quelle di Inform e quelle italiane – sono di proprietà dei rispettivi autori, e nessuno – salvo una loro precisa autorizzazione – può modificarle né tantomeno distribuirle);
# '''sebbene esistano diverse versioni della Z-machine, è vivamente consigliato usare la versione 5 (<tt>.z5</tt>) per le avventure testuali a lunghezza standard, e la versione 8 (<tt>.z8</tt>) per quelle più grosse'''. A volte (anche se raramente) è possibile trovare qualche gioco nella versione 6 (<tt>.z6</tt>) usata per supportare la grafica e il suono. Ma in questo caso è molto meglio usare Glulx, una virtual machine a 32 bit il cui compilatore supporta appieno le caratteristiche della (vecchia) Z-machine. In questo modo è possibile, per un programmatore Inform, compilare il suo programma anche per Glulx e accedere così alle istruzioni extra di quest’ultimo per ottenere una maggiore interattività dal punto di vista grafico e sonoro<ref>Occorre ricordare che Infit (così come Jif) supporta appieno anche Glulx, e che i giochi in questo formato devono essere eseguiti dal programma [http://www.vincenzoscarpa.it/inform/manuale/WinGlulxe.zip WinGlulxe]. Ulteriori informazioni potete trovarle nel [http://it.wikibooks.org/wiki/Inform_e_Glulx/Inform_e_Glulx/Cos%27%C3%A8_Glulx capitolo 6].</ref>;
# '''Non potete usare l’istruzione <tt>include</tt> su un file che non esiste o che non si trova nella path library specificata di default nell’editor di testo'''. Nel caso ad esempio di IF-IDE, supponendo che il mio listato Inform contenga l’istruzione <tt>Include "Parser";</tt> e che la path library di default sia "C:\Inform\Libraries", se al momento della compilazione il file <tt>Parser.h</tt> non si trova nella directory sopra specificata, il compilatore Inform genererà un errore che bloccherà l’operazione in corso;
# '''Tutto quello che viene dichiarato nel file di include, deve sempre essere utilizzato'''. Non posso, cioè, definire un’ipotetica variabile <tt>count</tt> dichiarata ad esempio nel file <tt>Variabili.h</tt> e non utilizzarla all’interno del listato. Questo perché quando inizia la fase di compilazione, il compilatore Inform riunisce tutti questi file "esterni" in un unico file che poi utilizza per creare (se non ci sono ovviamente degli errori) l’eseguibile;
# '''la status line, se usata, va sempre inizializzata'''. Per sapere come fare, consultate il [http://it.wikibooks.org/wiki/Inform_e_Glulx/Inform_e_ancora_Inform/La_Status_Line paragrafo 5.1].
 
[[Immagine:Inform e Glulx-sp.gif|centre|435 px|]]
Riga 114:
In questo modo, è possibile testare ogni singola parte del gioco, riuscendo così a capire dove si verificano gli errori più "profondi".
Per i programmatori più esperti, Inform mette a disposizione delle specifiche istruzioni che permettono di controllare il processo di compilazione (le '''direttive''', inizianti tutte con il carattere <tt>#</tt> e descritte nel [http://it.wikibooks.org/wiki/Inform_e_Glulx/Le_basi_di_Inform/Le_direttive paragrafo 3.17]). Dei loro esempi di utilizzo potete trovarli nei listati [http://www.vincenzoscarpa.it/inform/manuale/avventura_inf.zip avventura.inf] e [http://www.vincenzoscarpa.it/inform/manuale/negozio_inf.zip negozio.inf], oppure, si può sempre dare un’occhiata al listato di "[http://www.vincenzoscarpa.it/inform/manuale/listati_inform.zip La pietra della luna]", la bellissima avventura testuale scritta da Paolo Lucchesi.
 
Non mi resta che augurare una buona compilazione a tutti...
Riga 122:
 
[[Categoria:Inform e Glulx|appendici|Appendice C - Gli errori della compilazione]]
{{Avanzamento|100%|2425 dicembre 2009}}