Warum ist Scala skalierbarer als andere Sprachen?


12

Scala wird als skalierbare Sprache berechnet, eine Funktion, die sogar im Namen enthalten ist :

Der Name Scala ist ein Sinnbild für "Skalierbarkeit" und "Sprache", was bedeutet, dass das Unternehmen darauf ausgelegt ist, mit den Anforderungen seiner Benutzer zu wachsen.

Was bedeutet "skalierbar" im Kontext von Scala? Was macht Scala skalierbarer als beispielsweise Java?


5
Scala ist nicht so skalierbar, wie Sie denken: Lesen Sie unbedingt das Twitter-Entwicklerinterview zu Scala / Java. Grundsätzlich haben sie jedes Mal, wenn (echte) Skalierbarkeitsprobleme aufgetreten sind, Scala-Code entfernt und Multithreading korrekt implementiert Java-Code (auf den hier hingewiesen wurde, ist dies in Java viel einfacher als in Scala). Scala ist cool für Prototypen und das Schreiben von Unit-Tests und für alles, was nicht mit der Datenmenge "Real World" (TM) zu tun hat.
Tristan St.

5
Ist es in Java einfacher, Multithread-Code korrekt zu schreiben als in Scala? Wieso das?
Aaron Novstrup

@Webinator Hast du einen Link zum Interview?
Aaron Novstrup

Stimmen Sie mit Tristan St über die Skalierbarkeit überein. Erlang ist aufgrund seiner Fähigkeit, Prozesse in kürzester Zeit zu erstellen, führend bei der gleichzeitigen Programmierung. Sie können einfach nicht mehr als 10.000 Threads erstellen und in SCALA so miteinander interagieren, wie Sie es sich vorstellen.
Ubermensch

3
@TristanSt. Gute Verbreitung von FUD, das ist absolut nicht die grundlegende Erkenntnis, die ich aus diesem Interview gezogen habe. - "Aber für andere Teile haben wir gerade auf ein traditionelles Java-Threading-Modell zurückgegriffen. Der Ingenieur, der daran arbeitete, John Kalucki, fand es einfach ein bisschen einfacher zu testen, ein bisschen vorhersehbarer. Das Schöne war, es Es hat Minuten gedauert, um den Code, der auf einem Akteur basierte, auf einen Thread-basierten Code umzustellen. Es waren ein paar Suchen und Ersetzen. Erstaunliches Konzept - manche Dinge passen zum Darstellermodell und andere nicht!
Derek Litz

Antworten:


14

Wenn Martin Odersky über Scala als skalierbare Sprachauswahl spricht , meint er, dass die Sprache selbst geeignet ist für:

  • Skripterstellung
  • Bewerbungen schreiben
  • Schreiben von Monster "Enterprise" -Anwendungen (für den Wunsch nach einem besseren Wort)

Er bezieht sich ganz sicher nicht auf Skalierbarkeit aus der Sicht der Leistung!

Die Tatsache, dass er behaupten kann, dass Scala für die schnelle Implementierung von Skripten genauso geeignet ist wie für die Bereitstellung in großen Unternehmen, ist ungefähr wie folgt:

Scripting

Scala eignet sich hervorragend zum Schreiben von Skripten, da es aufgrund seiner Typinferenz und seines funktionalen Stils sowohl prägnant als auch zum Schneiden und Zerteilen von Sammlungen usw. ist.

Anwendungen

Scala eignet sich hervorragend zum Schreiben von Anwendungen, da es sich um eine statisch überprüfte Sprache handelt, die einige hervorragende Funktionen für das Arbeiten in funktionalen und imperativen Stilen bietet. Scala ist mit Java kompatibel, sodass Sie ein riesiges Bibliotheks-Ökosystem nutzen können.

Unternehmensbereitstellung

Scala wird zu Bytecode kompiliert und läuft auf der Java Virtual Machine, einem stabilen System mit großer Leistung im Vergleich zu (sogenannten) dynamisch typisierten (dh untypisierten) Sprachen. Auch hier bedeutet die Tatsache, dass es statisch typisiert ist, dass Refactoring auf großen Codebasen viel einfacher ist.


