2010-05-26 13 views
17

Clojure si dice che sia un linguaggio che semplifica la programmazione multi-thread.Un buon esempio di concorrenza di Java vs Clojure

Dal sito Clojure.org:

Clojure semplifica la programmazione multi-threaded in diversi modi.

Ora sto cercando un problema non banale risolto in Java e in Clojure in modo da poter confrontare/contrastare la loro semplicità. Chiunque?

+0

Un bel blog su come spiegare le funzionalità: https: //perkss.github.io/#/clojure/ConcurrencyClojure # text-body – Matt

risposta

13

Suggerirei anche di guardare Christophe Grand's thread safe blocking queue; è meno di 20 righe, ma ha un sacco di funzionalità e, a mio parere, dimostra l'uso esperto di alcune caratteristiche di concorrenza di Clojure, immutabilità, atomi e sequenze pigre.

Considerare che l'alternativa Java java.util.concurrent.LinkedBlockingQueue is 842 lines di un codice commentato sottile (probabilmente complesso), e si inizia a capire come Clojure fornisce realmente la sua promessa di concorrenza; aumentare significativamente il livello di astrazione e fornire un'implementazione corretta con un codice di circa 10-20 volte inferiore.

Noterai anche che quando leggi il codice Java è davvero difficile vedere la foresta per gli alberi ... Se ti venisse dato potresti essere sicuro della sua correttezza guardandolo? Ricorda inoltre che questo codice è stato scritto da Doug Lea (probabilmente il più esperto di Java Concurrency) ed è per java altamente leggibile; Dubito fortemente che possa scrivere rapidamente un codice performante leggibile come questo in Java ed essere sicuro della sua correttezza.

Contrastare questo con la versione Clojure e una volta familiarizzato con le basi di Clojure è facile da sfatare e capire come funziona ... In 20 minuti sono stato in grado di capire ogni linea dell'implementazione ed essere sicuro della sua correttezza. E ora che ho molta più familiarità con gli idiomi e le FP di Clojure, immagino che questo mi porterebbe più vicino a 5 minuti. Probabilmente sarei anche in grado di scrivere un codice "corretto" come questo in Clojure in ore o minuti.

Christophes clojure wrapper della classe java precedente è anche istruttivo poiché condivide la stessa interfaccia funzionale della prima versione.

4

prega di guardare al Rich Hickey's Ants example - dimostra come utilizzare le funzioni di Clojure per costruire programmi concorrenti

+1

Esiste anche una versione Java di esso? Sto cercando esempi in entrambe le lingue, così posso confrontare/contrasto. –

+0

Ricordo che qualcuno ha scritto la versione di Java, ma non è riuscita a trovarlo in questo momento ... –

5

The Wide Finder Project, iniziate da Tim Bray, ha un certo numero di voci Clojure - il più noto dei quali è quello di Alex Osborne; ha fatto a fantastic write-up su di esso - così come le voci in Java, Scala e un numero impressionante di altre lingue.

Il problema viene risolto è completamente pratico e piuttosto interessante come una sfida parallelizzazione e messaggi di Tim su di esso (vedi anche la serie più recente Wide Finder 2) sono abbastanza piacevole da leggere (e portare un buon valore educativo). Inoltre, il testo di Alex è davvero eccezionale, ti preghiamo di leggerlo anche se decidi di saltare il resto. Usa alcune caratteristiche specifiche di Clojure (come gli Atomi) insieme a cose portate da Java se lo fa bene al lavoro & veloce ... In effetti, sarebbe interessante solo per il modo in cui mette in mostra l'eccellente interoperabilità Java di Clojure.

Tutto sommato, direi che questa è probabilmente la cosa migliore per iniziare.

Problemi correlati