Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. WeltenzyklopÀdie
  2. Scala (Programmiersprache)
Scala (Programmiersprache) 👆 Click Here!
aus Wikipedia, der freien EnzyklopÀdie
Scala
Basisdaten
Paradigmen: objektorientiert, funktional, imperativ
Erscheinungsjahr: 20. Januar 2004
Designer: Martin Odersky
Entwickler: Martin Odersky, École polytechnique fĂ©dĂ©rale de Lausanne
Aktuelle Version 3.7.4[1] (11. November 2025)
Typisierung: statisch typisiert
Beeinflusst von: Meta Language[2], Java[2], Erlang[2], Haskell[2], Smalltalk, Standard ML, Objective CAML, Common Lisp, Eiffel, Oz, Pizza, Scheme
Beeinflusste: Kotlin
Betriebssystem: plattformunabhÀngig, JVM, JavaScript[3], LLVM[4] (experimentell)
Lizenz: Apache-Lizenz, Version 2.0[5]
scala-lang.org

Scala ist eine funktionale und objektorientierte Programmiersprache.

Konzepte

[Bearbeiten | Quelltext bearbeiten]

Integration mit Java

[Bearbeiten | Quelltext bearbeiten]

Scala-Programme können Java Archive (umgangssprachlich JAR-Datei) ansprechen und Java-Programme können Scala-Dateien ansprechen.[6] Es können also alle bestehenden Java-Bibliotheken und -Frameworks in Scala-Projekte eingebunden und dort genutzt werden. Umgekehrt ist das zwar prinzipiell möglich, in der Praxis aber nicht immer problemlos. Ähnliches gilt fĂŒr die meisten Werkzeuge: Entwicklungsumgebungen wie Eclipse, NetBeans oder IntelliJ unterstĂŒtzen Scala ebenfalls.

Objektorientierung

[Bearbeiten | Quelltext bearbeiten]

Scala ist, anders als Java, eine rein objektorientierte Programmiersprache. Jeder Wert ist ein Objekt. Das gilt auch fĂŒr primitive Datentypen, ohne dass es zu Performance-Einbußen kommt, denn der vom Compiler erzeugte Bytecode verwendet primitive Datentypen.

Interfaces werden ĂŒber den Mechanismus der Traits implementiert. Traits bestehen nicht nur aus Definitionen, sie können bereits konkrete Implementierungen von Methoden enthalten. Klassen können einen oder mehrere Traits erweitern (SchlĂŒsselwort extends).[7] Dabei handelt es sich nicht um Mehrfachvererbung, sondern um einen Mixin-Mechanismus.

Über das SchlĂŒsselwort object (anstelle von class) wird eine Implementierung des Entwurfsmusters Singleton bereitgestellt. Statische Felder oder Methoden fehlen in Scala, sie werden stattdessen in einem object definiert.

Funktionale Sprache

[Bearbeiten | Quelltext bearbeiten]
→ Hauptartikel: Funktionale Programmierung

Funktionen sind First-Class-Objekte. Sie können an allen Stellen verwendet werden, an denen Werte erlaubt sind, z. B. Zuweisung an eine Variable (hier ist nicht das Ergebnis der Funktionsauswertung gemeint, sondern die Funktionen selbst) oder bei der ParameterĂŒbergabe. Methoden sind selbst aber keine First-Class-Objekte, können aber jederzeit in Funktionen umgewandelt werden. Auch Funktionen höherer Ordnung[8] sind in Scala realisiert, wodurch beispielsweise Currying ermöglicht wird.

Pattern Matching

[Bearbeiten | Quelltext bearbeiten]

Ein wichtiger Aspekt zur UnterstĂŒtzung der funktionalen Programmierung mit Scala ist Pattern Matching. Im Gegensatz zu der switch-Anweisung, wie sie zum Beispiel in Java implementiert ist, arbeitet Pattern Matching nicht nur auf der Basis von Werten, sondern auch bezogen auf die Struktur bzw. den Typ eines Objektes. Um auf eine Instanz Pattern Matching anwenden zu können, muss es fĂŒr sie ein Singleton-Objekt geben, das die unapply-Methode[9] implementiert. So kann man Werte aus der Klasse extrahieren, die entsprechend der unapply-Methode von den Feldern der Klasse abgeleitet werden. Da man oft nur die Felder selbst extrahieren muss, gibt es sogenannte Case Classes[10] in Scala. Bei ihnen generiert der Scala-Compiler automatisch und vom Programmierer unbemerkt ein gleichnamiges Singleton-Objekt mit apply- und unapply-Methode.

