clojure Tutorial
Iniziare con Clojure
Ricerca…
Osservazioni
Clojure è un linguaggio di programmazione generico con tipizzazione dinamica con sintassi Lisp.
Le sue funzioni supportano lo stile funzionale della programmazione con funzioni di prima classe e valori immutabili per impostazione predefinita. L'uso di variabili riassegnabili non è così facile in Clojure come in molti linguaggi tradizionali, dal momento che le variabili devono essere create e aggiornate come oggetti contenitore. Questo incoraggia l'uso di valori puri che rimarranno come erano nel momento in cui sono stati visti l'ultima volta. Questo in genere rende il codice molto più prevedibile, verificabile e compatibile con la concorrenza. Questo funziona anche per le raccolte, dal momento che le strutture di dati incorporate di Clojure sono persistenti.
Per quanto riguarda le prestazioni, Clojure supporta il suggerimento del tipo per eliminare il riflesso non necessario laddove possibile. Inoltre, i gruppi di modifiche alle raccolte persistenti possono essere eseguiti su versioni transitorie , riducendo la quantità di oggetti coinvolti. Ciò non è necessario la maggior parte del tempo, poiché le collezioni persistenti sono veloci da copiare poiché condividono la maggior parte dei loro dati. Le loro garanzie prestazionali non sono lontane dalle loro controparti mutevoli.
Tra le altre caratteristiche, Clojure ha anche:
- memoria transazionale software (STM)
- diverse primitive di concorrenza che non prevedono il blocco manuale (atomo, agente)
- trasformatori di sequenza componibili (trasduttori),
- strutture funzionali per la manipolazione degli alberi (cerniere)
Grazie alla sua sintassi semplice ed elevata estensibilità (tramite macro, implementazione di interfacce e riflessioni core), è possibile aggiungere alcune funzionalità di linguaggio comunemente viste a Clojure con le librerie. Ad esempio, core.typed
porta un controllo di tipo statico, core.async
porta meccanismi di concorrenza semplici basati su canali, core.logic
porta la programmazione logica.
Progettato come linguaggio ospitato, può interagire con la piattaforma su cui gira. Mentre l'obiettivo principale è JVM e l'intero ecosistema dietro Java, le implementazioni alternative possono essere eseguite anche in altri ambienti, come ClojureCLR in esecuzione su Common Language Runtime o ClojureScript in esecuzione su runtime JavaScript (inclusi i browser Web). Mentre le implementazioni alternative possono mancare di alcune funzionalità dalla versione di JVM, sono ancora considerate una famiglia di lingue.
Versioni
Versione | Registro delle modifiche | Data di rilascio |
---|---|---|
1.8 | Ultimo registro delle modifiche | 2016/01/19 |
1.7 | Registro delle modifiche 1.7 | 2015/06/30 |
1.6 | Registro modifiche 1.6 | 2014/03/25 |
1.5.1 | Registro delle modifiche 1.5.1 | 2013/03/10 |
1.4 | Registro delle modifiche 1.4 | 2012-04-15 |
1.3 | Registro delle modifiche 1.3 | 2011-09-23 |
1.2.1 | 2011-03-25 | |
1.2 | 2010-08-19 | |
1.1 | 2010-01-04 | |
1.0 | 2009-05-04 |
Installazione e configurazione
Opzione 1: Leiningen
Richiede JDK 6 o versioni successive.
Il modo più semplice per iniziare con Clojure è scaricare e installare Leiningen, lo strumento standard di fatto per gestire i progetti Clojure, quindi eseguire lein repl
per aprire un REPL .
Linux
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein > ~/bin/lein export PATH=$PATH:~/bin chmod 755 ~/bin/lein
OS X
Segui i passaggi di Linux sopra o installa con i gestori di pacchetti macOS.
Installa con Homebrew
brew install leiningen
Installa con MacPorts
Prima installa Clojure
sudo port -R install clojure
Installa Leiningen
, uno strumento di costruzione per Clojure
sudo port -R install leiningen
lein self-install
finestre
Vedi la documentazione ufficiale .
Opzione 2: distribuzione ufficiale
Richiede JRE 6 o versioni successive.
Le versioni di Clojure sono pubblicate come semplici file JAR da eseguire su JVM. Questo è ciò che accade normalmente all'interno degli strumenti di costruzione Clojure.
Vai su http://clojure.org e scarica l'ultimo archivio Clojure
Estrai il file ZIP scaricato in una directory a tua scelta
Esegui
java -cp clojure-1.8.0.jar clojure.main
in quella directoryPotrebbe essere necessario sostituire
clojure-1.8.0.jar
in quel comando per il nome del file JAR effettivamente scaricato.Per una migliore esperienza REPL da riga di comando (ad es.
rlwrap
rlwrap java -cp clojure-1.8.0.jar clojure.main
comandi precedenti), è possibile installarerlwrap
:rlwrap java -cp clojure-1.8.0.jar clojure.main
Opzione 3: avvio
Richiede JDK 7 o versioni successive.
Boot è uno strumento di creazione Clojure multiuso. Comprenderlo richiede una certa conoscenza di Clojure, quindi potrebbe non essere l'opzione migliore per i principianti. Vedere il sito Web (fare clic su Inizia qui) per le istruzioni di installazione.
Una volta installato e nel tuo PATH
, puoi avviare boot repl
ovunque per avviare un REPL Clojure.
"Ciao mondo!" nella REPL
La comunità di Clojure pone una grande enfasi sullo sviluppo interattivo, quindi un sacco di interazione con Clojure avviene all'interno di un REPL (read-eval-print-loop) . Quando si inserisce un'espressione in esso, Clojure lo legge , lo valuta e stampa il risultato della valutazione, il tutto in un ciclo .
Dovresti essere in grado di lanciare un REPL Clojure adesso. Se non sai come, segui la sezione Installazione e configurazione in questo argomento. Una volta eseguito, digita quanto segue:
(println "Hello, world!")
Quindi premi Invio . Questo dovrebbe stampare Hello, world!
seguito dal valore restituito da questa espressione, nil
.
Se vuoi eseguire qualche clojure all'istante, prova REPL online. Ad esempio http://www.tryclj.com/ .
Crea una nuova applicazione
Dopo aver seguito le istruzioni sopra e aver installato Leiningen, avviare un nuovo progetto eseguendo:
lein new <project-name>
Questo imposterà un progetto Clojure con il modello Leiningen predefinito all'interno della cartella <project-name>
. Esistono diversi modelli per Leiningen, che influiscono sulla struttura del progetto. Più comunemente viene utilizzata la "app" di modello, che aggiunge una funzione principale e prepara il progetto da impacchettare in un file jar (che è la funzione principale il punto di accesso dell'applicazione). Questo può essere ottenuto con questo eseguendo:
lein new app <project-name>
Supponendo che tu abbia usato il modello di app per creare una nuova applicazione, puoi verificare che tutto sia stato impostato correttamente, inserendo la directory creata ed eseguendo l'applicazione usando:
lein run
Se vedi Hello, World!
sulla tua console, sei pronto e pronto per iniziare a costruire la tua applicazione.
Puoi impacchettare questa semplice applicazione in due file jar con il seguente comando:
lein uberjar
"Ciao mondo!" usando Boot
Nota: è necessario installare Boot prima di provare questo esempio. Vedi la sezione Installazione e configurazione se non l'hai ancora installato.
Boot consente di creare file Clojure eseguibili usando la linea shebang (#!). Inserisci il seguente testo in un file a tua scelta (questo esempio presuppone che sia nella "directory di lavoro corrente" e si chiami hello.clj
).
#!/usr/bin/env boot
(defn -main [& args]
(println "Hello, world!"))
Quindi contrassegnalo come eseguibile (se applicabile, in genere eseguendo chmod +x hello.clj
).
... ed ./hello.clj
( ./hello.clj
).
Il programma dovrebbe produrre "Hello, world!" E finito.
Crea una nuova applicazione (con avvio)
boot -d seancorfield/boot-new new -t app -n <appname>
Questo comando dirà all'avvio di acquisire l'attività boot-new
da https://github.com/seancorfield/boot-new e di eseguire l'attività con il modello app
(vedere il collegamento per altri modelli). L'attività creerà una nuova directory denominata <appname>
con una tipica struttura dell'applicazione Clojure. Vedi il README generato per maggiori informazioni.
Per eseguire l'applicazione: boot run
. Altri comandi sono specificati in build.boot
e descritti nel README.