Domanda

Per i prossimi 3 anni dovrò lavorare con la JVM (requisito del progetto) con un molto specifico API di terze parti. Vogliono Java, ma mi è stata data margine di manovra per allontanarsi da Java. Speravo che potremmo tornare al framework .NET, così ho potuto sviluppare codice in F #, essendo assolutamente innamorato di OCaml. NET è stato colpito dal nostro cliente. Si tratta di un andare senza.

ho girato a guardare, leggere, e rovistando programmazione blog / forum cercando di capire quale lingua potrebbe appello a me ulteriormente: Scala e Clojure. Coloro che sembrano avere la più grande base della comunità / ventilatore. Essere sperimentato con le lingue ML Vedo un sacco di persone che si confrontano Scala di ML. Tuttavia, ci sono alcuni veri scettici quando si effettua questo confronto. Se Scala è stato così vicino a ML mia produttività e la curva di apprendimento gioverebbe fare questo interruttore.

L'Internet è pieno di disinformazione e mi chiedo se sto soffrendo da tale. Non mi piace la sintassi di Lisp (non farmi male!), Ma se Scala ha le verruche che sto leggendo (scarso supporto IDE, nel framework di test Unità di flusso, i problemi di prestazioni) mi chiedo se Clojure è il meglio opzione. Voglio essere produttivo fuori dal cancello, utilizzando le funzioni come oggetti di prima classe, e riducendo al minimo il dolore concorrenza.

Quindi, in ogni modo, prima di spendere troppo tempo su internet e non funziona ... mi sono bloccato con la JVM, malati di Java e chiedendo dove andare?

È stato utile?

Soluzione

Avete considerato Groovy? Non credo che è abbastanza funzionale come Scala / Clojure, ma è sicuramente molto più funzionale di Java **. In generale, posso ottenere lo stesso lavoro fatto in Groovy con circa il 50% del codice che mi avrebbe portato in Java.

Questo perché Groovy è sintatticamente simile a Java e fornisce un accesso agevole alle librerie JDK, ma l'aggiunta di un sacco di caratteristiche del linguaggio (chiusure, meta-programmazione, proprietà) e la tipizzazione dinamica elimina quasi tutto il boilerplate associato con Java programmazione.

** intendo funzionale, nel senso di 'programmazione funzionale', piuttosto che 'funziona correttamente'

Altri suggerimenti

A mio parere, sia Clojure e Scala non hanno un grande supporto IDE, se questo è veramente importante per voi. Detto questo, ecco cosa posso ritirare dalla mia lettura e esperienza.

Pro di Scala

  • Più veloce di Clojure grazie alla tipizzazione più statico
  • closer to ML (sintassi, del tipo diretto programmazione)
  • Più grande API standard (API di Clojure crescono molto lentamente, perché vogliono assicurarsi che essi trovano i migliori modi di dire prima di renderlo pubblico. Detto questo, Clojure ha ancora API semi-ufficiali supplementari)
  • Una migliore integrazione pratiche con il tipico set di strumenti Java (Clojure è ancora facendo alcune scelte, quindi meno saldamente ancora stabilito in questo senso)
  • Più di Clojure (ma Clojure è costruito sulla cima di un vecchio e collaudato nucleo: Lisp)
  • La gente dice che ha possibilità di raggiungere tradizionale , mentre non avrebbero dire lo stesso di Clojure