Der folgende Code implementiert die Suche in einem binÀren Suchbaum mithilfe von Pattern Matching und Case Classes:

enum Tree:
  case Leaf(key: Int)
  case Branch(key: Int, left: Tree, right: Tree)

import Tree._

def contains(tree: Tree, key: Int): Boolean = tree match
    case Leaf(i)                        => i == key
    case Branch(i, _, _) if i == key    => true
    case Branch(i, left, _) if i > key  => contains(left, key)
    case Branch(i, _, right)            => contains(right, key)

Beispielaufruf:

val sorted: Tree = Branch(4, Leaf(2), Branch(7, Leaf(6), Leaf(8)))

println(s"contains(sorted, 4) -> ${contains(sorted, 4)}")
println(s"contains(sorted, 5) -> ${contains(sorted, 5)}")
println(s"contains(sorted, 6) -> ${contains(sorted, 6)}")

// Ausgabe:
// contains(sorted, 4) -> true
// contains(sorted, 5) -> false
// contains(sorted, 6) -> true

Closures

[Bearbeiten | Quelltext bearbeiten]
→ Hauptartikel: Closure (Funktion)

Funktionen greifen nicht nur auf ihre Parameter und lokalen Variablen zu, sondern auch auf Variablen ihres Kontextes (Scope), welche zum Auswertungszeitpunkt gĂŒltig sind. Dadurch werden aus open terms die namensgebenden closed terms. Falls sich bei mehrfacher Verwendung der Funktion der Wert einer Variablen des Kontextes gegenĂŒber einem frĂŒheren Auswertungszeitpunkt Ă€ndert, kann sich auch der RĂŒckgabewert und das Verhalten der Funktion Ă€ndern.

Typsystem

[Bearbeiten | Quelltext bearbeiten]

Scala ist statisch typisiert. Generische Klassen verwenden Typen, die zum Entwicklungszeitpunkt noch nicht festgelegt sind, z. B. List[T] Oberklassen können abstrakte Typen[11] vorgeben, die von deren Unterklassen in Form konkreter Typen spezifiziert werden mĂŒssen. Gleiches gilt fĂŒr Variablen (var und val) sowie Methoden.

Kovarianz und Kontravarianz

[Bearbeiten | Quelltext bearbeiten]
→ Hauptartikel: Kovarianz und Kontravarianz

Typparameter einer generischen Klasse können mit einer Annotation versehen werden, die bestimmt, wie sich Untertyprelationen von Typargumenten auf die Untertyprelation von generischen Instanziierungen der Klasse auswirken. Invarianz, Syntax: K[T], bedeutet, dass ĂŒberhaupt kein Zusammenhang besteht. Kovarianz, Syntax: K[+T], bedeutet, dass sich die Relation in gleicher Richtung fortsetzt: Wenn T Untertyp von U ist, dann ist K[T] Untertyp von K[U]. Kontravarianz, Syntax: K[-T], bedeutet, dass die Fortsetzung in der Gegenrichtung erfolgt: Wenn T Untertyp von U ist, dann ist K[U] Untertyp von K[T]. Varianzannotationen beeinflussen, an welcher Stelle innerhalb der generischen Klasse der Typparameter benutzt werden darf: Kovariante Typparameter dĂŒrfen beispielsweise nicht als Typ von Methodenargumenten verwendet werden, kontravariante nicht als RĂŒckgabetyp.[12]

Typinferenz

[Bearbeiten | Quelltext bearbeiten]

Typinferenz ist die FĂ€higkeit des Compilers, den Typ eines Ausdrucks aus dem Kontext herzuleiten, welche unter Syntax beispielhaft dargestellt ist.

Auswertungsstrategie

[Bearbeiten | Quelltext bearbeiten]

