2010-06-15 8 views
16

Qualcuno può indicare i vantaggi di Clojure e quale tipo di applicazioni è adatto?Vantaggi di Clojure

Non ho intenzione di confrontarlo con nessuna lingua in quanto tale. Come lingua in sé, per che cosa è adatto? La mia intenzione è conoscere gli strumenti giusti per il lavoro giusto, e dove si inserisce il clojure in questo tipo di scenario.

+2

I vantaggi di clojure rispetto a cosa? Elenco comune? Schema? Giava? – sepp2k

+3

http://clojure.org/rationale – msw

+0

@ sepp2k: probabilmente intendevi il comune LISP – Max

risposta

10

In generale trovo punti di forza per clojure (in nessun ordine particolare):

1) La REPL per provare le cose in modo interattivo.

2) Tutto è immutabile per impostazione predefinita e mutevolezza ha diversi modelli standard ben scelti per modificare lo stato in modo sicuro in un ambiente multithreading

3) la ricorsione in coda è resa esplicita. Finché non vi è un adeguato supporto per la ricorsione della coda sulla JVM questo è probabilmente il miglior compromesso

4) Linguaggio molto espressivo che favorisce un approccio funzionale rispetto ad un approccio imperativo.

5) Molto buona integrazione con la piattaforma Java che rende indolore per mescolare in librerie Java

6) Leiningen come un tool di creazione e gestione delle dipendenze insieme con il sito clojars

Ok, punto 6, non ha nulla fare con la lingua perse, ma sicuramente con il mio piacere di usarla.

Per quanto riguarda le applicazioni esso si rivolge applicazioni multithreading, ma il modo in cui le cose vanno in questo momento che potrebbe significare qualsiasi cosa, come in tutto il mondo la gente cerca di mantenere tutti quei nuclei occupato mentre l'utente è non attesa. D'altra parte, a quanto pare un sacco di persone lo utilizzano per la distribuzione su Google App Engine, che è radicalmente threading SINGLE.

L'approccio funzionale funziona bene nella mia (limitata) esperienza per l'implementazione di trasformazioni e calcoli di dati. Dove informazioni ed eventi possono essere 'trasmessi' attraverso l'applicazione. Le app Web ricadono largamente in questa categoria in cui "trasformiamo" una richiesta in una "risposta".

Ma devo ancora usarlo nel codice di produzione reale. Attualmente lo uso per progetti personali e prototipazione/benchmarking.

17

Vantaggi:

  • tutti i vantaggi della programmazione funzionale, senza la camicia di forza purezza
  • lispy: consente dinamica, codice compatto con l'associazione tardiva, macro multimethods
  • Java interoperabilità codice
  • lattina funziona per sequenziare l'astrazione invece che per specifiche strutture di dati
  • gadget concorrenti in: strutture dati funzionali, memoria transazionale software
  • corre sulla JVM: portabilità e la spazzatura veloce di raccolta

adatto per:

  • lingue incorporate bottom-up di progettazione di applicazioni
  • altamente concorrenti

Probabilmente non adatto per:

  • casi in cui si desidera tipizzazione statica
  • se si desidera che la lingua sia suscettibile di analisi statica
  • tutto ciò che ha bisogno di un tempo di avvio veloce
  • orde di scimmie Java incompetenti
+2

Per quanto riguarda la tipizzazione forte - Ho avuto risultati decenti in Clojure 1.2 utilizzando suggerimenti tipo finora.Penso che con un uso giudizioso puoi ottenere la maggior parte dei benefici di una forte digitazione, se proprio lo si vuole ... – mikera

+4

Questo è un vecchio post, ma solo per dire che la tipizzazione forte non è solo qui per le prestazioni Dopo tutte le ultime VM di Javascript sono veloci senza tipizzazione statica o tipi di suggerimento. tempi di esecuzione e ricompilare il codice di conseguenza: gli advangages di tipizzazione forte sono il supporto migliore per gli strumenti.Il compilatore trova molti bug ovvi, il refactoring offerto da IDE.Quando si ispeziona il codice, è possibile trovare facilmente tutti i chiamanti di una funzione, tutte le implementazioni di un'interfaccia ... il problema è più verbosità e meno genericità –

+3

Io amo la parte "orde di scimmie Java clueless". – Heejin