Pro di Clojure

  • Incredibilmente facile, veloce e giusta concorrenza grazie a MVCC basato su STM e di altri meccanismi di concorrenza
  • immutabilità di default aiuta a fare la cosa giusta prima
  • Più stabile API standard
    • Quando le cose cambiano, di solito non c'è bisogno di riscrivere tutto il codice esistente
    • (collezioni di Scala sono in corso rifatto ancora per 2,8)
    • (Ho anche letto da qualche parte che è risaputo che l'attuazione attori di Scala ha bisogno di un ripensamento e riscrivere.)
  • più facile da imparare (piccolo linguaggio, essendo una (molto-pulito) Lisp)
  • Un'opportunità per voi di crescere imparando qualcosa di diverso
  • prestazioni di Clojure sarà solo migliorare con il tempo; c'è ancora spazio per belle ottimizzazioni nel compilatore
  • legatura della Scala a Java si sente più limitante rispetto del Clojure (interazioni tra Scala e di sistemi di tipo statico di Java). Si potrebbe a volte dire lo stesso di Clojure (supporto di orientamento agli oggetti non è un 1: 1 in forma, ma il supporto per questo sarà presto ottenere una migliore)
  • Rich Hickey ha un regalo per fare scelte che mettono Clojure nella posizione di avere caratteristiche principali tecniche che saranno adottate da altre lingue nei decenni a seguire. E lui ha anche un dono per spiegarle . Così usarli oggi in Clojure, o aspettare per usarli in un'altra lingua in un certo numero di anni. :)

sulla concorrenza distribuito

Se le vostre esigenze di concorrenza sono distribuiti, Clojure non ha ancora nulla di questo a meno che non lo si esegue in cima terracotta o qualcosa di simile, nel qual caso sarete in grado di utilizzare tutte le caratteristiche di concorrenza. Se lo fate, vi ritroverete con un'esperienza di concorrenza meglio distribuita che con attori di Scala, IMO.

Conclusione

IMO Scala cerca di fare tutto, e riesce a fare la maggior parte di esso. Clojure non prova la stessa cosa, ma quello che si concentra su è più che sufficiente e riesce così bene che la maggior parte delle persone veramente sapendo Clojure non vorrebbe tornare a qualcosa d'altro. La divulgazione : la mia preferenza personale va, naturalmente, a Clojure. Spero che sono stato in grado di essere obiettivo in ciò che ho scritto.

Mi rivolgo i punti che ha sollevato in merito a Scala.

  • il supporto IDE :

    Scala non hanno lo stesso livello di supporto o IDE Java ha - o, se è per questo, che F # dovrebbe avere con VS10.

    Detto questo, che ha uno dei migliori (forse anche il migliore?) IDE supporta il JVM, al di fuori di Java. In questo momento NetBeans è abbastanza buono, e la gente ha sempre detto IDEA è ancora meglio (per sentito dire). Il plugin Eclipse è instabile però.

    Ma lei ha citato una serie di 3 anni, e il supporto IDE per Scala dovrebbe essere notevolmente migliorata una volta alla Scala 2.8 è fuori, in quanto fornirà un certo compilatore-supporto per IDE. Non c'è nessuna data di uscita definita, ma sembra di essere entro i prossimi sei mesi, forse tre. E il plugin di Eclipse sarà aggiornato a destra lungo con esso.

  • In test delle unità di flusso :

    Sì, se si intende che è vibrante, evoluzione e ben supportato, invece di stagnante e abbandonata. ScalaTest, specifiche e ScalaCheck sono quadri di alta qualità, compatibili tra loro, e compatibile con altri framework Java e librerie, come JUnit e JMock.

    I framework di test, infatti, sono quasi un manifesto del bambino di ciò che è possibile con Scala.

    Modifica Scala ha il supporto di prova unità di base nella sua libreria standard (scala.testing.SUnit). Tuttavia, dato che molte alternative superiori, attivamente supportati e libero sono apparsi, questo è stato deprecato e probabilmente non essere parte della libreria fornito con Scala 2.8.

  • problemi Prestazioni :

    Sono a conoscenza di alcun, a parte il fatto che è possibile scrivere codice schifoso, proprio come con qualsiasi altra lingua. La gente non utilizzati per la programmazione funzionale spesso fare cose che non è efficiente, come ad esempio non utilizzare la ricorsione in coda, o concatenare liste e il cambiamento di paradigma che permette Scala porta che alla luce.

    In ogni caso, è possibile scrivere codice Scala veloce come codice Java (ancora più veloce con alcune caratteristiche in arrivo). E si può scrivere codice Scala con caratteristiche funzionali quasi veloce come codice Java.

In tutta franchezza, trovare un altro lavoro.

Se si è di passare i prossimi tre anni, sentirsi a disagio su quello che stai facendo, si dovrebbe considerare alla ricerca di alternative più attraenti.

Anche se si riesce a ottenere una lingua che ti piace, se si fa parte di una squadra (che immagino tu sei) il resto della squadra potrebbe non come quella lingua. Se il resto di loro il codice in Java e in " riempire il vuoto " linguaggio di programmazione, quindi possono sorgere problemi.

Non è poi così male, dopo tutto.

Parlate con il vostro capo, fargli sapere come ti senti. Iniziare la ricerca di alternative e hanno un bel e professionale "congedo".

Non v'è alcun motivo per cui non si può avere ancora un buon rapporto con il vostro capo corrente. Se alla fine hanno un nuovo progetto per .NET si può tornare indietro. Parlarne anche con loro. Lasciare le porte aperte.

Non E 'davvero un gioco a somma zero, imparare tutti!
ps: io voto per Clojure , lo trovo il più divertente!

Si dovrebbe considerare fortunato che è possibile utilizzare la JVM, in quanto la JVM sta diventando sempre più popolare per i linguaggi di programmazione alternativi di Java.

Oltre a Java c'è Groovy , Scala , Clojure (un dialetto Lisp sulla JVM), JRuby (Ruby on JVM), Jython (Python sulla JVM), Jaskell (Haskell sulla JVM), Fan (corre sulla JVM e il CLR .NET) e molto di più, e non c'è anche un OCaml-Java , OCaml che gira sulla JVM.

Quindi, c'è un sacco di scelta in linguaggi di programmazione sulla JVM, da puramente funzionale a scripting semplice e linguaggi OO anvanced.

Strumento di supporto per la Scala e Clojure può essere immaturo, ma è in costante miglioramento.

Dal momento che ti piace F #, quindi Scala è molto probabilmente la soluzione migliore. Dico provare e formare la propria opinione - si potrebbe scoprire che le cose che la gente lamentarsi sono cose che non ti interessano, o cose che è possibile aggirare

.

Non dimenticate JRuby, e notare che un IDE è facoltativo per i non-Java

Penso che tu abbia una situazione di grande. Quante persone ottenere il permesso di scegliere la lingua di implementazione? Con tutto a disposizione per la JVM avere il vostro ambiente scelto non è molto più di una restrizione.

  • Non avrete bisogno di grande sostegno IDE nelle lingue meno verbose
  • In un linguaggio potente come Rubino senza dichiarazioni di tipo, non è necessario un IDE a tutti
  • Scala è stato sviluppato appositamente per curare le verbose-java-blues
  • Il conte fortunato di avere tre anni di lavoro in fila: -)
  • Clojure potrebbe essere divertente e fornisce modelli di progettazione di concorrenza di sicurezza funzionali

Noop? http://code.google.com/p/noop/ (sperimentale però)

In termini di supporto IDE e altri dubbi che stai avendo, Clojure non fa niente di meglio di Scala. E per una persona con ML / F # di fondo (o in generale che, in senso restrittivo, tipizzazione statica lingue FP), avrai sicuramente trovare Scala molto più vicino a quello che si è abituati a.

Se ti piace ML si potrebbero come CAL che è più o meno Haskell 98 per JVM.

E 'di alta qualità e molto stabile, e ha un buon supporto IDE su Eclipse, ma purtroppo non è più in fase di sviluppo attivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top