Ricerca…


Osservazioni

inserisci la descrizione dell'immagine qui

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.

  1. Vai su http://clojure.org e scarica l'ultimo archivio Clojure

  2. Estrai il file ZIP scaricato in una directory a tua scelta

  3. Esegui java -cp clojure-1.8.0.jar clojure.main in quella directory

    Potrebbe 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 installare rlwrap : 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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow