2012-10-14 9 views
8

Ho studiato Clojure un po 'di recente. Esiste una cosa del genere nel mondo Clojure come fogli di lavoro alla Scala, in cui posso inserire qualsiasi codice e farlo valutare non appena lo salvi? O forse c'è una soluzione simile per Clojure?Clojure Worksheets

Attualmente sto lavorando con lein repl e, purtroppo, non posso dire che sia lo strumento più utilizzabile di sempre.

+2

Si potrebbe voler controllare Light Table. È ancora in una fase piuttosto iniziale, ma già abbastanza utilizzabile. PS: Qual è il tuo problema con lein repl però? L'unico problema che ho con questo è la mancanza di evidenziazione della sintassi, che può essere evitata eseguendo un client nREPL in emacs (o qualsiasi altra cosa veramente) – Cubic

+1

Per un ambiente Clojure molto semplice che non richiede alcun tempo per l'installazione I ti consiglio di provare [Clooj] (https://github.com/arthuredelstein/clooj). Scritto su Clojure per Clojure. –

risposta

10

Nello sviluppo Lisp in generale (e Clojure in particolare) lo stile di programmazione preferito è quello che di solito doppiato programmazione interattiva - lo sviluppatore mantiene un'immagine dell'app caricata in ogni momento e interagisce con esso tramite un REPL. È possibile modificare facilmente il codice caricato al volo e testare le modifiche immediatamente nel REPL (non è affatto semplice con Scala - si deve ricorrere a qualcosa come JRebel per farlo). Trovo la Scala fogli di lavoro una soluzione abbastanza primitiva in confronto ...

Il flusso di lavoro che seguo in Clojure è:

  1. apro nREPL.el in Emacs - questo carica il mio progetto lein2 con tutte le sue dipendenze e mi dà un REPL che posso usare la roba provare
  2. ho scrivere del codice nel codice sorgente e caricare le funzioni modificate (forse valutando una forma di livello superiore con CMx
  3. in seguito avrei premo Cx Cz Per tornare al REPL e provare il nuovo codice in esso
  4. torno al punto 2

Fondamentalmente la Clojure REPL è molto più potente rispetto alla Scala REPL e io personalmente lo considerano enormemente superiore ai fogli di lavoro IDE Scala. Una volta che ci si abitua allo stile di programmazione incrementale interattivo, Lisp offre a tutto il resto un aspetto stranamente complesso al confronto. Non ho familiarità con il plug-in Clojure CounterClockWise di Eclipse, ma sono abbastanza sicuro che offre funzionalità simili a nREPL.el di Emacs.

+0

sì CounterClockWise fa questo per le persone che preferiscono rimanere in Eclipse :) –

5

Si potrebbe voler dare un'occhiata allo autoexpect plugin for Leiningen. Ogni volta che salvi qualsiasi file nella directory di lavoro, il plugin compila ed esegue il tuo codice; come bonus, valuterà qualsiasi chiamata di funzione "attesa" che può servire da test. Questo è molto utile per lo sviluppo basato su test ed è un bel complimento per lavorare con REPL come descritto nell'altra risposta (uso spesso l'uno o l'altro o entrambi insieme, a seconda di quanti casi di test sono in atto).

Si noti che l'esecuzione di autoexpect è molto più rapida rispetto all'esecuzione ripetuta di "lein test" o "lein run", a causa dei costi di avvio di JVM e Leiningen.

3

Sembra che quello che stai cercando è il Clojure Koan plugin. Questo strumento per la risoluzione dei problemi in stile foglio di lavoro che osserva le tue modifiche e fornisce un feedback immediato sulla correttezza del tuo lavoro.

Per il flusso di lavoro di sviluppo effettivo, secondo il consiglio che gli altri hanno fornito sugli strumenti e sull'impostazione dell'ambiente interattivo, ma dal momento che hai detto specificamente che stai imparando Clojure, questo può essere un approccio divertente. C'è anche un'applicazione web chiamata 4Clojure con cui potresti divertirti a giocare.

Tuttavia, alla fine (o immediatamente) si desidera ottenere un ambiente di sviluppo fluido e conveniente, e non ho visto alcun riferimento a pochi strumenti importanti. Una persona ha menzionato Nrepl.Se ti piace Emacs, c'è una modalità di interazione slime/swank che si collega a nrepl chiamata nrepl.el che fornisce un'integrazione molto bella tra i file di modifica e il caos nel repl. Allo stesso modo c'è VimClojure, e puoi trovare plugin per IntelliJ (LaClojure) ed Eclipse (Counterclockwise) che sono anche popolari e ben gestiti.

Qualcuno ha menzionato l'autoexpect. Se stai cercando una buona configurazione di TDD, ti consiglio midje. Se si sta usando una versione di anteprima 2.0 di leiningen ci sono alcuni problemi con l'integrazione di lazytest in flusso, e lo stesso lazytest è o dovrebbe essere deprecato. Ma preferisco midje alle aspettative, personalmente, e questi problemi verranno sicuramente risolti nella versione 2.0 di lein-midje. La versione stabile di lein-midje che funziona con leining non anteprima (1.x) ha funzionalità di tipo autotest usando lazytest.

0

Come nessuno lo ha menzionato, cursive è davvero bello in questi giorni, anche se ero triste per tornare a un IDE in piena regola. Puoi facilmente fare la stessa cosa di Emacs con il repl integrato, basta spostarti nello spazio dei nomi con cui stai lavorando e sincronizzare ogni volta che apporti delle modifiche. È un modo davvero bello di lavorare.