SP12/17: Die große Jahresend-Show
Scala 2.12.4
Scala 2.12.4 wurde am 20. Oktober freigegeben.
Änderungen:
- Weitere 5–10% Verbesserung in den Compile-Time benchmarks gegenüber 2.12.3
- Java‑9–Unterstützung verbessert
Links
Reasonable Scala
Reasonable Scala ist ein neuer Scala-Compiler der von Eugene Burmako und seinem Team bei Twitter entwickelt wird.
Es handelt sich dabei nicht um einen Fork vom Lightbend Scala-Compiler, sondern um eine komplette Neu-Implementierung die nur ein Ziel hat: Möglichst schnell zu kompilieren. Die Idee besteht offenbar darin zu identifizieren wie die Performance verbessert werden kann, damit diese Erkenntnisse dann in andere Scala-Compiler einfließen können.
In den ersten Performance-Messungen ist der rsc
deutlich schneller als der Lightbend Scala-Compiler. Allerdings sind momentan auch noch nicht alle Scala-Features entwickelt, so dass die Ergebnisse nicht vergleichbar sind.
Links
Scala vs. Kotlin in der Praxis
Sven hatte die ein kleines Scala-Projekt nach Kotlin zu überführen und konnte so Erfahrungen aus der Praxis sammeln und eine differenzierte Bewertung vornehmen.
Das vermisse ich
- Pattern Matching
- Pattern Matching
- Pattern Matching
- Scala collections:
List
mithead
undtail
in Verbindung mit Pattern Matching und Rekursion - Echte immutable Collections
- Partial Functions inklusive
collect
match
an Infix-Position im Vergleich zuwhen
-Expression in Kotlin- Implizites Type-Widening für
byte
, etc. - Tuples
- Implicits
Das finde ich besser
- kein
new
-Operator - Benannte Parameter für Lambda-Deklarationen (z.B.
type EventCallback = (event: Event) -> Boolean
) - Top-Level-Functions
- Extension Functions für Monkey Patching
- Properties
- Markdown für Dokumentation
- IDE-Support
- Interoperabilität mit Java. z.B.
- Getter werden zu Properties (das
get
am Anfang des Methodennamens enfällt) - Kotlin-Klassen gut in Java zu nutzen
- Getter werden zu Properties (das
- Funktionen ohne Parameter haben immer Klammern. Außer Property-getter
- Klare Regelung für
()
vs.{}
- Bezeichnung
data class
vs.case class
- Variance-Bezeichner
in
andout
klarer als+
und-
- Gradle als Standard-Build-System
Neutral
Option
vs?
- Null-/Cast-Branch-Analyse
_
vsit
Das finde ich schlecht
- Usability Immutable Collections
Fazit
Ich würde Kotlin einsetzen, wenn es darum geht ein bestehendes Java-Projekt zu modernisieren oder in einem neuen Projekt mit einem Entwicklungs-Team, dass sich nicht für Scala begeistern kann.
Ansonsten ist Scala weiterhin die mächtigere und für meinen Geschmack schönere Sprache. Daher würde ich sie in Neuprojekten weiterhin bevorzugen.
Ideal wäre es wenn Scala 3 mit einigen der oben genannten Ungereimtheiten aufräumen würde.
So, what’s wrong with SBT?
Li Haoyi hat über SBT gebloggt und sieht einige Probleme. Dabei konzentriert er sich auf interne Probleme, die in erster Linie relevant für Plug-In Entwickler sind und Anwender nicht direkt betreffen.
In seinem Fazit stellt er fest, dass Tooling eines der größten Probleme in der Scala-Community ist und damit auch eine große Hürde für Einsteiger ist.
In seinem Artikel verweist er an zwei Stellen auf Bazel einem in Python geschriebenen Build-Tool, dass auch für andere Sprachen verwendet werden kann, für das es aber bisher keinen Scala-Support gibt. Andere Build-Tools wie CBT oder Gradle werden nicht erwähnt obwohl auch die vieles richtig machen, was SBT falsch macht.
Zusätzlich hat er auf Twitter (sieht hier und hier) nachgefragt wer Interesse daran hat an einem neuen Build-Tool für Scala mit zu arbeiten. Dem zweiten Tweet zufolge gibt es auch schon einen Plan und einen Prototypen. Merkwürdigerweise findet das bisher aber offenbar komplett hinter verschlossenen Türen statt. Es gibt keine Web-Seite und auch keine öffentliche Diskussion dazu.
Mir persönlich wäre es lieber wenn es dazu erst mal eine Diskussion gäbe, am besten unter der Kontrolle vom Scala-Center. Bevor man anfängt was neues zu entwickeln sollte man gucken ob man nicht z.B. CBT weiter ausbauen kann oder ein anderes Build-Tool wie Gradle oder Bazel um guten Scala-Support erweitern kann. Gradle hätte für mich den großen Vorteil, dass viele Java-Entwickler Gradle bereits kennen und damit Scala einsetzen können ohne sich an ein neues Build-Tool gewöhnen zu müssen.
Links
Resümee 2017
Svens Resümee
Insgesamt empfinde ich 2017 als ein ruhiges Scala-Jahr.
Die aus meiner Sicht wichtigsten Events/Erkenntnisse waren folgende:
- dotty wird nun mehr oder weniger als Scala 3.0 gesehen
- Fokussierung auf Multi-Plattform-Entwicklung mit Scala Native und Scala.js. Für letzteres schätze ich die Wahrscheinlichkeit einer größeren Bedeutung im Vergleich zu Konkurrenten wie TypeScript als gering ein.
- Der Kampf um Android ist verloren.
- Ein Scala 3, das alte Zöpfe und Ungereimtheiten beseitigt scheint noch weit entfernt.
Benjamins Resümee
Ich würde das zwar nie offen zugeben, aber Sven hat Recht: 2017 war ein ruhiges Scala-Jahr.
Es haben sich aber immerhin drei meiner vier Wünsche erfüllt:
- SBT 1.0 ist draußen
- Wir konnten auf Scala 2.12 umstellen.
- Unser Team ist vollständig.
Ansonsten ist für mich noch das Engagement des Scala-Centers bei den Macros wichtig.
Wünsche 2018
Svens Wünsche
- Eine klarere Roadmap für Scala 3 und was wir davon erwarten können. Diese Aussicht könnte für Entscheidungsträger interessant sein, ob bei neuen Projekten auf Scala oder weniger komplexe Alternativen wie Kotlin gesetzt wird.
- Unterstützung einer vollwertigen Alternative zu SBT durch das ScalaCenter
Benjamins Wünsche
def
Macros auf Basis von Scalameta und zwar nicht nur als Prototyp, sondern so, dass auch ein einfacher Scala-Entwickler sie nutzen kann. Am besten gleich mit ein bisschen Dokumentation.- Bessere Unterstützung von Macros in IntelliJ IDEA.
- Ein schneller Scala-Compiler.
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).