Funktionale AusdrĂŒcke werden in Scala strikt ausgewertet. Allerdings kann durch das SchlĂŒsselwort lazy die verzögerte Auswertung (Lazy-Evaluation) von einzelnen AusdrĂŒcken spezifiziert werden. Auch die Collection-Klassen unterstĂŒtzen mit den Methoden view und force die Möglichkeit der verzögerten Auswertung. Im Gegensatz hierzu werden in Haskell die Programme standardmĂ€ĂŸig lazy ausgewertet und es existieren Strictness-Annotationen.

XML

[Bearbeiten | Quelltext bearbeiten]

Scala 2 unterstĂŒtzt XML mittels Syntax (XML-Literale) und Standardbibliothek. Mit Version 2.13 wurde die XML-UnterstĂŒtzung aus der Standardbibliothek entfernt und in das eigenstĂ€ndige Projekt scala-xml ausgelagert.[13] Mit Scala 3 wurde auch die UnterstĂŒtzung fĂŒr XML-Literale deprecated und wird somit kĂŒnftig entfernt.[14]

In der scala-xml-Bibliothek sind grundlegende XML-Operationen und -Datentypen verfĂŒgbar: XML-Konstruktoren, -Serialisierung und -Deserialisierung, XPath-Ă€hnliche Extraktion von Elementen und Attributen:

val liste = <einkaufsliste>
                <artikel><name>Brot</name><kosten>3.50</kosten></artikel>
                <artikel><name>Apfel</name><kosten>0.29</kosten></artikel>
                <artikel><name>Eier</name><kosten>1.19</kosten></artikel>
            </einkaufsliste>
val gesamtkosten = (liste \\ "kosten").map(_.text.toDouble).sum
// Ergebnis: 4.98

Implicits

[Bearbeiten | Quelltext bearbeiten]

Methoden können mittels des Modifiers implicit zu sogenannten implicit methods werden. Wenn der Compiler ein Objekt eines bestimmten Typs A erwartet, aber ein Objekt des inkompatiblen Typs B vorfindet, sucht er im lexikalischen Scope und im companion object von A nach einer implicit method, mit der er das B-Objekt in ein A-Objekt konvertieren kann. Mit dieser Technik lassen sich die aus C# bekannten extension methods nachbilden (das sogenannte pimp my library-Pattern) und in Grenzen sogar Vererbung.

Die letzte Parameterliste einer Methode kann ebenfalls als implicit markiert werden. Wenn die Parameterliste beim Aufruf einer Methode fehlt, aber ein als implicit markierter Wert im lexikalischen Scope zu finden ist, wird er automatisch an die Methode ĂŒbergeben. Hiermit ist es möglich, die aus Haskell bekannten type classes als Entwurfsmuster nachzubilden[15]. Scalaz, eine Library zur pur funktionalen Programmierung in Scala, setzt Typklassen weitrĂ€umig ein.

Mit impliziten Konversionen wird in Scala auch Verhalten in Bibliotheken implementiert, das viele Sprachen als Spezialfall im Compiler abdecken. So zum Beispiel besondere Regeln beim ZusammenfĂŒgen von Zeichenketten wie 42 + "etwas Text" oder die Konvertierung von Zahltypen mit kleinerem Wertebereich zu Zahltypen mit grĂ¶ĂŸerem Wertebereich, in Java String concatenation operator +[16] bzw. widening primitive conversions[17] genannt.

NebenlÀufigkeit

[Bearbeiten | Quelltext bearbeiten]
→ Hauptartikel: NebenlĂ€ufigkeit

WĂ€hrend Scala Threads durch die Java-Klassenbibliothek unterstĂŒtzt, gibt es in Scalas eigener Bibliothek eine Implementierung von Aktoren. Diese wurde von der Aktoren-Implementierung, wie sie in Erlang umgesetzt wurde, inspiriert. Seit der Scala-Version 2.11 ist die ursprĂŒngliche Aktoren-Implementierung nicht mehr Bestandteil der Standardbibliothek. Ersetzt wird sie durch die Akka-Implementierung (ab der Version 2.10 verfĂŒgbar)[18].

ZusÀtzlich implementiert die Standard-Library von Scala Futures und parallele Collections.

Syntax

[Bearbeiten | Quelltext bearbeiten]

Die Syntax der Sprache ist an Java und ML angelehnt. Von Java wurde vor allem eine Reihe von SchlĂŒsselworten sowie die Blocksyntax ĂŒbernommen, von ML die Syntax fĂŒr Typannotationen und Deklarationen.

