Domanda

1) Qual è il metodo corretto per creare un'immagine in CCL? O qual è la differenza esatta tra:

(compile-file "foo.lisp") e (progn (load "foo.lisp") (save-application "foo"))?

2) Esiste la possibilità di caricare più immagini (la riga di comando preferita)?

È stato utile?

Soluzione

Il compilatore di file nei sistemi LISP comuni crea una rappresentazione della fonte originale in una sorta di linguaggio della macchina (a seconda del processore di destinazione) o per una macchina virtuale (ad esempio in CLISP). Questo file compilato può quindi essere caricato in un sistema LISP in esecuzione con la funzione di caricamento e crea le definizioni della sorgente (funzioni, classi, variabili, ...) ed esegue altro codice nel file.

Si possono caricare direttamente i file di origine (anche utilizzando il carico della funzione). Se il LISP utilizza un compilatore anche per il caricamento dei moduli, il vantaggio del compilatore file è:

  • Il caricamento del codice compilato dovrebbe essere leggermente più veloce
  • Qualche errore che controlla il tempo di compilazione
  • Forse una raccolta più aggressiva con codice più veloce in fase di esecuzione
  • Il codice può essere più piccolo (dipende)

Salvare un'immagine è indipendente. L'immagine è un dump di memoria di un LISP in esecuzione. Ma generalmente non tutti gli stati possono essere scaricati a seconda del sistema LISP. Candidati di cose che non possono essere scaricate su un'immagine: connessioni di file, connessioni di rete, finestre aperte, ... quindi, queste cose potrebbero dover essere riaperte quando viene avviata un'immagine.

Se si desidera avviare un'applicazione LISP una ha diverse opzioni:

  • Carica tutto il codice sorgente all'avvio
  • Carica tutto il codice compilato all'avvio
  • Carica un'immagine con tutto il codice incluso

Quest'ultimo è probabilmente il più veloce. Per molti scopi ora caricare il codice compilato all'avvio è anche abbastanza veloce, soprattutto se l'avvio avviene solo una volta ogni tanto.

Diamo di nuovo la tua domanda.

(compile-file "foo.lisp")

Sopra solo compila un singolo file in un file compilato (file FASL, 'Fast Load'). L'effetto della compilazione è anche che alcune informazioni sono state registrate nel sistema LISP, ma le definizioni del file non sono disponibili. È necessario caricare quindi il file compilato.

(progn (load "foo.lisp") (save-application "foo"))

Sopra prima carica il file. Si noti che un LISP con un compilatore incrementale può compilare alcune o tutte le istruzioni in quel file (CCL e SBCL lo stanno facendo). Salva-Applicazione è una funzione specifica CCL, che scarica lo stato LISP completo (meno connessioni di file, ...) e crea un'applicazione che quindi può essere avviata.

Se si desidera creare applicazioni LISP che iniziano come altre applicazioni, l'applicazione di salvataggio è la strada da percorrere.

Se è possibile caricare più immagini dipendenti dal sistema. In CCL non puoi. Su una macchina LISP si potrebbe caricare un'immagine di base e quindi più immagini incrementali sopra.

Altri suggerimenti

compile-file Fa quello che dice che fa: compila un file di origine nel codice nativo e memorizza il risultato in un altro file. File compilati con compile-file può essere caricato con il file load funzione. La compilazione è semplicemente un'ottimizzazione, quindi l'effetto è molto simile al caricamento diretto del file di origine.

Al contrario, un negozio di immagini di base lo stato completo dell'ambiente LISP, incluso il heap LISP (con tutto il codice e i dati caricati), nonché lo stato dell'esecuzione, motivo per cui il tentativo di caricare più immagini di base in una singola istanza LISP non ha alcun senso. Come è descritto nel manuale, puoi Salva un'immagine di base usando (ccl:save-application "image_name") dove image_name è il nome del file di immagine che si desidera creare. Un'immagine centrale può essere caricata solo avviando una nuova istanza Clozure Cl e fornendo al file l'immagine -I Opzione della riga di comando.

In generale, se stai scrivendo un software composto da più file di origine, di solito non vuoi davvero compilare e caricare le cose manualmente. Invece, considera Creazione di una definizione di sistema File e caricando il tuo software con ASDF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top