Dev News Daily ENDE

Scala 3.10.0 matcht Java-Records, aktiviert strikte Gleichheit in Mustern und nennt acht Brüche

Das Scala-Team hat am 12. Oktober Scala 3.10.0 veröffentlicht. Es ist ein Minor-Release der Scala-3-Linie, beginnt aber mit einem Abschnitt über inkompatible Änderungen – lesenswert, bevor ein Build die Compiler-Version anhebt.

Inkompatible Änderungen. Die Release Notes nennen acht. Implicits werden nicht mehr aus einem Companion-Objekt abgeleitet, das an der Verwendungsstelle nicht zugänglich ist. Constant Folding beim Inlining wurde erweitert. Der Compiler fängt keinen StackOverflowError mehr ab, sondern arbeitet mit einem „Fuel“-Budget. this ist in Top-Level-Definitionen verboten. Die impliziten runtime.Rich*-Konvertierungen auf primitiven Typen werden durch direkte Extension-Methoden ersetzt, und der Tupel-Zucker -> wird zur Inline-Methode. with als Typoperator ist jetzt ein Fehler. Und die Bytecode-Erzeugung nutzt das reguläre ASM statt des langjährigen projekteigenen Forks scala-asm.

Höhepunkte. Pattern Matching unterstützt jetzt Java-Records – wichtig für Codebasen, die Typen mit Java-Modulen teilen. String-Literale bekommen das Leerzeichen-Escape \s. Die REPL akzeptiert //> using dep-Direktiven, Abhängigkeiten lassen sich also wie in einem Scala-CLI-Skript in eine REPL-Sitzung holen. Die Distribution gibt es nun auch als .deb- und .rpm-Paket.

Scala 3.10.0 matcht Java-Records, aktiviert strikte Gleichheit in Mustern und nennt acht Brüche
Scala 3.10.0 matcht Java-Records, aktiviert strikte Gleichheit in Mustern und nennt acht Brüche — Dev News Daily

Sprachprozess. Ein Feature wird stabil: Mit SIP 71 ist strictEqualityPatternMatching standardmäßig aktiv, zusammen mit einem Abkündigungsmechanismus für -language-Flags. Drei SIPs gehen in die Vorschau: SIP 61 (Entfalten von Default-Argumenten für Binärkompatibilität), SIP 75 (gelockerte Lambda-Syntax) und SIP 68 (referenzierbare Package-Objekte). Zwei Pre-SIP-Ideen kommen als experimentell: Inline- und spezialisierte Traits sowie „Spec Strings“.

Scala CLI. Das mitgelieferte Scala CLI springt von 1.16.0 auf 1.17.1. Darunter: flexible Main-Methoden nach JEP 512 ab JDK 25 (JDK 21 mit --enable-preview), einzelne Dateien als Ressourcen und -d-Pfade auf .jar, die eine Bibliotheks-JAR erzeugen. Ein Detail kann Build-Skripte überraschen: Der Versionstag lts zeigt jetzt auf die Serie Scala 3.9 LTS; wer die ältere Linie halten will, muss 3.3.lts angeben.

Wer handeln sollte. Bibliotheken mit Cross-Kompilierung und Projekte, die die entfernten Rich*-Implicits oder with in Typposition nutzen, sollten zuerst gegen 3.10.0 testen. Teams mit dem LTS-Tag in Scala CLI sollten prüfen, welche Serie ihre Builds jetzt auflösen.

Quelle: Scala, Release Notes zu 3.10.0 — https://github.com/scala/scala3/releases/tag/3.10.0