2009-07-24 3 views
19

In questo momento, tutto ciò che faccio riesce a inserirsi in un singolo file sorgente e in quello sorprendentemente piccolo. Come decidi quanto e cosa separare in file separati?Come dividere il codice Lisp in più file sorgente?

Con Java, è facile decidere cosa va in un file (la decisione è già fatta per te), ma in Lisp trovo che scrivo molte piccole funzioni che si costruiscono l'una sull'altra e diventa difficile decidere cosa, se tutto dovrebbe essere diviso. Mentre affronto progetti più grandi in Lisp, sarebbe bello non dover reinventare la ruota, ma su questo non trovo molte informazioni concrete sul web.

Puoi condividere alcune strategie per gestire progetti più grandi in Lisp o indicarmi alcune risorse che trattano questo?

risposta

13

Quando si inizia a scrivere un programma Lisp, potrebbe essere utile iniziare con un singolo file. Una volta che il codice diventa troppo grande (qualunque cosa sia) puoi dividerlo. Quando ti stai avvicinando a qualcosa che ha bisogno di organizzazione, dovresti investire un po 'di lavoro in esso.

Alcuni suggerimenti:

  • Ci sono alcuni strumenti per gestire le dipendenze file di origine e fornire azioni come compilazione, carico, in fase di compilazione e di carico e gli altri. ASDF è uno, ma ce ne sono anche altri.

  • È necessario un file per descrivere le dipendenze . Chiamalo in modo che possa essere riconosciuto.

  • Potrebbe essere necessario un file per definire uno o più pacchetti .

  • Potrebbe essere necessario inserire funzionalità di implementazione specifiche nei propri file.

  • mossa più grande quantità di dati di configurazione ai propri file

  • generali utilities dovrebbero essere in un altro file

  • macro dovrebbero essere definiti prima utilizzata. Altri file dipendono da questo file e dovrebbero essere ricompilati automaticamente se la definizione della macro viene modificata.

  • funzionalità di gruppo insieme in un file se è connesso logicamente. In un programma di disegno: tutte le funzioni di disegno, tutti i comandi dell'interfaccia utente, il salvataggio dei dati nei file, la stampa, ...

  • non preoccuparti troppo delle dimensioni del file. I file sorgente Lisp possono essere grandi. A volte 100k.

  • lo spostamento nei file è supportato dall'ambiente di sviluppo. M-.su un simbolo trova la sua fonte.

  • assicurarsi di poter ricaricare un file, senza la necessità di riavviare l'intero Lisp.

  • Common Lisp fornisce LOAD e COMPILE-FILE come funzioni. Puoi usare queste funzioni nei tuoi file.

+0

Grazie - questa è una lista utile – Galghamon

4

Se si utilizza Common Lisp, ASDF è un modo popolare per specificare i sistemi. Gestisce le dipendenze degli ordini di caricamento tra i file di origine (e molto altro ancora).

+0

Sono un po 'scioccato - so che ho visto e sfogliato quella pagina nel tuo link prima, ma non avevo idea di cosa stavamo parlando in quel momento. Ha molto più senso ora nel contesto - grazie! – Galghamon

+1

Può essere utile studiare come le librerie CL piccole impostano i loro file .asd. Ecco una piccola e semplice che ho scritto: http://common-lisp.net/project/cl-applescript/ –

+0

Grazie, vedere un esempio di un piccolo pacchetto come questo è stato davvero utile! – Galghamon