Im Vergleich zur Java-Syntax kann in den meisten FĂ€llen das Semikolon am Ende einer Zeile entfallen. Die Syntax zur Typdefinition von Variablen und RĂŒckgabewerten lehnt sich an der von ML statt von Java an: Man formuliert nicht Typ variable, sondern variable: Typ.

Die Deklaration und Definition von Werten, Variablen und Methoden erfolgt mittels der SchlĂŒsselwörter val, var und def, gefolgt von Typangaben.

val wert: Int = 42
var variable: Double = 3.14
def methode(parameter1: String, parameter2: Boolean): Unit

Der Compiler leitet den Typ einer Variable aus dem Kontext ab (Typinferenz). Die beiden Zeilen

var x = "Ein Text"

und

var x: String = "Ein Text"

sind somit gleichwertig.

Klassen- und Methodennamen können einen großen Umfang von Zeichen und Symbolen nutzen. Es sind z. B. Bezeichner wie +, *, ::, \\ oder isEmpty_? erlaubt.

Methodenaufrufe mit keinem oder einem Parameter können unter Auslassung des Punktes und der öffnenden und schließenden runden Klammern notiert werden (Ă€hnlich wie in Smalltalk oder Objective-C):

5.0 + 2.0
"Test" startsWith "T"
List(1,2,3) isEmpty

entspricht

5.0.+(2.0)
"Test".startsWith("T")
List(1, 2, 3).isEmpty

Mit Scala ist es außerdem möglich, den Quelltext im Vergleich zu Java in vielen FĂ€llen kompakter zu schreiben, zum Beispiel auf Grund von Typinferenz, for comprehensions oder anonymen Funktionen.

Operatoren

[Bearbeiten | Quelltext bearbeiten]

FĂŒr PrĂ€fix-Operatoren gibt es eine fest vorgegebene Menge, nĂ€mlich +,-,~ und !. Der Ausdruck -x bedeutet das gleiche wie x.unary_-

Postfix-Operator-AusdrĂŒcke sind ebenfalls möglich. Hier gibt es keine EinschrĂ€nkungen an den Operator, und das Übersetzungsergebnis ist ein Aufruf der (parameterlosen) Methode auf dem Operanden.

Bei Infix-Operatoren entscheidet das erste Zeichen des Operatornamens ĂŒber PrĂ€zedenz und AssoziativitĂ€t, das den aus der Mathematik ĂŒblichen Konventionen folgt. Das Codefragment

1 + z * x

wird ĂŒbersetzt zu

(1).+(z.*(x))

Auf dem Objekt 1 wird die Methode + aufgerufen und dabei der Parameter z.*(x), also das Ergebnis eines weiteren Methodenaufrufes, ĂŒbergeben.

Endet der Methodenname eines Infixoperators mit einem Doppelpunkt, so vertauscht sich die Reihenfolge von EmpfÀnger und Parameter und der Operator ist rechtsassoziativ:

a :: b

wird ĂŒbersetzt zu

b.::(a)

Schleifen

[Bearbeiten | Quelltext bearbeiten]

For-Schleifen wurden zu sogenannten for comprehensions soweit generalisiert, dass sie nicht nur mehrere verschachtelte Schleifen zusammenfassen, sondern analog zu Haskells Do-Notation beliebige Monaden nutzen können.

Dieser Code gibt beispielsweise 27 Zeilen fĂŒr jeden Wert von a, b und c aus.

for
    a <- List(1, 2, 3)
    b <- List(2, 3, 4)
    c <- List(5, 6, 7)
do println("a=" + a + ", b=" + b + ", c=" + c)

Eine for comprehension kann auch genutzt werden, um neue Werte zu berechnen, Àhnlich wie mit den von Haskell bekannten List Comprehensions. Dieser Code weist combinations eine Liste von vier Paaren zu, nÀmlich (1,3), (1,4), (2,3) und (2,4):

val combinations = for
    a <- List(1, 2)
    b <- List(3, 4)
yield (a, b)

Versionen

[Bearbeiten | Quelltext bearbeiten]

Scala 2.8

[Bearbeiten | Quelltext bearbeiten]

