Perché Scala è più scalabile rispetto ad altre lingue?


12

Scala è definito come un linguaggio scalabile, una funzionalità che è persino inclusa nel suo nome :

Il nome Scala è un portmanteau di "scalabile" e "linguaggio", che significa che è progettato per crescere con le esigenze dei suoi utenti.

Che cosa significa "scalabile" nel contesto di Scala? Cosa rende Scala più scalabile di, diciamo, Java?


5
Scala non è scalabile nel modo in cui pensi: dovresti davvero leggere l'intervista agli sviluppatori di Twitter su Scala / Java ... Fondamentalmente ogni volta che hanno avuto (reali) problemi di scalabilità, hanno finito per rimuovere il codice Scala e inserire correttamente il multi-thread Codice Java (che, come è stato sottolineato qui, è molto più facile da fare in Java che in Scala). Scala è interessante per la proto-battitura e la scrittura di unit test e tutto ciò che non implica la quantità di dati "Real World" [TM] che ha detto.
Tristan San

5
È più facile scrivere correttamente codice multi-thread in Java che in Scala? come mai?
Aaron Novstrup,

@Webinator Hai un link all'intervista?
Aaron Novstrup,

Concordo con Tristan St sulla scalabilità. Erlang è il leader del pacchetto in caso di programmazione concorrente grazie alla sua capacità di creare processi in un tempo minimo. Non puoi creare oltre 10000+ thread e interagire tra loro in SCALA come pensi.
Ubermensch,

3
@TristanSt. Bella diffusione di FUD, non è assolutamente il take away di base che ho ottenuto da quell'intervista. - "Ma per altre parti siamo appena tornati a un tradizionale modello di threading Java. L'ingegnere che ci sta lavorando, John Kalucki, ha appena scoperto che era un po 'più facile da testare, un po' più prevedibile. La cosa bella è che ci sono voluti pochi minuti per cambiare il codice che era basato sull'attore su qualcosa basato su thread. Era un paio di ricerche e sostituzioni. Quindi non è poi così male se gli attori ti mancano per qualsiasi motivo. " Concetto straordinario: alcune cose si adattano al modello dell'attore e altre no!
Derek Litz,

Risposte:


14

Quando Martin Odersky parla di Scala come una scelta linguistica scalabile, ciò che intende è che la lingua stessa è appropriata per:

  • materiale di scripting
  • scrivere applicazioni
  • scrivere applicazioni mostruose "enterprise" (per la mancanza di una parola migliore)

Certamente non si riferisce alla scalabilità dal punto di vista delle prestazioni!

Il fatto che possa affermare che Scala è appropriato per lo script rapido e sporco come per l'implementazione aziendale su larga scala è all'incirca il seguente:

Scripting

Scala è eccezionale per gli script perché l'inferenza del tipo e lo stile funzionale lo rendono conciso e perfetto per le raccolte di sezioni, ecc.

applicazioni

Scala è eccezionale per la scrittura di applicazioni perché è un linguaggio controllato con tipo statico con alcune grandi funzionalità per lavorare in stili sia funzionali che imperativi. Scala è compatibile con Java e quindi è possibile sfruttare un enorme ecosistema di librerie.

Distribuzione aziendale

Scala si compila in bytecode e gira su Java Virtual Machine, un sistema stabile con grandi prestazioni, rispetto ai (cosiddetti) linguaggi tipizzati dinamicamente (cioè non tipizzati). Ancora una volta, il fatto che sia tipizzato staticamente significa che il refactoring è molto più semplice su basi di codice di grandi dimensioni.


Qualche prova a sostegno di "tipicamente statico significa che il refactoring è molto più semplice su basi di codice di grandi dimensioni"? Sembra più una situazione "dipende", quindi un dato di fatto. L'unica cosa che ho visto offrire le lingue tipizzate in modo definitivo è che sono più facili da gestire per gli autori di compilatori.
Derek Litz,

21

Quello che dice Odersky è (Slide 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"Scala è profonda dove altre lingue sono ampie."

Ciò significa che scalabile si intende in termini di flessibilità ed espressività. Puoi creare le tue strutture di controllo. Ad esempio, il framework degli attori è una libreria, ma sembra che utilizzi le funzionalità del linguaggio.

Ciò significa che Scala si ridimensionerà in base all'astrazione necessaria, non necessariamente in termini di "risposta a 1.000.000 di richieste in un secondo" (ma anche Scala è forte).


1
+1 si adatta perfettamente a "SCAlable LAnguage". È un linguaggio progettato per crescere con le esigenze dello sviluppatore.
Ben James,

11

Ciò che limita in pratica la scalabilità di Java non è la JVM, è la difficoltà di scrivere codice simultaneo corretto. Scala rende tutto più semplice grazie al suo supporto per la programmazione funzionale e al modello dell'attore.

Java può essere molto scalabile quando la concorrenza è semplice, come nei server Web (ogni richiesta è quasi completamente indipendente). Ma quando si tratta di parallelizzare un singolo compito di lunga durata, può essere una vera lotta per avere ragione.


Sebbene Java non supporti la programmazione funzionale, ciò non significa che non sia possibile utilizzarlo in Java. Ciò può darti la stessa scalabilità, anche se per uno sforzo maggiore. Una libreria che può aiutare code.google.com/p/lambdaj
Peter Lawrey,

2
La scalabilità a cui Scala possiede il suo nome è della lingua , non dei programmi.
Daniel C. Sobral,


6

Non è necessario il linguaggio stesso che è più scalabile di Java, poiché dici che entrambe le lingue possono produrre lo stesso bytecode.

Ma il modello Actor e lo stile di programmazione funzionale possono migliorare la scalabilità (in breve, semplificando la corretta programmazione della concorrenza e riducendo le esigenze di sincronizzazione).

Per avere una visione migliore, dai un'occhiata al modello dell'attore e confrontalo con la tradizionale applicazione java multi-thread:

Puoi anche usare il framework Akka per creare un'applicazione Java altamente scalabile senza codificare in Scala:


La libreria attori è un buon esempio di come Scala è scalabile, ma questo esempio non ha a che fare con la concorrenza: l'API attori sembra una funzionalità nativa con operatori speciali (come il! Messaggio-invio), ma in realtà è tutto solo chiamate di metodo regolari.
Ben James,

Il modello di attore ti aiuta a scrivere software scalabile senza troppa sofferenza e senza troppi mal di testa da concorrenza, non è vero? quindi anche se non lo vedi quando usi gli attori, la concorrenza è qualcosa che ha a che fare con il modello dell'attore. Il modello dell'attore mira a semplificare il calcolo simultaneo, quindi perché questo esempio non ha nulla a che fare con la concorrenza ... Non capisco il tuo punto qui?
Alois Cochard,

Il mio commento non è stato formulato in modo brillante, mi dispiace. Le risposte di llemieng o michael.kebe lo spiegano meglio.
Ben James,

Nessun problema ! Ora capisco il tuo punto, stavo solo parlando della scalabilità delle librerie Scala e non delle funzionalità di scalabilità / concorrenza del linguaggio stesso. Grazie
Alois Cochard,
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.