SP12/16: Scala 2.12 und Jahresrückblick
Manage episode 167349420 series 1206977
Wir suchen einen Scala-Entwickler
Willst Du Scala endlich auch beruflich einsetzen? Dann komm zu uns. Für unser Berliner Team bei der Beta System IAM Software AG suchen wir einen Scala-Entwickler bzw. eine Scala-Entwicklerin. In einem sechsköpfigen Scrum-Team entwickelst Du unsere neue Web-Basierte IAM-Suite, vollständig in Scala.
Auch als Quereinsteiger aus der Java-Welt bist Du herzlich willkommen.
Bewirb Dich jetzt (gib bei der Bewerbung mit an, dass Du über die Scala Profis auf die Stelle aufmerksam geworden bist).
Scala 2.12.0
Seit 3. November ist Scala 2.12 verfügbar!
Haupt-Features
Der Scala-Compiler wurde komplett überarbeitet um — wo möglich — die neuen Java 8 Features zu nutzen:
- Traits compilieren zu Interfaces mit Default-Methoden. Das verbessert die Binär-Kompatibilität und die Interoperabilität mit Java.
- Scala und Java 8 Interoperabilität für funktionalen Code wurde verbessert, da Methoden, die Funktionen übergeben bekommen nun aus beiden Sprachen mit Lambda-Ausdrücken aufgerufen werden können. Die
FunctionN
-Klassen in Scalas standard-Library sind nun als SAMs implementiert. Somit werden keine.class
-Dateien mehr für Lambdas generiert — stattdessen wirdinvokedynamic
genutzt. Dadurch reduziert sich die Größe der JAR-Dateien teils drastisch. Zum Beispiel hat sich das ScalaTest 3.0.0 JAR von 9,9 auf 6,7 MB reduziert.
Außerdem bietet das Release einen leistungsstarken neuen Optimierer.
Neue Sprach-Features
- Traits werden zu Interfaces compiliert
- Lambda-Syntax für SAM-Typen
- Java-8-Style Byte-Code für Lambdas
- Neue Abbildung und neuer Locking-Scope für lokale
lazy val
s - Bessere Typ-Inference für Lambda-Parameter und überschriebene
val
s in Scala.js - Überarbeiteter Look-&-Feel für ScalaDoc (siehe Scala-Standard-Library API-Doku als Beispiel)
- ScalaDoc kann benutzt werden um Java zu dokumentieren
- Verbesserung der REPL (Farben)
Verbesserungen der Standard-Library
Either
unterstützt jetztmap
,flatMap
,contains
,toOption
und weitere Funktionen.scala.concurrent.Future
wurde überarbeitet. Die Anpassungen werden in einer Blog-Post-Reihe von Viktor Klang beschrieben:- Überarbeitung des Java 8 compatibility module for Scala.
Fragen & Antworten
Wie sieht es mit der Kompatibilität zu Scala 2.11 aus?
2.11 und 2.12 sind Source-Code-kompatibel, wie gewohnt aber nicht binärkompatibel.
Sollte ich Scala 2.12 jetzt schon nutzen?
Die Liste der Libraries, die Scala 2.12 unterstützt wächst stetig. Sollten Deine eingesetzten Libraries bereits unterstützt werden steht einem Wechsel aus unserer Sicht nichts im Wege.
Was, wenn meine Kunden derzeit noch die JVM 7 einsetzen?
Oracle stellt bereits seit April 2015 keine Updates mehr für Java 7 bereit. Dementsprechend solltest Du Deinen Kunden dringend einen Wechsel auf Java 8 empfehlen womit der Weg für Scala 2.12 geebnet ist.
Wie sieht es mit Android aus?
Leider schlecht! Android arbeitet weiterhin auf Basis von Java 7 und wird den von Scala 2.12 benötigten Funktionsumfang auf absehbare Zeit auch nicht unterstützen. Wenn Du also Android-Anwendungen in Scala schreibst musst Du bei Scala 2.11 bleiben.
Wie geht es mit den alten Scala-Versionen weiter?
Das letzte Release für Scala 2.11 (2.11.9) wird für Mitte Dezember erwartet.
Links
SBT 0.13.13
SBT 0.13.13 ist seit dem 28. Oktober verfügbar, angekündigt als ›Technology Preview‹ für die Version 1.0.
In der Version 0.13.13 wurden verschiedene Funktionen wie z.B. die DSL aus der Version 0.12 (<<=
, <+=
, …) als deprecated markiert. Diese Funktionen wird es in der Version 1.0 nicht mehr geben.
Die für mich interessanteste Änderung ist das new
Kommando. Wenn man den Launcher der Version 0.13.13 verwendet (also nicht nur in project/build.properties
die Version auf 0.13.13 setzt) kann man über sbt new
ein neues Projekt erzeugen.
Giter8 lädt die Templates über ein beliebiges Git-Repository. Man kann damit leicht eigene Templates z.B. auf GitHub veröffentlichen. Zusätzlich ist es möglich eigene Resolver für Templates zu implementieren.
Links
Pull-Request: Abschaffung des 22 Parameter-Limits für Funktionen
Martin Odersky hat einen Pull-Request, der Funktionen mit mehr als 22 Parametern unterstützt. Realisiert wird das ganze, in dem Funktionen mit mehr Parametern intern auf einen Typ FunctionXXL
gemappt werden, der einen Array von Objekten annimmt.
Der Pull-Request befindet sich aktuell im Code-Review.
Links
Scala.js 0.6.13
Änderungen der Standard-Interpreter
Bisherige Standards:
- Rhino
- Node.js wenn
scalaJSUseRhino in Global := false
- PhantomJS wenn
scalaJSUseRhino in Global := false
undjsDependencies += RuntimeDOM
Neue Standards:
- Node.js
- Node.js + jsdom wenn
jsDependencies += RuntimeDOM
Node.js und jsdom müssen getrennt installiert werden.
Umgang mit CommonJS-Modulen
CommonJS-Module werden von Node.js und diversen Bundlern genutzt
Scala.js-Projekte können jetzt CommonJS-Module bereitstellen (scalaJSModuleKinde := ModuleKind.CommonJSModule
) wodurch Objekte und mit @JSExport
annotierte Klassen über das Modul angeboten werden.
Über @JSImport
Scaladoc können Module importiert werden. Das entspricht einem ECMAScript 2015 Import, wird von Scala aber in ein CommonJS require
umgewandelt.
Wichtig: @JSImport
ist nicht kompatibel mit jsDependencies
, statt dessen musst Du Deine JavaScript-Dependencies selbstständig pflegen (z.B. via npm).
Links
Unsere Highlights 2016
Svens Highlights
- Scala 2.12 released
- Dotty (SP002)
- Kotlin 1.0 (SP003)
- Gründung des Scala Centers (SP004)
- ScalaJS wird erwachsen (SP05/16)
Benjamins Highlights
- Scala 2.12 released
- Gründung des Scala Centers (SP004)
- Spielereien mit Macros (SP005)
- ScalaDays in Berlin (SP006)
- Umstellung auf SBT (SP05/16)
Unsere Wünsche für 2017
Svens Wünsche
- Breite Unterstützung von Scala 2.12
- Scala 3 auf Basis von Dotty mit schnellerem und zuverlässigerem Compiler
Benjamins Wünsche
- Scala 3 auf Basis von Dotty mit schnellerem und noch schnellerem Compiler
- SBT 1.0
- Umstellung auf Scala 2.12
- Ein neuer Kollege oder eine neue Kollegin
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
Kapitel
- Intro (00:00:00.000)
- Eine offene Scala-Stelle (00:01:30.371)
- Scala 2.12 (00:01:55.523)
- SBT 0.13.13 (00:27:36.899)
- Abschaffung des 22 Parameter-Limits für Funktionen (00:32:28.129)
- Scala.js 0.6.13 (00:35:41.528)
- Unsere Highlights in 2016 (00:39:11.629)
- Unsere Wünsche für 2017 (00:51:58.829)
- Outro (00:58:39.475)
Lizenz
Scala Profis von Benjamin Hagemeister & Sven Wiegand ist lizenziert unter einer Creative Commons Namensnennung — Keine Bearbeitungen 4.0 International Lizenz.
Über diese Lizenz hinausgehende Erlaubnisse kannst Du unter http://scalaprofis.de erhalten.
Titelsong basierend auf Wish You Were Here von THE.MADPIX.PROJECT lizensiert unter Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0).
Kapitel
1. Intro (00:00:00)
2. Eine offene Scala-Stelle (00:01:30)
3. Scala 2.12 (00:01:55)
4. SBT 0.13.13 (00:27:36)
5. Abschaffung des 22 Parameter-Limits für Funktionen (00:32:28)
6. Scala.js 0.6.13 (00:35:41)
7. Unsere Highlights in 2016 (00:39:11)
8. Unsere Wünsche für 2017 (00:51:58)
9. Outro (00:58:39)
15 Episoden