Wesentliche Neuerungen im Release 2.8[19] sind:

  • Überarbeitung der Collection-Library (scala.collection)[20]
  • Überarbeitung der Array-Implementierung[21]
  • benannte Argumente und Defaultwerte fĂŒr Argumente[22]
  • Delimited Continuations
  • Erweiterungen fĂŒr Aktoren-NebenlĂ€ufigkeit
  • Package-Objekte, die Methoden und Werte fĂŒr ein Package zur VerfĂŒgung stellen

Scala 2.9

[Bearbeiten | Quelltext bearbeiten]

Wesentliche Neuerung der Version 2.9 ist die Erweiterung der Collection-Bibliothek um Methoden und Klassen, die Operationen parallel ausfĂŒhren können (scala.collection.parallel).[23] Daneben gibt es zahlreiche weitere Verbesserungen:

  • Verbesserungen an der interaktiven Konsole (REPL[24] genannt), die nun u. a. schneller startet, mehr TastenkĂŒrzel und bessere Tastaturnavigation beherrscht und Klassen dekompilieren sowie Typen, Ausnahmebedingungen (Exceptions) und verfĂŒgbare implizite Konversionen anzeigen kann.
  • Erweiterung von scala.sys um Möglichkeiten, Anweisungen auf der Shell des Betriebssystems auszufĂŒhren.
  • Entfernung einiger als veraltet (deprecated) markierter Klassen und Methoden, wie z. B. in scala.Enumeration und deutlichere Markierung bereits veralteter aber noch nicht entfernter FunktionalitĂ€t, wie z. B. case-Klassen, die von anderen case-Klassen erben oder der Datenbank-Schnittstelle scala.dbc.

Scala 2.10

[Bearbeiten | Quelltext bearbeiten]

Wesentliche Neuerungen der Version 2.10.0[25]:

  • neue Implementierung fĂŒr Pattern Matching
  • Akka-Aktoren als Standardimplementierung
  • Value- und Implicit-Klassen
  • String Interpolation
  • Reflection (experimentell)
  • Makros (experimentell)

Scala 2.11

[Bearbeiten | Quelltext bearbeiten]

Die Version 2.11.0 wurde am 17. April 2014 veröffentlicht und ist gegenĂŒber den VorgĂ€ngern stĂ€rker modularisiert, wodurch die Kern-Standardbibliothek kleiner wird. Zudem wurden Detailverbesserungen im Bereich der Geschwindigkeit gemacht und die nach wie vor experimentellen Bereiche von Makros und Reflection verbessert.[26]

Scala 2.12

[Bearbeiten | Quelltext bearbeiten]

Die Version 2.12.0 wurde am 3. November 2016 veröffentlicht.[27]

Scala 3.0

[Bearbeiten | Quelltext bearbeiten]

Die Version 3.0.0 wurde am 14. Mai 2021 veröffentlicht. Nennenswerte Änderungen umfassen:[28]

  • ein neues System zur Metaprogrammierung auf Basis von Quotes, Splices und dem SchlĂŒsselwort inline. Dies funktioniert sowohl zur Compilezeit (Macros) wie auch zur Laufzeit
  • eine neue einrĂŒckungsbasierte Syntax als Alternative zu geschweiften Klammern
  • das SchlĂŒsselwort enum zur Deklaration algebraischer Datentypen
  • Konstruktorparameter fĂŒr Trait-Typen
  • extension methods
  • Opake Typaliase
  • Das SchlĂŒsselwort implicit wurde als veraltet markiert und durch die SchlĂŒsselwörter given, using, extension und die Typklasse Conversion ersetzt
  • Scala-2-Macros werden nicht mehr unterstĂŒtzt (diese waren in Scala 2 stets als experimentell markiert)

Bibliotheken und Frameworks

[Bearbeiten | Quelltext bearbeiten]

Beliebte Frameworks zur Entwicklung von Web-Applikationen sind Play und Lift. Daneben gibt es viele weitere, meist eher minimalistische Lösungen wie Finatra oder Scalatra. Frameworks aus der Java-Welt, wie Wicket oder Spring können ebenfalls genutzt werden.

Die Interaktion mit Datenbanken wird durch eine Vielzahl von Bibliotheken ermöglicht, darunter Slick, Squeryl und ScalikeJDBC. In Java populÀre AnsÀtze, wie die Nutzung von JPA oder JOOQ, sowie die direkte Verwendung von JDBC, sind ebenfalls möglich.

