A cosa serve Clojure? [chiuso]


100

Per quali applicazioni del mondo reale le persone usano Clojure?

Uso Groovy per la colla, Java per i grandi sistemi, script Python / Perl per l'analisi e la colla. Potrei vedermi chiamare in Clojure da Java ma non riesco a vedere dove lo userei di per sé. Mi colpisce che sarebbe più facile usare quasi tutti i linguaggi di scripting per attività ad hoc.

Non sono un esperto di Groovy o un fanboy in alcun modo, ma mi colpisce che abbia un framework di supporto, strumenti e molti costrutti del linguaggio migliori (chiusure, programmazione funzionale). Lo stesso si potrebbe dire per Scala.

Potrebbe essere che il suo futuro sia come linguaggio incorporato in altri sistemi?


23
Tutto tranne farmi un panino.
wheaties

12
@wheaties: hai provato (sandwich me BLT)?
FrustratedWithFormsDesigner

3
Perché non dovresti usare Clojure anche per "grandi sistemi"? ISTM che, essendo meno prolisso di Java, i tuoi sistemi non avrebbero bisogno di essere così grandi in Clojure. :-)
Ken il

2
Guardando le risposte, immagino che le persone lo stiano usando per alcune cose interessanti. Mi chiedo quante aziende lo sceglieranno per lo sviluppo a lungo termine?
Fortyrunner

1
So che è passato molto tempo, ma ci vuole una mente acuta per programmare in un linguaggio funzionale. Le menti acute sono costose, quindi non conosco il potenziale LTD di Clojure dal punto di vista aziendale, non finché non diventa molto più pervasivo di quanto non sia anche oggi (cinque anni dopo).
Sean Allred

Risposte:


93

Ho usato Clojure per:

  1. Raschiare le pagine web
  2. Script di shell
  3. Creazione di siti web
  4. Giocare con OpenGL
  5. Scrittura di server web asincroni
  6. Modelli HTML
  7. Esecuzione di attività parallele (recupero di più URL ed elaborazione in parallelo)
  8. Giocare con l'audio in tempo reale
  9. Simulazioni

Questa è la roba pratica / divertente.

Ma Clojure ha anche molta profondità teorica. Idee che diventeranno sempre più rilevanti man mano che il mainstream arriverà a comprendere veramente il potenziale della programmazione funzionale.

Un'opinione personale, ma Clojure fornisce costrutti linguistici migliori per organizzare correttamente il software (senza causare indebiti dolori al programmatore funzionante) di tutti i linguaggi che ho usato finora a livello accademico e professionale: C, C ++, Objective-C, Java, JavaScript, Python, Ruby.

Il che non vuol dire che Clojure sia perfetto. Ma mi sembra che sia costruito su una base migliore rispetto alla maggior parte di ciò che è là fuori.


Sei David Nolen? il ragazzo che ha tenuto il discorso su "Clojurescript: Lisp's Revenge". È stato un discorso fantastico!
Amogh Talpallikar

1
//, Cosa intendi con "fornisce costrutti linguistici migliori per organizzare correttamente il software"? EG dev.clojure.org/display/community/Library+Coding+Standards ?
Nathan Basanese

2
@maSnun sul moderno tempo di avvio dell'hardware è di circa 1 secondo o meno. Questo va bene per gli script di shell.
dnolen

1
@ dnolen Grazie per aver dedicato del tempo per rispondere. Sono un nuovo appassionato di clojure e ci vogliono circa 20 secondi quando provo a eseguire il file jar che creo con lein uberjar. Sono su OS X, Macbook con core i5 e 16 GB di RAM. Utilizzi ottimizzazioni speciali?
masnun

5
Gli uberjar @maSnun non sono per gli script di shell, sono per la distribuzione di applicazioni. L'ottimizzazione delle applicazioni è una domanda generale di JVM, niente di specifico per Clojure. Puoi scrivere script shell hash bang con Clojure con la stessa facilità con cui qualsiasi altro linguaggio di scripting ed è quello che consiglierei.
dnolen


18

Clojure viene ampiamente utilizzato per l'elaborazione di grandi volumi di dati. È molto adatto al data mining / AI commerciale (ad esempio: Runa) e alle previsioni su larga scala (aka WeatherBill). La storia della concorrenza di Clojure aiuta davvero in questi domini pesanti di dati in cui l'elaborazione parallela è semplicemente l'unica risposta.


13

Bene, questa è una domanda difficile a cui rispondere. Che cosa vuoi fare? Non c'è molto per cui Clojure non sia adatto. Voglio dire, non è davvero eccezionale per uno script da riga di comando a causa del tempo di avvio di JVM (a meno che tu non stia usando torta o qualcosa di simile), ma questo si può dire per qualsiasi linguaggio JVM.

Clojure è particolarmente adatto alle attività di concorrenza. È stato costruito da zero per essere un linguaggio fantastico per la concorrenza e il suo sistema STM è fantastico. Se hai bisogno di fare alcune cose relative alla concorrenza hardcore, Clojure potrebbe essere particolarmente adatto a tale compito.

Tuttavia, bisogna ricordare che Clojure è un linguaggio generico. Non è adatto solo a determinate nicchie e tende ad essere utile per molte o tutte le cose a cui potrebbero essere adatti gli altri linguaggi JVM.

Clojure è stato progettato per essere un linguaggio fantastico a sé stante e non necessariamente un linguaggio collante. Puoi costruire sistemi da zero in Clojure senza mai toccare direttamente il codice Java. Non che non sia un bel linguaggio collante, so che molte persone lo hanno usato come tale.

Se hai qualcosa in mente, la cosa migliore da fare è considerare come sarebbe la soluzione in qualunque lingua siano le opzioni. Se sembra / si sente meglio in Groovy, vai con Groovy. Sono entrambi linguaggi radicalmente diversi ed entrambi hanno i loro scopi.


Anche allora mi sono ritrovato a scrivere script CLI Clojure, solo perché trovavo il linguaggio piacevole da scrivere e non mi importava del tempo di avvio nel mio caso.
nha

7

Puoi usare Clojure ovunque tu voglia usare Groovy o java. Perché dovresti farlo? Ad alcune persone piace lisp. Quelli sceglieranno clojure su Groovy. Ad alcune persone non piace il lisp. Quelli sceglieranno Groovy.


2
Non è solo una questione di scelta, clojure ha un sacco di caratteristiche che nessun altro linguaggio ha) in qualche modo nessuno ha menzionato nulla, ricordo a malapena i discorsi nelle conferenze quindi non sarò in grado di scrivere una risposta adeguata qui
holms
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.