Scala Profis artwork

SP10/17: Wir leben noch

Scala Profis

German - October 23, 2017 19:24 - 1 hour - 60.8 MB
Technology News Tech News Homepage Download Apple Podcasts Google Podcasts Overcast Castro Pocket Casts RSS feed


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

Scala 2.12.3 released
Towards a faster Scala compiler

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

Ankündigung
Release-Notes
Migration von 0.13.x
Migration Status

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. Wobei minor für bug fixes gilt und major 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 und for ... 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.

Scalafmt
Scalafix
AST Explorer

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

Release Notes
Scalamacros
scalameta/paradise
SCP-014
Roadmap towards non-experimental Macros

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

Exploring Scala AST in your browser – buildo blog
AST explorer

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

Catch bugs with Scalafix v0.5 | The Scala Programming Language
Scalafix Dokumentation

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)

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

Play 2.6.0 released

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

Scastie
Scastie is out of beta and available to everybody! | The Scala Programming Language

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

Underscore Books

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

47deg/sbt-microsites

Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.



Kapitel

Intro (00:00:00.000)
Scala 2.12.3 (00:01:49.037)
SBT 1.0.0 (00:04:19.678)
Java 9 (00:09:47.661)
scalameta/scalamacros (00:28:24.547)
AST explorer (00:39:39.765)
ScalaFix als Linter (00:44:08.035)
Scala.js vs. TypeScript (00:47:45.592)
Play 2.6 released (01:16:03.907)
Scastie hat das Beta-Stadium verlassen (01:19:02.552)
Underscore Books (01:21:21.037)
sbt-microsites (01:22:25.880)
Outro (01:23:46.787)

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).

Twitter Mentions