Zur nebenlĂ€ufigen Programmierung bietet Scalas Standardbibliothek eine Futures & Promises API.[29] Implementierungen des Aktormodells werden u. a. von Akka[30] und Scalaz[31] bereitgestellt. DarĂŒber hinaus können auch alle Möglichkeiten der Java-Standardbibliothek genutzt werden, z. B. Threads oder java.util.concurrent.*.

Scalaz enthĂ€lt außerdem viele weitere Konstrukte, welche die funktionale Programmierung in Scala erleichtern.

Scala.js ist ein Projekt, das Scala-Code zu JavaScript-Code kompilieren und Scala somit im Browser ausfĂŒhrbar machen kann.[3]

IDE- und WerkzeugunterstĂŒtzung

[Bearbeiten | Quelltext bearbeiten]

Neben dem Compiler scalac steht eine Read-Evaluate-Print-Loop[24] (REPL) namens scala zur VerfĂŒgung. FĂŒr die IDEs Eclipse[32], NetBeans[33] und IntelliJ[34] existieren Plugins.

FĂŒr den Erstellungsprozess unterstĂŒtzt Scala u. a. Ant und Maven, stellt aber auch ein eigenes Werkzeug, SBT zur VerfĂŒgung.[35]

Verwendung

[Bearbeiten | Quelltext bearbeiten]

Scala hat mittlerweile Anwendung in der Industrie gefunden. Die sozialen Netzwerke Twitter und LinkedIn haben ihre Nachrichten-Warteschlangen in Scala implementiert.[36][37]

Weitere Verwendung findet die Sprache etwa in Unternehmen wie Novell[38], Siemens, Sony oder ÉlectricitĂ© de France Trading.[39]

Namensherkunft

[Bearbeiten | Quelltext bearbeiten]

Der Name leitet sich von „scalable language“ ab und bringt zum Ausdruck, dass der sehr kompakt gehaltene Sprachkern die Möglichkeit bietet, hĂ€ufig verwendete Sprachelemente wie z. B. Operatoren oder zusĂ€tzliche Kontrollstrukturen in Benutzerklassen zu implementieren und dadurch den Sprachumfang zu erweitern und eigene domĂ€nenspezifische Sprachen (englisch domain-specific language, DSL) zu erstellen.

Beispiele

[Bearbeiten | Quelltext bearbeiten]

Ein Hello, World!-Programm in Scala:

@main def hello =
  println("Hello, world!")

Eine generische Implementierung des Quicksort-Algorithmus mit Context Bounds[40]:

import math.Ordering.Implicits.infixOrderingOps

def quickSort[A : Ordering](xs: List[A]): List[A] = xs match
  case Nil     => Nil
  case y :: ys =>
    val (l1, l2) = ys partition (_ <= y)
    quickSort(l1) ++ (y :: quickSort(l2))

Geschichte

[Bearbeiten | Quelltext bearbeiten]

Scala wird im Labor fĂŒr Programmiermethoden an der École polytechnique fĂ©dĂ©rale de Lausanne in der Schweiz unter der Leitung von Martin Odersky entwickelt.

Martin Odersky arbeitete unter Niklaus Wirth an Modula-2 und Oberon. Von 1995 an entwickelte er zusammen mit Philip Wadler die inzwischen aufgegebene Programmiersprache Pizza[41], die Java um Generics, Funktionszeiger und Pattern Matching erweiterte. SpĂ€ter konzentrierten sich Wadler und Odersky mit Generic Java[42] (GJ) auf Generics fĂŒr Java, dieses Projekt fĂŒhrte 2004 zur EinfĂŒhrung von Generics in Java.[43] Ab 1999 arbeitete Martin Odersky an der École polytechnique fĂ©dĂ©rale de Lausanne, wo er an der Verbindung funktionaler und objektorientierter Programmierung forschte und die minimalistische Hybridsprache Funnel[44] entwickelte. Hier begann er 2001 mit der Entwicklung von Scala, die im Gegensatz zu Funnel nicht rein akademischem Interesse dienen sollte, sondern als vollwertige Sprache fĂŒr reale Anwendungen ausgelegt war. Im FrĂŒhjahr 2004 wurde Scala fĂŒr die Java-Plattform veröffentlicht, im Juni 2004 fĂŒr das .Net-Framework.

