SP10/17: Wir leben noch
Scala 2.12.3 released
Interessanteste Änderung ist eine — laut eigenen Aussagen — drastisch verbesserte Performance:
- Insbesondere der inkrementelle Compiler Zinc (wird von SBT und diversen anderen Build-Tools verwendet) wurde verbessert um möglichst wenig Code neu zu compilieren.
- Aber auch am Compiler selbst wurden diverse kleine Performance-Optimierungen vorgenommen, die sich erheblich aufaddieren können. Bei verschiedenen Projekten sank die Dauer für einen Full-Build auf 66% bis 85% gegenüber 2.11.11. Besonders profitieren kleinere Projekte.
- Der Blog-Post Towards a faster Scala compiler beschreibt alle Details.
- Um sicherzustellen, dass sich die Performance nicht verschlechtert werden nach jeder Änderung am Compiler automatische Performance-Tests ausgeführt.
Links
SBT 1.0.0 is da
Version 1.0.0 und inzwischen sogar 1.0.1 bzw. 1.0.2 ist verfügbar.
Highlights:
- basiert auf Scala 2.12, es ist also kein 2.10 Support mehr bei Scala Plugins notwendig
- Zinc 1 mit verbesserter Performance bei der inkrementellen Compilierung
- paralleler Download von Artefakten
- Library Management API (erleichtert einen Wechsel von Ivy auf ein anderes System in der Zukunft)
- ab SBT 1.0.0 wird Semantic Versioning verwendet
- SBT 1.0.0 ist weder Source- noch Binär-Kompatibel mit 0.13., es gibt eine Anleitung für die Migration
Links
Java 9 wurde released
Nach mehrfacher Verschiebung wurde im September Java 9 released.
Änderungen, die potential für uns als Scala-Entwickler interessant sind:
- Modul-System (neues Tool
jlink
) - Neues Versions-Schema
major.minor.security.patch
. Wobeiminor
für bug fixes gilt undmajor
für funktionale Updates. - Multi-Release JARs
- G1 als Standard-Garbage-Collector. Kann angeblich besser mit großen Heaps (> 4GB) umgehen.
- Update der Process API ermöglicht Zugriff auf die System-ID von Prozessen und diversen weiteren System-Eigenschaften. Ermöglicht die Überwachung und das Beenden von Prozessen.
- Stackwalk-API zum Zugriff auf Informationen zum aktuellen Stack.
- Unterstützung diverser ECMAScript 6 Features in Nashorn. z.B.
let
,const
, Iteratoren undfor ... of
,Map
,Set
und einiges mehr. - HiDPI-Unterstützung für Windows und Linux
- UTF‑8 Properties-Dateien
- …
Links
- Java 9 Release now available
- Java Platform, Standard Edition What’s New in Oracle JDK 9 (vollständige Liste der Neuerungen)
- Countdown to Java 9 Release Date (Diverse News rund um Java 9)
scalameta/scalamacros
Der Fokus von Scalameta hat sich verändert. Das Projekt wurde ursprünglich gestartet um Macros zu vereinfachen. Inzwischen wurden die Macros in ein eigenes Projekt ausgelagert.
Scalameta ist inzwischen allgemeiner angelegt, also Basis für Entwickler-Tools verschiedener Art, wie z.B.
Scalamacros
Zu Scalamacros findet man auf Github Beispiele für Macro-Annotations und def
Macros, allerdings bisher wenig Dokumentation.
Roadmap
Inzwischen beteiligt das Scala Center sich bei der Implementierung (siehe SCP-014) und es gibt eine Planung für die nächsten Schritte:
- Scala 2.12: Weitere Schritte über Compiler-Plugin
- Dotty: Integration in den Compiler
- Support für IntelliJ IDEA
- Scala 2.13: Immer noch über Compiler-Plugin und Feature-Flags
- Scala 2.14: Macros sollen nicht mehr experimentell sein und scala.reflect wird deprecated
Links
Scala AST im Browser untersuchen
- AST explorer ist eine Web-Site mit der sich die Abstract Syntax Trees für beliebigen Code verschiedener Programmiersprachen analysieren lassen.
- Gabriele Petronella hat unter Einsatz von Scalameta und Scala.js Scala-Unterstützung für den AST explorer implementiert, so dass Scala jetzt in der Liste der unterstützten Sprachen auftaucht.
Fazit
Wer mit Scala Macros experimentiert, dem kann der AST explorer die Arbeit deutlich vereinfachen.
Links
Catch bugs with Scalafix v0.5 | The Scala Programming Language
Scalafix kann nicht nur Code verändern sondern auch als Linter verwendet werden. Ein Blog Beitrag von Ólafur Páll Geirsson zeigt wie einfach es ist eigene Regeln für den Linter zu schreiben — zumindest wenn man sich ein bisschen mit Quasiquotes und Scalameta auskennt.
Links
Scala.js vs TypeScript
Sven hat Scala.js angepriesen. In letzter Zeit hat er sich mit TypeScript beschäftigt. Hier sein Vergleich:
Vorzüge von Scala.js
- Scala halt
- Kompakte Syntax (einzeilige case-Klassen)
- Typ-Klassen
- Declaration-Side Variance
- Implicits
- Shared Client-Server-Projekte (auf Scala-Basis)
Neutral
- Mit Facebook’s immutable.js existiert eine gute Implementierung von immutable Collections.
- Out-of-the-box automatische Tests mit Coverage-Analyse
- Mächtiges Typ-System mit mächtiger Typ-Interference.
Vorzüge von TypeScript
- Durchgängiges structural typing passt besser zum dynamischen Character von JavaScript. Außerdem ermöglicht es die schlanke Instanziierung von Interfaces mittels JavaScripts Object-Syntax.
Typ-Konstrukte, die so bei Scala nicht möglich sind:- Union Types (
A | B
,string | number
) passen gut JavaScript. - Intersection-Types (
A & B
) ermöglichen interessante Typisierungs-Lösungen, die mit Scala so nicht möglich sind. - Mit [mapped types] lassen sich leicht neue Typen auf Basis existierender erstellen (
Partial
,Readonly
)
- Union Types (
- Zero Script-Size Overhead
- Zero Runtime-Overhead
- Unterstützung von TSX
- Mächtiger Standard-Linter
- Declaration-Files für die meisten, selbst wenig populäre JavaScript-Libraries
- Tooling (IDE-Support, Debugging, Integration mit
webpack
und Co) - Turn-around-Zeiten
- Popularität
Vorläufiges Fazit
Stand heute ist der Einsatz von Scala.js als JavaScript-Ersatz nur mit großen Kompromissen möglich:
- Fassaden für JavaScript-Bibliotheken müssen manuell erstellt werden
- Die generierten Bundles haben einen erheblichen Overhead
- Das Debugging in Chrome ist aufgrund unpräziser Source-Maps und starker Optimierungen (fehlende Variablen) kaum brauchbar
- Vor allem das Tooling kommt nicht annähernd and das von TypeScript heran. So müssen Templates häufig als Strings abgebildet werden wodurch viele Fehler erst zur Laufzeit auftreten.
Play 2.6.0 released
Ende Juni wurde Play 2.6.0 freigegeben. Über die Änderungen sprachen wir in Episode SP02/17 im Detail. Die wichtigsten Änderungen sind:
- Unterstützung für Scala 2.12
- Akka HTTP ersetzt Netty
- Experimenteller Support für HTTP/2
Links
Scastie hat das Beta-Stadium verlassen
Scastie ist eine vom Scala Center Team betriebene interaktive Web-Seite, die es Dir ermöglicht Scala-Code im Browser auszuprobieren, auf den Servern zu speichern und zu teilen (ähnlich wie bei JSFiddle & Co.).
Gegenüber der Beta-Version wurde folgendes geändert:
- Die Oberfläche wurde komplett aufgeräumt.
- Neben den Standard-Scala-Versionen, dem Dotty und dem Typelevel-Compiler steht nun auch Scala.js als Target bereit.
Weiterhin vorhandene Features:
- Über eine interaktive Suche kannst Du sämtliche im scaladex geführte Bibliotheken mit einem Klick hinzufügen und ausprobieren.
- Wenn das immer noch nicht reicht kannst Du direkt das SBT-Script beeinflussen und so zum Beispiel beliebige Dependencies hinzufügen
Links
Underscore Books
Frei verfügbare eBooks rund um Scala.
Derzeit verfügbar:
- Essential Scala
- Essential Play
- Advanced Scala with Cats
- Essential Slick
- Creative Scala
- The Type Astronout’s Guide to Shapeless
- The Lift Cookbook
Links
47deg/sbt-microsites
Von der Projektseite:
sbt-microsites is an SBT plugin that facilitates the creation of fancy microsites for your projects, with minimal tweaks.
What is a microsite?
A microsite is an instance of Jekyll, ready to publish a static web page for your new library. Some of the benefits of having these auto-generated web pages are:
- You can write documentation easily in markdown format.
- Templates, layouts, styles, and other resources will be able through the plugin at compile time.
- You don’t have to deal with the styling.
Links
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).
Radim Pavlicek
| #
sbt-microsites ist cool! Wusste ich gar nicht daruber.
Reply