Belege für "statisch getippt bedeutet, dass Refactoring auf großen Codebasen viel einfacher ist"? Klingt eher wie eine "es kommt darauf an", eine Situation dann eine Tatsache. Das Einzige, was ich bei getippten Sprachen definitiv gesehen habe, ist, dass sie für Compiler-Autoren einfacher zu handhaben sind.
Derek Litz

21

Was Odersky sagt, ist (Folie 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

"Scala ist tief, wo andere Sprachen breit sind."

Das heißt, skalierbar ist in Bezug auf Flexibilität und Ausdruckskraft gemeint. Sie können eigene Kontrollstrukturen anlegen. ZB ist das Actors Framework eine Bibliothek, aber es sieht so aus, als würde es Sprachfunktionen verwenden.

Dies bedeutet, dass Scala entsprechend der benötigten Abstraktion skaliert wird, nicht unbedingt in Bezug auf "Beantwortung von 1.000.000 Anfragen in einer Sekunde" (aber Scala ist auch hier stark).


1
+1 das passt wirklich zu "SCAlable LAnguage". Es ist eine Sprache, die entwickelt wurde, um mit den Bedürfnissen des Entwicklers zu wachsen.
Ben James

11

Was die Skalierbarkeit von Java in der Praxis einschränkt, ist nicht die JVM, sondern die Schwierigkeit, richtigen gleichzeitigen Code zu schreiben. Scala erleichtert dies durch die Unterstützung der funktionalen Programmierung und des Darstellermodells.

Java kann sehr skalierbar sein, wenn die Parallelität einfach ist, z. B. auf Webservern (jede Anforderung ist nahezu unabhängig). Wenn es jedoch darum geht, eine einzelne langfristige Aufgabe zu parallelisieren, kann es ein echter Kampf sein, die richtigen Entscheidungen zu treffen.


Java unterstützt zwar keine funktionale Programmierung, dies bedeutet jedoch nicht, dass Sie es nicht in Java verwenden können. Auf diese Weise können Sie die gleiche Skalierbarkeit erzielen, allerdings mit größerem Aufwand. Eine Bibliothek, die code.google.com/p/lambdaj
Peter Lawrey

2
Die Skalierbarkeit, für die Scala den Namen besitzt, bezieht sich auf die Sprache , nicht auf Programme.
Daniel C. Sobral


6

Dies ist nicht erforderlich, da die Sprache selbst skalierbarer als Java ist, da beide Sprachen denselben Bytecode erzeugen können.

Das Actor-Modell und der funktionale Programmierstil können jedoch die Skalierbarkeit verbessern (indem sie die korrekte Parallelprogrammierung vereinfachen und den Synchronisationsbedarf verringern).

Um einen besseren Einblick zu erhalten, werfen Sie einen Blick auf das Darstellermodell und vergleichen Sie es mit der traditionellen Java-Anwendung mit mehreren Threads:

Mit dem Akka-Framework können Sie sogar hochskalierbare Java-Anwendungen erstellen, ohne in Scala zu codieren:


Die Actors-Bibliothek ist ein gutes Beispiel für die Skalierbarkeit von Scala, aber dieses Beispiel hat nichts mit Parallelität zu tun: Die Actors-API sieht aus wie eine native Funktion mit speziellen Operatoren (wie! Message-send), aber es ist wirklich alles nur regelmäßige Methodenaufrufe.
Ben James

Actor Model hilft Ihnen, skalierbare Software zu schreiben, ohne zu viel Schmerz und ohne zu viel Kopfzerbrechen, nicht wahr? Auch wenn Sie dies bei der Verwendung von Actors nicht sehen, hat die Parallelität etwas mit dem Actor-Modell zu tun. Das Ziel des Akteurmodells ist es, die gleichzeitige Berechnung zu vereinfachen. Warum hat dieses Beispiel also nichts mit Nebenläufigkeit zu tun?
Alois Cochard

Mein Kommentar war nicht brillant formuliert, sorry. llemiengs oder michael.kebes antworten erklären es besser.
Ben James

Kein Problem ! Ich verstehe jetzt , Ihr Punkt, ich habe nur über Scala Bibliotheken Skalierbarkeit sprach und nicht über die Sprache Skalierbarkeit / Gleichzeitigkeit selbst verfügt. Vielen Dank
Alois Cochard
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.