2009-02-16 6 views
19

Sono un programmatore Java da oltre 10 anni da quando ho iniziato con Smalltalk. È mia opinione che gli seguenti grandi linguaggi siano probabilmente quelli che girano sulla onnipresente Java Virtual Machine. Mi piacerebbe approfittare di alcune delle funzionalità che Scala (tra le altre lingue) ha - case istruzioni per gerarchie di classi, chiusure, inferenza di tipo in quanto mi permetterà di scrivere codice più conciso e chiaro (spero). Un po 'più vicino a Smalltalk!C'è qualcuno che usa Scala in rabbia (e quali consigli per un programmatore Java)?

Tutte le cose che sono una seconda natura in Java:

  • Edificio con ant
  • distribuzione di applicazioni/librerie in logica jar s
  • Grande strumento IDE supporto
  • Scrittura GUI (o avere una GUI Swing parla con una sorta di servizio remoto?)
  • Librerie/quadri di terze parti
  • di configurazione (proprietà, XML, Spring ecc)
  • driver di DB ecc

Sono preoccupato che la differenza tra giocare con qualche progetto pet e in realtà fare il salto di usarlo nella rabbia sul posto di lavoro è un po 'troppo

  1. Qualcuno ha fatto questo salto?
  2. Ne è valsa la pena?
  3. Quali lezioni hai imparato?

(Ovviamente le persone sono usando Scala - ma è chiunque la costruzione vera e propria, per la mancanza di una parola migliore, Enterprise applicazioni?)

+15

Nel caso in cui qualcuno fraintenda la frase "in rabbia", si riferisce all'uso di qualcosa nel servizio effettivo verso il suo scopo, in contrasto con l'uso della pratica. La frase non è un giudizio qualitativo, di per sé. Può essere ovvio per tutti, ma forse no. – nsayer

risposta

11

Ho usato Scala sulla nostra infrastruttura Java esistenti per interrogare e manipolare i grandi documenti XML. Non è stato possibile utilizzare le librerie standard xml Java o non altrettanto facilmente.

Ero tentato di usarlo per i calcoli delle prestazioni del portafoglio, ma avevo già terminato la versione di Java. Una versione di Scala sarebbe stata più facile da gestire in quanto è più facile tradurre le formule direttamente nel codice.

Un'altra area in cui è possibile entrare di nascosto in Scala è con il multithreading. Non ho esperienza reale con questo, ma sembra essere più facile in Scala.

Il punto è, non provare a vederlo come una sostituzione Java per ora, ma usarlo dove puoi utilizzarlo potenzia vicino al tuo codice Java esistente.

Ho usato Intellij con il plugin Scala come IDE, ma non è ancora lì. È possibile in combinazione con il plugin Maven e la console.

Sono anche un programmatore Smalltalk e amo poter utilizzare i blocchi di codice in Scala. Rispetto a Java c'è meno codice, ma non è ancora leggibile come il codice Smalltalk.

A proposito, la comunità Smalltalk sta crescendo di nuovo, grazie al quadro Mare, così si potrebbe desiderare di tornare

Le cose che ho imparato o ricevuto una migliore comprensione di:

  • l'uso di costruttori
  • il concetto immutabile
  • uso delle liste e la ricorsione
  • progra funzionale mming in generale

Quindi sì, penso che ne valga la pena.

1

Sì, le persone stanno costruendo effettive applicazioni "Enterprise" con Scala (e Clojure). Fallo.

Naturalmente, le persone usano anche Smalltalk, quindi se ti piace Smalltalk, perché non usarlo?

+0

Penso che passare a Smalltalk ora sarebbe un vicolo cieco. Questo non è davvero inteso come una fiamma; Adoro Smalltalk (anche se non sono mai stato un utente avanzato). Ma penso che sarebbe un errore introdurlo nel mio posto di lavoro. –

+0

Potresti rispondere ad alcune delle specifiche della domanda ri: Scala? Come hai trovato la transizione (supponendo che fossi un programmatore Java)? –