Seit Anfang 2011 wird die Weiterentwicklung der Sprache vom European Research Council finanziell gefördert. Damit sollen insbesondere die Möglichkeiten der parallelen Programmierung ausgebaut werden.[45]

Am 12. Mai 2011 gab Martin Odersky den Start von Typesafe bekannt; ein Unternehmen, das sich dem kommerziellen Support von Scala im Allgemeinen sowie dem Middleware Framework Akka widmet. Zu den Beratern gehören James Gosling und Doug Lea.[46]

Literatur

[Bearbeiten | Quelltext bearbeiten]
  • Martin Odersky, Lex Spoon, Bill Venners: Programming in Scala. Computer Bookshops, 2008, ISBN 0-9815316-0-1 (englisch). 
  • Dean Wampler, Alex Payne: Programming Scala. O’Reilly, 2009, ISBN 978-0-596-15595-7, S. 448 (HTML-Version). 
  • Lothar Piepmeyer: Grundkurs funktionale Programmierung mit Scala. Hanser, 2010, ISBN 978-3-446-42092-2, S. 297. 
  • Oliver Braun: Scala: Objektfunktionale Programmierung. Hanser, 2010, ISBN 978-3-446-42399-2, S. 325. 
  • Friedrich Esser: Scala fĂŒr Umsteiger. Oldenbourg Verlag, 2011, ISBN 978-3-486-59693-9, S. 400. 
  • Heiko Seeberger: Durchstarten mit Scala. entwickler.press, 2011, ISBN 978-3-86802-064-9, S. 250. 
  • Thorsten Jolitz: Objekt-funktionale Programmierung am Beispiel von Scala. epubli, 2013, ISBN 978-3-8442-4515-8, S. 244. 

Weblinks

