SP10/16: Ich weiß was Du letzten Sommer getan hast
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-RC1 verfügbar
Der gemäß ursprünglicher Planung für Ende Mai vorgesehene Release Candidate 1 wurde nun am 6. September 2016 released.
Im Zentrum von Scala 2.12 steht die bessere Integration mit Java 8. Das bedeutet auch, dass mit Scala 2.12 gebaute Anwendungen eine Java 8 VM voraussetzen.
Ein Release-Termin für 2.12.0 ist uns aktuell nicht bekannt.
Links
The Scala Center Advisory Board
Über das Advisory Board
- Spricht Empfehlungen an das Scala Center aus, woran es arbeiten soll.
- Es ist die Aufgabe des Scala Centers, diese Empfehlungen zu bearbeiten.
- Das Board hat sieben abstimmende Mitglieder:
- Vertreter der sechs (wenn ich das richtig verstehe inzwischen 9) Sponsoren: Artima, 47 Degrees, IBM, Lightbend, Nitro, SAP, Tapad, Twitter, Verizone
- Bill Venners als Vertreter der Community
- Heather Mills als »Executive Director« des Scala Centers, um über die Aktivitäten des Scala Centers zu berichten
- Martin Odersky als technischer Berater des Boards
- Das Board trifft sich viermal im Jahr
Wie funktioniert das Board
- Ziel jedes Meetings ist es Empfehlungen auszusprechen, woran das Scala Center in den nächsten drei Monaten arbeiten soll
- Entscheidend ist, dass die Empfehlungen des Boards nicht bindend sind
- Heather und Martin sitzen im Board, um das Board über die Machbarkeit/Sinnhaftigkeit von Empfehlungen vorab zu beraten
- Jedes der sieben Board-Mitglieder kann Vorschläge einreichen
- Die sieben Mitglieder können über die Vorschläge abstimmen um so daraus Empfehlungen für das Scala Center zu generieren.
- Die Vorschläge und Protokolle der Meetings werden im Github repository veröffentlicht.
Erstes Meeting vom 9. Mai 2016
Dort wurden vier Empfehlungen ausgesprochen:
- Klärung des Scala-Führungs-Prozesses inklusive des SIP/SLIP-Prozesses
- Definition eines Migrationspfades von Scala 2.x nach Dotty
- Schaffung einer »new unpaid publicity chair role« für das Scala Center und
- Fortsetzung der Unterstützung für Scala.js
Zweites Meeting vom 9. August
Folgende Empfehlungen wurden beschlossen:
- Native Execution of Scala/Spark via LLVM
- Compile Time Check of Serializability
Protokoll des zweiten Meetings
Links
ScalaCenter Meetings
Neuer SIP-Prozess
Im neuen Scala Improvement Process wird jeder SIP einem Reviewer zugeordnet, der diesen dem SIP-Komitee präsentiert.
Status aus Juli- und August-Meetings
Im Prozess sind:
- SIP-20 Improved Lazy Val Initialization: Vermeidung von Deadlocks
- SIP-23: Literal-based singleton types: ???
- SIP-25 Trait Parameters: Im Prinzip »Konstruktorparameter« für Traits
- SIP-26 Unsigned Integer Data Types: Einführung von
UByte
,UShort
,UInt
undULong
- SIP-27 Trailing Commas: Erlaubt Kommas nach dem letzten Parameter einer Funktion oder dem letzten Eintrag einer einer Liste (ähnliche JavaScript). Soll das Auskommentieren und austauschen von Elementen erleichtern.
Ein SIP wurde auf Wunsch des Autors zurückgestellt:
Zwei weitere wurden abgelehnt:
- SIP-12: Uncluttering Scala’s syntax for control structure: »Verschönerung von
if
- undfor
-Statements. - SIP-16: Self-cleaning macros
Links
Multiversal Equality for Scala
Aktuelles Problem
Equality-Operator ==
ist nicht typsicher. So kann man versehentlich folgendes schreiben:
val a = "hello"
val b = Some("hello")
a == b
Das Ergebnis wird immer false
sein, da die Typen nicht übereinstimmen.
Potentielle Lösung
Andere Sprachen bietet dazu den ===
-Operator. Odersky möchte aber möglichst keinen neuen Operator einführen, sondern es bei dem ==
-Operator belassen. Dabei ist allerdings das Problem der Abwärtskompatibilität zu berücksichtigen.
Martin Odersky hat dafür einen Language Enhancement Proposal erstellt, den er in einem Blog-Eintrag inklusive möglichem Lösungsweg beschreibt.
Links
Statische Code-Analyse
Compiler Option
Der Scala Compiler bietet selbst einige Optionen, die für zusätzliche Warnungen und sogar Fehler sorgen.
Die Optionen -Xlint -Ywarn-dead-code -Ywarn-numeric-widen -Yno-adapted-args -Ywarn-value-discard
führen zu 323 Warnungen und 13 Fehlern!
Die Fehler entstehen, weil die Option -Yno-adapted-args
die Konvertierung von a, b
nach (a, b)
unterbindet.
Externe Tools
- Linter
- Typ: Compiler Plugin (muss gegebenenfalls einzeln zu den Sub-Projekten hinzugefügt werden)
- IDE-Integration: Keine
- Konfiguration:
scalacOptions
- Ausnahmen:
- Einzelne Zeilen über Kommentare (Komplett oder für einzelne Regeln)
- Ausführen: Implizit bei
compile
- Ausgabe: Konsole
- Warnungen: 106
- WartRemover
- Typ: SBT Plugin
- IDE-Integration: Keine
- Konfiguration: SBT
- Ausnahmen:
- Einzelne Dateien über SBT Einstellungen
- Klassen oder Methoden über die Annotation
java.lang.SuppressWarnings
(Komplett oder für einzelne Regeln)
- Ausführen: Implizit bei
compile
- Ausgabe: Konsole
- Warnungen: 4332
- Scapegoat
Nur Scala 2.11!- Typ: SBT Plugin
- IDE-Integration: Keine
- Konfiguration: SBT
- Ausnahmen:
- Einzelne Dateien über SBT Einstellungen
- Klassen oder Methoden über die Annotation
java.lang.SuppressWarnings
(Komplett oder für einzelne Regeln)
- Ausführen: Explizit über
scapegoat
- Ausgabe: Konsole, HTML, XML
- Scalastyle
Wird im Coursera Kurs Functional Programming Principles in Scala für die Auswertung der Übungen mit verwendet.- Typ: SBT Plugin
- IDE-Integration:
- Eclipse Plugin
- Inspection für IntelliJ IDEA
- Konfiguration:XML Datei (kann über ein SBT Kommando generiert werden)
- Ausnahmen:
- Einzelne Zeilen und Code-Blöcke über Kommentare (Komplett oder für einzelne Regeln)
- Ausführen: Explizit über
scalastyle
- Ausgabe: Konsole, XML im Checkstyle Format
- Warnungen: 1097
Interessante Warnungen
- case classes must be final siehe stackoverflow
- Inferred type containing Any
- Descendants of a sealed type must be final or sealed
- Merge these two map operations
- Verwendung von
var
null
Option.get
Links
- How to make the Scala compiler to review your code (2016)
- Review of Scala Static Analysis Tools (2015)
- Linter
- WartRemover
- WartRemover & quasiquotes
- Scapegoat
- Scalastyle
ScalaTest 3.0: What’s new
Kürzlich wurde ScalaTest 3.0.0 freigegeben. In dem Artikel What’s new in ScalaTest 3.0 werden Hauptneuerungen der Version aufgeführt:
- Vollständige Unterstützung für Scala.js
- Asynchrone Varianten zum Testen von
Future
(siehe auch Episode SP06/16 zu den ScalaDays) - Erweiterte
Matchers
mit zusätzlichen Match-Words um Container zu testen: Einleitung durch z.B.must contain
oneElementOf
,noElementOf
,atLeastOneElementOf
,atMostOneElementOf
,allElementsOf
andinOrderElementsOf
. - Assertions und Macher liefern als Ergebnis jetzt ein Objekt vom Typ
Assertion
an Stelle vonUnit
.
Link
ScalaFiddle
ScalaFiddle ist ein Seite zum testen und teilen von Scala Code, also JsFiddle nur für Scala. Ein ScalaFiddle kann per ›
<iframe height="300" frameborder="0" style="width: 100%; overflow: hidden;"
src="https://embed.scalafiddle.io/embed?sfid=UbLKYAK/1&theme=dark">
</iframe>
Links
play-swagger
Swagger ist eine Sprache zur Spezifikation von REST-Schnittstellen. play-swagger kann aus dieser Spezifikation folgende Play-Artefakte generieren:
- Routes file
- Generators of random test data
- Wrappers for Play route files to convert semantics from http-related to domain-related (controller_base)
- Skeletons for the domain-driven controller implementation
- Model classes and validation rules
- Unit tests for invalid and valid parameter sets
- Security extractors (if needed)
- Skeletons for custom deserializers (if needed)
Links
Scala Exercises
Scala Exercises ist ein Open-Source Projekt von 47 Degrees. Auf der Web-Seite gibt es Einführungen mit Übungen zu verschiedenen Scala Bibliotheken.
Der Code für die verschiedenen Übungen liegt auf GitHub.
Momentan gibt es Übungen zu den folgenden Themen:
Es gibt eine Anleitung zum Hinzufügen von neuen Themen, wenn die Episode online ist sind es also unter Umständen noch mehr.
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).