Programmiersprache: Scala 3 biegt auf die Zielgerade ein
Einen Release Candidate wird es zwar erst 2021 geben, aber die Developer Preview von Scala 3 ist nun verfügbar.
![](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/3/0/2/4/6/6/5/skizze-0d7bef2ed4cd9da6.jpeg)
Die erste Developer Preview von Scala 3 gibt einen Vorgeschmack darauf, was Entwicklerinnen und Entwickler von der nächsten Hauptversion erwarten können. Unter dem Titel "Überqueren der Ziellinie" hat das Scala-Team einen Blogbeitrag veröffentlicht, der eine "Foto-Finish-Phase" ankündigt und zum Feedback zum Umgang mit den Neuerungen der Programmiersprache und dem Migrationsprozess von Scala-2-Projekten aufruft.
Scala 3 befindet sich seit nunmehr acht Jahren in Entwicklung, und ursprünglich war das endgültige Release und später der erste Release Candidate für Ende dieses Jahres geplant. Begonnen hatten die Arbeiten unter dem Codenamen Projekt Dotty, wobei das Akronym "DOT" für "Dependent Object Types" steht. Der Erfinder der Programmiersprache Martin Odersky hatte bereits in einem Interview mit heise Developer Anfang 2018 bestätigt, dass Dotty zu Scala 3 wird. Die offizielle Umstellung des Namens hat im Herbst mit der Vorbereitung zum ersten Milestone-Release begonnen.
Repository, Feedbackbögen und Migrationsleitfaden
Die Developer Preview ist offiziell als Scala 3.0.0-M3 verfügbar, und das GitHub-Repository läuft weiterhin unter dem Projektnamen Dotty. Der erste Release Candidate soll Ende Januar 2021 erscheinen, und das endgültige Release von Scala 3 ist nach den aktualisierten Plänen für Mitte 2021 vorgesehen.
(Bild: scala-lang.org)
Bis dahin können noch einer oder mehrere Meilensteine folgen. Das Scala-Team lädt Entwicklerinnen und Entwickler explizit dazu ein, Rückmeldungen zur Developer Preview zu geben, um die letzten Probleme zu beheben. Die Developer's Preview Survey soll drei bis fünf Minuten Zeit beanspruchen. Auf der Scala-Center-Seite findet sich ein Migrationsleitfaden, der beim Umstieg von Scala 2 helfen soll. Auch dazu bittet das Team zu Rückmeldungen und Verbesserungsvorschlägen.
Lesen Sie auch
Blick nach vorn: von Dotty zu Scala 3
Erklärtes Ziel ist, keine Änderungen mehr an der API vorzunehmen. Sollte es während der Feedbackphase bis Mitte Januar 2021 keine Meldungen über größere Probleme geben, soll Ende Januar Scala 3 RC1 erscheinen und dieselbe API wie der Milestone 3 besitzen. Wer sich an der Entwicklung von Scala 3 beteiligt, kann und sollte sich nach Wünschen des Scala-Teams im Contributors Forum einbringen.
Scala vereint funktionale und objektorientierte Programmierung
Scala blickt inzwischen auf eine fast zwanzigjährige Geschichte zurück. Martin Odersky begann mit den Arbeiten an der Programmiersprache im Jahr 2001 intern an der École Polytechnique Fédérale de Lausanne (EPFL). Im Frühjahr 2004 ist Scala für die Java-Plattform erschienen, und im Juni folgte eine Variante für .NET.
Scala ist sowohl funktional als auch objektorientiert. Außerdem ist die Programmiersprache stark typisiert und erweiterbar. Der funktionale Anteil drückt sich unter anderem darin aus, dass Funktionen vollwertige Sprachelemente sind, die sich in Variablen ablegen und als Parameter übergeben lassen. Hinsichtlich der objektorientierten Programmierung ist Scala "reiner" als Java: Alles ist ein Objekt, sodass sich beispielsweise auf ein einfaches Array oder eine Zahl eine Methode aufrufen lässt, womit Autoboxing beziehungsweise Unboxing entfallen.
Der Typ jeder Variable ist genau definiert, und Scala nutzt Type Inference, um aus der Initialisierung von Variablen den passenden Typ zu erkennen. Die Erweiterbarkeit ist zugleich Stärke als auch Hürde beim Einstieg in die Programmiersprache. So erlaubt sie das Schreiben individueller Libraries, deren Inhalte sich quasi identisch zu integrierten Sprach-Features verwenden lassen.
Scala 3: weniger ist mehr
Während Scala 2 bereits im Jahr 2006 erschienen war, ließ sich das Team mit der nun anstehenden Hauptversion deutlich mehr Zeit. Scala 3 zielt vor allem auf einfacheren Umgang mit der Sprache und saubereren Code. Das bedeutet zum Teil das Zusammenlegen von Sprachkonstrukten und das Beseitigen von Unstimmigkeiten.
Die inhaltlichen Neuerungen von Dotty beziehungsweise Scala 3 beschreibt ein Artikel auf heise Developer umfangreich. Nennenswert sind unter anderem die Anpassungen oder "Zügelung" der mächtigen Implicits. Hintergrund ist, dass manche das mächtige Sprachfeature zu häufig oder im falschen Kontext genutzt haben. So soll schon das neue Schlüsselwort given
statt implicit
die Intention klarer beschreiben. Im jüngsten Milestone ist dazu noch eine kleine Änderung eingeflossen, die das as
daraus ebenso entfernt wie aus Patterns. Für Letztere kehrt Scala damit zu der Syntax aus Version 2 zurück:
// given-Syntax vor M3
given intOrd as Ordering[Int]:
// given-Syntax ab M3
given intOrd: Ordering[Int] with
// Pattern-Syntax vor M3
case opt as Some(foo)
// Pattern-Syntax mit M3 (und in Scala 2)
case opt @ Some(foo)
Eine wichtige Ergänzung sind zudem Top-Level-Definitionen: Bisher durften Entwicklerinnen und Entwickler Konstrukte wie Typen, Methoden oder Typ-Aliases nur in Klassen, Traits oder Objekten definieren. Nun ist die Definition auch außerhalb direkt in einem Paket erlaubt. Daneben bietet Scala 3 unter anderem ein eigenes Sprachkonstrukt für Enums sowie Union Types und Intersection Types an.
Rückwärts und vorwärts kompatibel
Dabei wird Scala 3 im Kern dieselbe Sprache sein wie Version 2. Die neue Hauptversion ist binärkompatibel mit dem aktuellen Scala 2.13, das seit April verfügbar ist. Mit dem darin eingeführten Parameter -Ytasty-reader
lässt sich umgekehrt eine Vorwärtskompatibilität erreichen.
Die bidirektionale Kompatibilität soll mittelfristig bestehen bleiben, und in etwa zwei Jahren ist dann eine Version 3.T geplant, die keine Rückwärtskompatibilität zu Scala 2.13 mehr bietet. Dafür soll sie ein Redesign der Standard-Library mitbringen, die besser auf Scala 3 zugeschnitten ist.
Weitere Details zum Endspurt auf dem Weg zum Release Candidate von Scala 3 lassen sich ebenso dem Scala-Blog entnehmen wie die Anpassungen von Milestone 3.
(rme)