2

Ho aggiunto clojure all'infrastruttura software utilizzata nel centro operazioni scientifiche della missione Kepler. In questo momento è lì per fare il debug interattivo; eseguire il REPL, caricare alcune classi ed eseguire metodi in maniera ad hoc.

MODIFICA: OK, quindi "caricare alcune classi ed eseguire i metodi" è vago. Ad esempio, possiamo caricare le nostre classi di greggio e quindi eseguire il metodo per convertire un tipo di tempo del veicolo spaziale in un altro.

 
user=> (import '(gov.nasa.kepler.hibernate.dr LogCrud)) 
user=> (def crud (new LogCrud)) 
#'user/crud 
user=> (def shortCadences (.longCadenceToShortCadence crud 0 2500)) 
user=> (prn shortCadences) 
#> 

Non ci sono altri metodi che possono essere chiamati a convertire questo tempo in altri tipi di formati di tempo, che potrebbero essere utili per il debug. Potremmo creare strumenti a linea di comando per incapsulare tutte queste funzionalità, ma non è necessario poiché tutto è disponibile da Clojure.

+0

"caricare alcune classi ed eseguire metodi" è un po 'vago? Non siamo * tutti * i missilistici che conosci ;-) –

5

Io fondamentalmente colpito tutti sulla testa con codice Scala nel nostro ultimo progetto, in quanto mi sono ammalato di debug gli stessi problemi causati da una mancanza di comprensione di Hibernate + JBoss. (E 'incredibile, davvero gli sviluppatori che scrivevano del sistema originale sono ancora lì e ancora si perdono in dettagli Hibernate..)

Ciò che abbiamo avuto -> un sistema strambo costruita per lo più con un mucchio di chicchi di EJB apolidi cablata insieme con qualche codice di ibernazione mescolato con un po 'di SQL. (Siamo un ASP, in pratica. Il cluster di produzione è abbastanza piccolo -> solo circa 100 macchine.)

Cosa ho fatto -> mettere insieme vari servizi basati su REST, dove abbiamo ridefinito l'RPC tra alcuni server . Questo rende tutto molto facile da codificare, oltre a implementare un'API pubblica in quello che era un sistema in cui non si prestava attenzione alle dipendenze.

Finora, abbiamo iniziato a distribuire il codice dentro e fuori le istanze di JBoss senza problemi reali. La prima volta che provi a usare Scala object in Java, probabilmente ti arricci il naso. Altrimenti, nessuno se n'è mai accorto.

Finora sono trascorsi circa 5 mesi dall'inizio. Abbiamo fatto un paio di revisioni importanti, e successivamente siamo dietro, ma il sistema è molto, molto meglio testato rispetto al passato. Quindi, mentre abbiamo avuto alcune idee sbagliate mentre stavamo imparando il sistema, ora siamo stati in grado di rimuoverle tutte e di avvicinarci molto alla distribuzione della produzione. Tutto sommato, direi che il tipico tizio ha bisogno di 2-3 mesi per smettere di programmare come un programmatore Java, e diventare "familiare" con la maggior parte delle librerie standard.

Scrivere codice JDBC invece di un sistema ORM ha praticamente eliminato tutti i nostri problemi di prestazioni. La velocità è stata in realtà significativamente migliore, ma soprattutto perché ero in grado di fare tutto ciò che volevo con un codice applicativo meno reale.

Strumenti che sto usando:

  1. Restlet: molto soddisfatto di questo quadro. Il nostro livello di restlet è scandalosamente codice banale.
  2. JDBC -> Nota: abbiamo ottimizzato quello che era fondamentalmente lì nel wiki
  3. XML (e presto, JSON)
  4. Buildr, Maven su un paio di progetti che non volevo convertire (più Nexus e Hudson). Sto sperimentando con sbt, che è già molto bello per progetti scala.

Non abbiamo avuto assolutamente alcun problema con il riutilizzo di una delle vecchie librerie java, ma tendiamo a racchiuderle in livelli scala-fied. Principalmente solo per scrivere meno codice.

E il modello pimp my library è di gran lunga il più importante da conoscere. Il pattern "torta" è bello, ma devi controllare l'istanziazione, che a volte non è abbastanza utile. Ho anche usato Guice in un ambiente misto, non proprio difficile. Ma trovo che il codice di mixaggio sia molto meno utile di quanto pensassi all'inizio, anche se probabilmente è perché sto sostituendo un sacco di codice Java davvero pessimo.

Il mio ambiente di modifica è principalmente TextMate su OS X, ma viene implementato su server Linux.

P.S. Sì, lo so che ha circa 4 mesi, ma qualunque cosa. È rilevante, soprattutto ora che abbiamo qualche esperienza.

+0

Grazie, Tristan. Ora sto sviluppando la maggior parte delle novità in Scala, che è un po 'una curva di apprendimento ma (probabilmente) ne vale la pena. Ho scoperto che sto ancora utilizzando meccanismi familiari dal mondo Java per aiutare la costruzione e l'implementazione (ad esempio Ant e Spring). Immagino di dover passare un po 'più di tempo a familiarizzare con le alternative di Scala –

2

L'ho visto su collegamenti correlati, e ho pensato di entrare, ora siamo un paio di anni lungo la strada.

Il supporto IDE è notevolmente migliorato, IntelliJ 11 ha un buon supporto per Scala a questo punto. L'evidenziazione della sintassi funziona benissimo, sebbene il debug possa essere un po 'fastidioso.

SBT sembra che stia sostituendo rapidamente Maven o Ant/Edy, e grazie a dio, SBT è molto più semplice da utilizzare rispetto a Maven e si adatta molto meglio a Scala. IntelliJ per uno ha anche una console SBT, e combinata con il debug interattivo può far sì che il debugging in Scala vada molto velocemente, anche se in tutta onestà, con l'evidenziazione della sintassi che sta diventando davvero buona, la quantità di debug che trovo di cui ho bisogno è notevolmente ridotta. Scala scorre molto meglio di Java e sembra condurre a un codice molto meno soggetto a errori.

L'interazione con il database sembra ancora un po 'in aria, ma ci sono alcuni framework che non sono male e possono farti lavorare con un database in un modo o nell'altro piuttosto rapidamente.

A questo punto abbondano librerie e framework di terze parti e, naturalmente, è ancora possibile utilizzare qualsiasi semplice libreria di terze parti Java precedente.

A questo punto, ho lasciato la domanda: perché non dovresti usare Scala o un'altra lingua JVM di prossima generazione per un progetto? E anche se la semplice risposta è che molti sviluppatori non sono pronti a trattare con Scala oggi, in tutta onestà, hanno bisogno di prendere la testa dei loro culi collettivi e mettersi in gioco, e una società che richiede che il suo utilizzo durerà a lungo modo per farlo accadere (tutti noi abbiamo bisogno di una spinta a volte per tornare in gioco). Inoltre, se stai facendo un qualsiasi tipo di "impresa" o di sviluppo di volumi elevati, e non capisci la programmazione funzionale e non riesci a capirlo, fai un favore a tutti, metti giù il tuo IDE, o proibisci le abilità, segui lo scripting o trova un nuovo percorso di carriera.

Ci sono molte aziende di alto profilo che fanno leva su Scala oggi, la più pubblica delle quali è probabilmente Twitter. Hanno anche contribuito con alcune delle loro strutture nel mondo dell'open source.

0

L'ho usato in "prova rabbia" una volta, per caricare alcuni gigabyte di dati (un carico di lavoro abbastanza leggero per quello che facciamo). Speravo che avrebbe avuto prestazioni più elevate e meno sovraccarico di memoria rispetto a PyPy. Ha fallito BADLY, sull'uso della memoria. Così terribilmente ero inorridito, imbarazzato per averlo discusso, e mai più guardato di nuovo.

Problemi correlati