www.wikidata.de-de.nina.az
Scala ist eine funktionale und objektorientierte Programmiersprache Scalaobjektorientierte und funktionale SpracheBasisdatenParadigmen objektorientiert funktional imperativErscheinungsjahr 20 Januar 2004Designer Martin OderskyEntwickler Martin Odersky Ecole polytechnique federale de LausanneAktuelle Version 2 13 12 1 11 September 2023 Typisierung statisch typisiertBeeinflusst von Meta Language 2 Java 2 Erlang 2 Haskell 2 Smalltalk Standard ML Objective CAML Common Lisp Eiffel Oz Pizza SchemeBeeinflusste KotlinBetriebssystem plattformunabhangig JVM JavaScript 3 LLVM 4 experimentell Lizenz BSD Lizenz Apache Lizenz Version 2 0 5 www scala lang org Inhaltsverzeichnis 1 Konzepte 1 1 Integration mit Java 1 2 Objektorientierung 1 3 Funktionale Sprache 1 3 1 Pattern Matching 1 3 2 Closures 1 4 Typsystem 1 4 1 Kovarianz und Kontravarianz 1 4 2 Typinferenz 1 5 Auswertungsstrategie 1 6 XML 1 7 Implicits 1 8 Nebenlaufigkeit 2 Syntax 2 1 Operatoren 2 2 Schleifen 3 Versionen 3 1 Scala 2 8 3 2 Scala 2 9 3 3 Scala 2 10 3 4 Scala 2 11 3 5 Scala 2 12 3 6 Scala 3 0 4 Bibliotheken und Frameworks 5 IDE und Werkzeugunterstutzung 6 Verwendung 7 Namensherkunft 8 Beispiele 9 Geschichte 10 Literatur 11 Weblinks 12 EinzelnachweiseKonzepte BearbeitenIntegration mit Java Bearbeiten Scala Programme konnen Java Archive umgangssprachlich JAR Datei ansprechen und Java Programme konnen Scala Dateien ansprechen 6 Es konnen also alle bestehenden Java Bibliotheken und Frameworks in Scala Projekte eingebunden und dort genutzt werden Umgekehrt ist das zwar prinzipiell moglich in der Praxis aber nicht immer problemlos Ahnliches gilt fur die meisten Werkzeuge Entwicklungsumgebungen wie Eclipse NetBeans oder IntelliJ unterstutzen Scala ebenfalls Objektorientierung Bearbeiten Scala ist anders als Java eine rein objektorientierte Programmiersprache Jeder Wert ist ein Objekt Das gilt auch fur primitive Datentypen ohne dass es zu Performance Einbussen kommt denn der vom Compiler erzeugte Bytecode verwendet primitive Datentypen Interfaces werden uber den Mechanismus der Traits implementiert Traits bestehen nicht nur aus Definitionen sie konnen bereits konkrete Implementierungen von Methoden enthalten Klassen konnen einen oder mehrere Traits erweitern Schlusselwort extends 7 Dabei handelt es sich nicht um Mehrfachvererbung sondern um einen Mixin Mechanismus Uber das Schlusselwort 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 Hauptartikel Funktionale Programmierung Funktionen sind First Class Objekte Sie konnen 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 Parameterubergabe Methoden sind selbst aber keine First Class Objekte konnen aber jederzeit in Funktionen umgewandelt werden Auch Funktionen hoherer Ordnung 8 sind in Scala realisiert wodurch beispielsweise Currying ermoglicht wird Pattern Matching Bearbeiten Ein wichtiger Aspekt zur Unterstutzung 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 konnen muss es fur 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 binaren 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 gt i key case Branch i if i key gt true case Branch i left if i gt key gt contains left key case Branch i right gt contains right key Beispielaufruf val sorted Tree Branch 4 Leaf 2 Branch 7 Leaf 6 Leaf 8 println s contains sorted 4 gt contains sorted 4 println s contains sorted 5 gt contains sorted 5 println s contains sorted 6 gt contains sorted 6 Ausgabe contains sorted 4 gt true contains sorted 5 gt false contains sorted 6 gt true Closures 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 gultig sind Dadurch werden aus open terms die namensgebenden closed terms Falls sich bei mehrfacher Verwendung der Funktion der Wert einer Variablen des Kontextes gegenuber einem fruheren Auswertungszeitpunkt andert kann sich auch der Ruckgabewert und das Verhalten der Funktion andern Typsystem Bearbeiten Scala ist statisch typisiert Generische Klassen verwenden Typen die zum Entwicklungszeitpunkt noch nicht festgelegt sind z B List T Oberklassen konnen abstrakte Typen 11 vorgeben die von deren Unterklassen in Form konkreter Typen spezifiziert werden mussen Gleiches gilt fur Variablen var und val sowie Methoden Kovarianz und Kontravarianz Bearbeiten Hauptartikel Kovarianz und Kontravarianz Typparameter einer generischen Klasse konnen 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 uberhaupt 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 durfen beispielsweise nicht als Typ von Methodenargumenten verwendet werden kontravariante nicht als Ruckgabetyp 12 Typinferenz Bearbeiten Typinferenz ist die Fahigkeit des Compilers den Typ eines Ausdrucks aus dem Kontext herzuleiten welche unter Syntax beispielhaft dargestellt ist Auswertungsstrategie Bearbeiten Funktionale Ausdrucke werden in Scala strikt ausgewertet Allerdings kann durch das Schlusselwort lazy die verzogerte Auswertung Lazy Evaluation von einzelnen Ausdrucken spezifiziert werden Auch die Collection Klassen unterstutzen mit den Methoden view und force die Moglichkeit der verzogerten Auswertung Im Gegensatz hierzu werden in Haskell die Programme standardmassig lazy ausgewertet und es existieren Strictness Annotationen XML Bearbeiten Scala 2 unterstutzt XML mittels Syntax XML Literale und Standardbibliothek Mit Version 2 13 wurde die XML Unterstutzung aus der Standardbibliothek entfernt und in das eigenstandige Projekt scala xml ausgelagert 13 Mit Scala 3 wurde auch die Unterstutzung fur XML Literale deprecated und wird somit kunftig entfernt 14 In der scala xml Bibliothek sind grundlegende XML Operationen und Datentypen verfugbar XML Konstruktoren Serialisierung und Deserialisierung XPath ahnliche Extraktion von Elementen und Attributen val liste lt einkaufsliste gt lt artikel gt lt name gt Brot lt name gt lt kosten gt 3 50 lt kosten gt lt artikel gt lt artikel gt lt name gt Apfel lt name gt lt kosten gt 0 29 lt kosten gt lt artikel gt lt artikel gt lt name gt Eier lt name gt lt kosten gt 1 19 lt kosten gt lt artikel gt lt einkaufsliste gt val gesamtkosten liste kosten map text toDouble sum Ergebnis 4 98 Implicits Bearbeiten Methoden konnen 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 ubergeben Hiermit ist es moglich die aus Haskell bekannten type classes als Entwurfsmuster nachzubilden 15 Scalaz eine Library zur pur funktionalen Programmierung in Scala setzt Typklassen weitraumig 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 Zusammenfugen von Zeichenketten wie 42 etwas Text oder die Konvertierung von Zahltypen mit kleinerem Wertebereich zu Zahltypen mit grosserem Wertebereich in Java String concatenation operator 16 bzw widening primitive conversions 17 genannt Nebenlaufigkeit Bearbeiten Hauptartikel Nebenlaufigkeit Wahrend Scala Threads durch die Java Klassenbibliothek unterstutzt 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 ursprungliche Aktoren Implementierung nicht mehr Bestandteil der Standardbibliothek Ersetzt wird sie durch die Akka Implementierung ab der Version 2 10 verfugbar 18 Zusatzlich implementiert die Standard Library von Scala Futures und parallele Collections Syntax BearbeitenDie Syntax der Sprache ist an Java und ML angelehnt Von Java wurde vor allem eine Reihe von Schlusselworten sowie die Blocksyntax ubernommen von ML die Syntax fur Typannotationen und Deklarationen Im Vergleich zur Java Syntax kann in den meisten Fallen das Semikolon am Ende einer Zeile entfallen Die Syntax zur Typdefinition von Variablen und Ruckgabewerten 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 Schlusselworter 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 konnen einen grossen Umfang von Zeichen und Symbolen nutzen Es sind z B Bezeichner wie oder isEmpty erlaubt Methodenaufrufe mit keinem oder einem Parameter konnen unter Auslassung des Punktes und der offnenden und schliessenden runden Klammern notiert werden ahnlich 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 ausserdem moglich den Quelltext im Vergleich zu Java in vielen Fallen kompakter zu schreiben zum Beispiel auf Grund von Typinferenz for comprehensions oder anonymen Funktionen Operatoren Bearbeiten Fur Prafix Operatoren gibt es eine fest vorgegebene Menge namlich und Der Ausdruck x bedeutet das gleiche wie x unary Postfix Operator Ausdrucke sind ebenfalls moglich Hier gibt es keine Einschrankungen an den Operator und das Ubersetzungsergebnis ist ein Aufruf der parameterlosen Methode auf dem Operanden Bei Infix Operatoren entscheidet das erste Zeichen des Operatornamens uber Prazedenz und Assoziativitat das den aus der Mathematik ublichen Konventionen folgt Das Codefragment 1 z x wird ubersetzt zu 1 z x Auf dem Objekt 1 wird die Methode aufgerufen und dabei der Parameter z x also das Ergebnis eines weiteren Methodenaufrufes ubergeben Endet der Methodenname eines Infixoperators mit einem Doppelpunkt so vertauscht sich die Reihenfolge von Empfanger und Parameter und der Operator ist rechtsassoziativ a b wird ubersetzt zu b a Schleifen 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 konnen Dieser Code gibt beispielsweise 27 Zeilen fur jeden Wert von a b und c aus for a lt List 1 2 3 b lt List 2 3 4 c lt List 5 6 7 do println a a b b c c Eine for comprehension kann auch genutzt werden um neue Werte zu berechnen ahnlich wie mit den von Haskell bekannten List Comprehensions Dieser Code weist combinations eine Liste von vier Paaren zu namlich 1 3 1 4 2 3 und 2 4 val combinations for a lt List 1 2 b lt List 3 4 yield a b Versionen BearbeitenScala 2 8 Bearbeiten Wesentliche Neuerungen im Release 2 8 19 sind Uberarbeitung der Collection Library scala collection 20 Uberarbeitung der Array Implementierung 21 benannte Argumente und Defaultwerte fur Argumente 22 Delimited Continuations Erweiterungen fur Aktoren Nebenlaufigkeit Package Objekte die Methoden und Werte fur ein Package zur Verfugung stellenScala 2 9 Bearbeiten Wesentliche Neuerung der Version 2 9 ist die Erweiterung der Collection Bibliothek um Methoden und Klassen die Operationen parallel ausfuhren konnen 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 Tastenkurzel und bessere Tastaturnavigation beherrscht und Klassen dekompilieren sowie Typen Ausnahmebedingungen Exceptions und verfugbare implizite Konversionen anzeigen kann Erweiterung von scala sys um Moglichkeiten Anweisungen auf der Shell des Betriebssystems auszufuhren Entfernung einiger als veraltet deprecated markierter Klassen und Methoden wie z B in scala Enumeration und deutlichere Markierung bereits veralteter aber noch nicht entfernter Funktionalitat wie z B case Klassen die von anderen case Klassen erben oder der Datenbank Schnittstelle scala dbc Scala 2 10 Bearbeiten Wesentliche Neuerungen der Version 2 10 0 25 neue Implementierung fur Pattern Matching Akka Aktoren als Standardimplementierung Value und Implicit Klassen String Interpolation Reflection experimentell Makros experimentell Scala 2 11 Bearbeiten Die Version 2 11 0 wurde am 17 April 2014 veroffentlicht und ist gegenuber den Vorgangern starker 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 Die Version 2 12 0 wurde am 3 November 2016 veroffentlicht 27 Scala 3 0 Bearbeiten Die Version 3 0 0 wurde am 14 Mai 2021 veroffentlicht Nennenswerte Anderungen umfassen 28 ein neues System zur Metaprogrammierung auf Basis von Quotes Splices und dem Schlusselwort inline Dies funktioniert sowohl zur Compilezeit Macros wie auch zur Laufzeit eine neue einruckungsbasierte Syntax als Alternative zu geschweiften Klammern das Schlusselwort enum zur Deklaration algebraischer Datentypen Konstruktorparameter fur Trait Typen extension methods Opake Typaliase Das Schlusselwort implicit wurde als veraltet markiert und durch die Schlusselworter given using extension und die Typklasse Conversion ersetzt Scala 2 Macros werden nicht mehr unterstutzt diese waren in Scala 2 stets als experimentell markiert Bibliotheken und Frameworks BearbeitenBeliebte Frameworks zur Entwicklung von Web Applikationen sind Play und Lift Daneben gibt es viele weitere meist eher minimalistische Losungen wie Finatra oder Scalatra Frameworks aus der Java Welt wie Wicket oder Spring konnen ebenfalls genutzt werden Die Interaktion mit Datenbanken wird durch eine Vielzahl von Bibliotheken ermoglicht darunter Slick Squeryl und ScalikeJDBC In Java populare Ansatze wie die Nutzung von JPA oder JOOQ sowie die direkte Verwendung von JDBC sind ebenfalls moglich Zur nebenlaufigen Programmierung bietet Scalas Standardbibliothek eine Futures amp Promises API 29 Implementierungen des Aktormodells werden u a von Akka 30 und Scalaz 31 bereitgestellt Daruber hinaus konnen auch alle Moglichkeiten der Java Standardbibliothek genutzt werden z B Threads oder java util concurrent Scalaz enthalt ausserdem 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 ausfuhrbar machen kann 3 IDE und Werkzeugunterstutzung BearbeitenNeben dem Compiler scalac steht eine Read Evaluate Print Loop 24 REPL namens scala zur Verfugung Fur die IDEs Eclipse 32 NetBeans 33 und IntelliJ 34 existieren Plugins Fur den Erstellungsprozess unterstutzt Scala u a Ant und Maven stellt aber auch ein eigenes Werkzeug SBT zur Verfugung 35 Verwendung BearbeitenScala 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 Electricite de France Trading 39 Namensherkunft BearbeitenDer Name leitet sich von scalable language ab und bringt zum Ausdruck dass der sehr kompakt gehaltene Sprachkern die Moglichkeit bietet haufig verwendete Sprachelemente wie z B Operatoren oder zusatzliche Kontrollstrukturen in Benutzerklassen zu implementieren und dadurch den Sprachumfang zu erweitern und eigene domanenspezifische Sprachen englisch domain specific language DSL zu erstellen Beispiele BearbeitenEin 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 gt Nil case y ys gt val l1 l2 ys partition lt y quickSort l1 y quickSort l2 Geschichte BearbeitenScala wird im Labor fur Programmiermethoden an der Ecole polytechnique federale 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 Spater konzentrierten sich Wadler und Odersky mit Generic Java 42 GJ auf Generics fur Java dieses Projekt fuhrte 2004 zur Einfuhrung von Generics in Java 43 Ab 1999 arbeitete Martin Odersky an der Ecole polytechnique federale 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 fur reale Anwendungen ausgelegt war Im Fruhjahr 2004 wurde Scala fur die Java Plattform veroffentlicht im Juni 2004 fur das Net Framework Seit Anfang 2011 wird die Weiterentwicklung der Sprache vom European Research Council finanziell gefordert Damit sollen insbesondere die Moglichkeiten 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 gehoren James Gosling und Doug Lea 46 Literatur BearbeitenMartin 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 fur 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 BearbeitenScala Website The Scala Language Specification PDF 1 3 MB Audiocast Interviews mit Martin Odersky Umfassende Einfuhrung Geschichte und Besprechung der Merkmale von Scala Juli 2007 Neuerungen seit 2007 geplante Entwicklungen und Anwendungsbereiche von Scala Februar 2011 JavaSPEKTRUM 2010 Einfuhrung in Scala Teil 1 PDF 194 kB Teil 2 PDF 170 kB Teil 3 PDF 197 kB Deutsches Scala Tutorial fur Umsteiger imperativer Programmiersprachen Interaktiver Onlineinterpreter zum Ausprobieren Google vergleicht C Java Go Scala PDF 318 kB Einzelnachweise Bearbeiten Release 2 13 12 11 September 2023 abgerufen am 19 September 2023 a b c d www artima com a b Scala js Abgerufen am 24 April 2019 englisch Scala Native Abgerufen am 24 April 2019 englisch www scala lang org abgerufen am 4 Juli 2019 Englischsprachige Vorstellung von Scala auf deren offizieller Internetseite Traits und Mixin Class Composition englische Erlauterung auf der Scala Internetseite Funktion hoherer Ordnung englische Erlauterung auf der Scala Internetseite Extractor Objects englische Erlauterung auf der Scala Internetseite Case Classes englische Erlauterung auf der Scala Internetseite Abstrakte Typen englische Erlauterung auf der Scala Internetseite Ruckgabetyp englische Erlauterung auf der Scala Internetseite Release Scala 2 13 0 scala scala Abgerufen am 12 Mai 2021 englisch Dropped XML Literals Abgerufen am 12 Mai 2021 Type classes PDF Java Sprach Spezifikation Version 3 15 18 1 String Concatenation Operator Memento vom 14 Marz 2012 im Internet Archive 5 1 2 Widening Primitive Conversion Memento vom 29 Marz 2012 im Internet Archive in der Spezifikation der Java Sprache The Scala Actors Migration Guide Nicht mehr online verfugbar Archiviert vom Original am 5 Dezember 2013 abgerufen am 3 Dezember 2013 englisch nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot docs scala lang org Scala 2 8 0 final The Scala Programming Language In www scala lang org Abgerufen im 1 Januar 1 New Collection Classes The Scala Programming Language In www scala lang org Abgerufen im 1 Januar 1 Scala 2 8 Arrays The Scala Programming Language In www scala lang org Abgerufen im 1 Januar 1 Named and Default Arguments The Scala Programming Language In www scala lang org Abgerufen im 1 Januar 1 Scala 2 9 0 final The Scala Programming Language In www scala lang org Abgerufen im 1 Januar 1 a b Read eval print loop in der englischsprachigen Wikipedia Changelog In www scala lang org Abgerufen im 1 Januar 1 Scala 2 11 0 final release Scala 2 12 0 is now available In www scala lang org Abgerufen im 1 Januar 1 New in Scala 3 Abgerufen am 21 Mai 2021 Futures and Promises Scala Documentation In docs scala lang org Abgerufen im 1 Januar 1 akka io code google com Scala IDE for Eclipse In scala ide org Abgerufen im 1 Januar 1 Scala NetBeans Wiki In wiki netbeans org Abgerufen im 1 Januar 1 plugins intellij net github com sbt sbt Twitter on Scala In www artima com Abgerufen im 1 Januar 1 Index of node 138 159 In days2010 scala lang org Abgerufen im 1 Januar 1 Novell Vibe scala lang org Context Bounds englische Erlauterung auf der Scala Internetseite https www artima com articles the origins of scala Generic Java in der englischsprachigen Wikipedia Generics in Java Functional Nets In lampwww epfl ch Abgerufen im 1 Januar 1 EU fordert Open Source Sprache Scala Im heise newsticker 15 Januar 2011 abgerufen am 23 Februar 2011 Lightbend Inc About Lightbend lightbend In Lightbend Abgerufen im 1 Januar 1 Normdaten Sachbegriff GND 7658965 1 lobid OGND AKS LCCN sh2010013203 Abgerufen von https de wikipedia org w index php title Scala Programmiersprache amp oldid 238203788