[Bearbeiten | Quelltext bearbeiten]
  • Scala Website
  • The Scala Language Specification (PDF; 1,3 MB)
  • Audiocast-Interviews mit Martin Odersky: Umfassende EinfĂŒhrung, Geschichte und Besprechung der Merkmale von Scala (Juli 2007) Neuerungen seit 2007, geplante Entwicklungen und Anwendungsbereiche von Scala (Februar 2011)
  • JavaSPEKTRUM, 2010, EinfĂŒhrung in Scala Teil 1 (PDF; 194 kB) Teil 2 (PDF; 170 kB) Teil 3 (PDF; 197 kB)
  • Deutsches Scala Tutorial fĂŒr Umsteiger imperativer Programmiersprachen
  • Interaktiver Onlineinterpreter zum Ausprobieren
  • Google vergleicht C++/Java/Go/Scala (PDF; 318 kB)

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. ↑ Release 3.7.4. 11. November 2025 (abgerufen am 15. November 2025).
  2. ↑ a b c d www.artima.com.
  3. ↑ a b Scala.js. Abgerufen am 24. April 2019 (englisch). 
  4. ↑ Scala Native. Abgerufen am 24. April 2019 (englisch). 
  5. ↑ www.scala-lang.org. (abgerufen am 4. Juli 2019).
  6. ↑ Englischsprachige Vorstellung von Scala auf deren offizieller Internetseite
  7. ↑ Traits und Mixin Class Composition (englische ErlĂ€uterung auf der Scala-Internetseite)
  8. ↑ Funktion höherer Ordnung (englische ErlĂ€uterung auf der Scala-Internetseite)
  9. ↑ Extractor Objects (englische ErlĂ€uterung auf der Scala-Internetseite)
  10. ↑ Case Classes (englische ErlĂ€uterung auf der Scala-Internetseite)
  11. ↑ Abstrakte Typen (englische ErlĂ€uterung auf der Scala-Internetseite)
  12. ↑ RĂŒckgabetyp (englische ErlĂ€uterung auf der Scala-Internetseite)
  13. ↑ Release Scala 2.13.0 · scala/scala. Abgerufen am 12. Mai 2021 (englisch). 
  14. ↑ Dropped: XML Literals. Abgerufen am 12. Mai 2021. 
  15. ↑ Type classes (PDF)
  16. ↑ Java-Sprach-Spezifikation, Version 3, §15.18.1, String Concatenation Operator + (Memento vom 14. MĂ€rz 2012 im Internet Archive)
  17. ↑ §5.1.2, Widening Primitive Conversion (Memento vom 29. MĂ€rz 2012 im Internet Archive) in der Spezifikation der Java-Sprache
  18. ↑ The Scala Actors Migration Guide. Archiviert vom Original (nicht mehr online verfĂŒgbar) am 5. Dezember 2013; abgerufen am 3. Dezember 2013 (englisch). 
  19. ↑ Scala 2.8.0 final | The Scala Programming Language. In: www.scala-lang.org. Abgerufen im 1. Januar 1 
  20. ↑ New Collection Classes | The Scala Programming Language. In: www.scala-lang.org. Abgerufen im 1. Januar 1 
  21. ↑ Scala 2.8 Arrays | The Scala Programming Language. In: www.scala-lang.org. Abgerufen im 1. Januar 1 
  22. ↑ Named and Default Arguments | The Scala Programming Language. In: www.scala-lang.org. Abgerufen im 1. Januar 1 
  23. ↑ Scala 2.9.0 final | The Scala Programming Language. In: www.scala-lang.org. Abgerufen im 1. Januar 1 
  24. ↑ a b Read–eval–print loop in der englischsprachigen Wikipedia
  25. ↑ Changelog. In: www.scala-lang.org. Abgerufen im 1. Januar 1 
  26. ↑ Scala 2.11.0 final release!
  27. ↑ Scala 2.12.0 is now available! In: www.scala-lang.org. Abgerufen im 1. Januar 1 
  28. ↑ New in Scala 3. Abgerufen am 21. Mai 2021. 
  29. ↑ Futures and Promises | Scala Documentation. In: docs.scala-lang.org. Abgerufen im 1. Januar 1 
  30. ↑ akka.io
  31. ↑ code.google.com
  32. ↑ Scala IDE for Eclipse. In: scala-ide.org. Abgerufen im 1. Januar 1 
  33. ↑ Scala – NetBeans Wiki. In: wiki.netbeans.org. Abgerufen im 1. Januar 1 
  34. ↑ plugins.intellij.net
  35. ↑ github.com/sbt/sbt/
  36. ↑ Twitter on Scala. In: www.artima.com. Abgerufen im 1. Januar 1 
  37. ↑ Index of node/138/159. In: days2010.scala-lang.org. Abgerufen im 1. Januar 1 
  38. ↑ Novell Vibe
  39. ↑ scala-lang.org
  40. ↑ Context Bounds (englische ErlĂ€uterung auf der Scala-Internetseite)
  41. ↑ https://www.artima.com/articles/the-origins-of-scala
  42. ↑ Generic Java in der englischsprachigen Wikipedia
  43. ↑ Generics in Java
  44. ↑ Functional Nets. In: lampwww.epfl.ch. Abgerufen im 1. Januar 1 
  45. ↑ EU fördert Open-Source-Sprache Scala. Im heise newsticker, 15. Januar 2011, abgerufen am 23. Februar 2011
  46. ↑ Lightbend Inc: About Lightbend | @lightbend. In: Lightbend. Abgerufen im 1. Januar 1 
Normdaten (Sachbegriff): GND: 7658965-1 (GND Explorer, lobid, OGND, AKS) | LCCN: sh2010013203
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Scala_(Programmiersprache)&oldid=259585854“
Kategorien:
  • Programmiersprache
  • Funktionale Programmiersprache
  • Objektorientierte Programmiersprache
  • Programmiersprache fĂŒr die Java Virtual Machine
Versteckte Kategorie:
  • Wikipedia:Vorlagenfehler/Vorlage:Cite web/temporĂ€r

  • indonesia
  • Polski
  • Ű§Ù„ŰčŰ±ŰšÙŠŰ©
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • Ù…Ű”Ű±Ù‰
  • Nederlands
  • æ—„æœŹèȘž
  • PortuguĂȘs
  • Sinugboanong Binisaya
  • Svenska
  • ĐŁĐșŃ€Đ°Ń—ĐœŃŃŒĐșа
  • Tiáșżng Việt
  • Winaray
  • äž­æ–‡
  • РуссĐșĐžĐč
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id