SP12/16: Scala 2.12 und Jahresrückblick
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
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).
Paul
| #
Ja…hmm… meine Highlights 2016.
— Euer Podcast, ganz klar. 🙂 War auf jeden Fall erfreulich auf Leute aus dem Mittelstand zu treffen, die Scala produktiv einsetzen.
Ich schreibe Scala nur in kleinen Privatprojekten und habe von Scala-Ökosystem das diffuse Bild, dass es nur von scalaz-Aliens und internationalen Konzernen mit fetten Budgets verwendet wird.
Dass Lightbend die Sprache fast schon sektenartig bewirbt (muss man vielleicht sogar um das verkrustete Java-Enterprise aufzubrechen) macht das ganze auch nicht gemütlicher. Und dann kommt ihr und erzählt von ähnlichen Problemerlebnissen mit sbt wie ich site hatte. Plötzlich fühlt man sich nicht mehr allein.
— Endlich Zeit und Muße gefunden eine Scala-Anwendung im funktionalen Stil zu schreiben.
Wünsche für 2017
— Schneller Scala Compiler. Wird nie kommen. Aber man darf doch träumen.
— Ich verstehe endlich was Monoiden und Kleislis sind und finde heraus ob Monoiden wirklich als Monaden zur Kategorie der Endofunktoren gehören… danach haue ich in den Sack und lerne Clojure. So wie ich es eigentlich vor hatte. 🙂
— Java9 kommt. Pünktlich. Mit Graal und Truffle. Ruby, Scala und Java laufen somit konfliktfrei auf der JVM. Überall glückliche, produktive Menschen.
— Weltfrieden
Reply
Sven
| #
Vielen Dank für den sehr unterhaltsamen Kommentar. Insbesondere bei Punkt 2 in Deinen Wünschen musste ich herzhaft lachen — mit der Hälfte der Begriffe dort konnte ich ebenfalls nichts anfangen.
Ich glaube Dein Eindruck von der Scala-Community ist zu negativ. Natürlich gibt es da auch viele »Experten«, die in ihrer Wolke leben und denen ich nicht ganz folgen kann, bzw. die versuchen zu missionieren (aber machen das nicht letztlich Apple, Microsoft, Google, … auch? Scheinbar bekommt man ohne Extremaussagen heute keine Sichtbarkeit mehr — siehe aktuelle Wahlen in Amerika), aber wenn man sich z.B. mal auf den ScalaDays umgesehen hat, dann laufen da ganz viele normale Entwickler rum, die auch nicht wissen was Monoiden sind und sich einfach nur mit anderen austauschen wollen weil ihnen Scala Spaß macht. Insgesamt habe ich das Gefühl, dass die Community in den letzten Jahren deutlich größer und dadurch auch moderater geworden ist.
Bzgl. des schnellen Compilers: Ich muss sagen, dass ich in Verbindung mit SBT die Build-Zeiten selbst in einem umfangreichen Projekt inzwischen okay finde. Aber ich habe auch weiterhin Hoffnung, dass Dotty bei der Geschwindigkeit tatsächlich etwas zulegen kann. Es ist ein kompletter Rewrite des Compilers und vieles was im alten Compiler über die Jahre inkrementell hinzugekommen ist kann hier von Anfang an berücksichtigt werden. Hoffen wir, dass Dotty da nicht am second system effect (https://en.wikipedia.org/wiki/Second-system_effect) scheitert…
Reply
Paul
| #
Schön, dass ich für Erheiterung sorgen konnte. 🙂
Über Deine Anmerkung über meinen Community-Eindruck musste ich gerade so lange überlegen, dass die Zeit gereicht um zwei Tees zu trinken und noch einen Joghurt zu verspeisen.
Mir ist dann aufgefallen, dass ich die Scala-Community — von ein Paar Meetups abgesehen — nur online erlebe. Kann mir gut vorstellen, dass es zu einer Verzerrung führt.
Andererseits beneiden viele aus der Scala-Welt die Sprache Rust um seine Community (auf der anderen Seite ist das Gras immer grüner) und fragen sich wie sie das für Scala »nachzüchten« können.
Letztendlich wäre es schön, wenn sich weitere Leute zu Scala gesellen würden. Zusammen ist man weniger allein und so.
Compilerschnelligkeit: ich bin in meinen jungen Jahren von Pascal, PHP und Objective‑C verwöhnt worden und muss mir den Job jedesmal mit Kaffe »schön saufen« wenn der Tomcat startet und Spring sich den Context aufbaut. Und dabei arbeite ich mit dem Java Compiler, der ein Paar Phasen weniger, als sein Scala-Bruder hat.
Nein, nein, da bleibe ich pessimistisch — so kann und werde ich nicht enttäuscht. 😀
Im Übrigen glaube ich, dass EPFL euren Podcast lauscht und euch ärgern will — Scala 2.12.1 ist quasi am selben Tag im Netz gelandet wie der Podcast: https://groups.google.com/forum/#!msg/scala-internals/qPovSwWUscw/hdOh8TBgDAAJ
Reply
Benjamin Hagemeister
| #
›Monoiden und Kleislis‹ klingt nach einem guten Titel für eine Episode…
Wenn Du wirklich wissen willst ob Monoiden als Monaden zur Kategorie der Endofunktoren gehören (eigentlich offensichtlich, oder ;-)), dann findest Du hier den Beweise: http://w.pitula.me/2016/monad-proof/
Reply
Paul
| #
🙂
Danke für den Link, habe die Seite mal zu meinen Favoriten hinzugefügt. Es bestehen gute Chancen, dass ich sie in der Brückenzeit zwischen Weihnachten und Silvester erneut aufrufe… aber eigentlich habe ich mir fest vorgenommen das fammose rote Buch »Functional Programming in Scala« durchzuackern (keine Ahnung warum ich mir das Leben so schwer mache :)).
Und ich bin natürlich gespannt ob es eine »Monoiden und Kleislis« Episode geben wird. 😉 Bis dahin: friedliche Feiertage. Erholt euch gut.
Reply