
Sign up to save your podcasts
Or


Scala 2.12.4 wurde am 20. Oktober freigegeben.
Änderungen:
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.
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.
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.
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.
Insgesamt empfinde ich 2017 als ein ruhiges Scala-Jahr.
Die aus meiner Sicht wichtigsten Events/Erkenntnisse waren folgende:
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:
Ansonsten ist für mich noch das Engagement des Scala-Centers bei den Macros wichtig.
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
Interessanteste Änderung ist eine — laut eigenen Aussagen — drastisch verbesserte Performance:
Version 1.0.0 und inzwischen sogar 1.0.1 bzw. 1.0.2 ist verfügbar.
Highlights:
Nach mehrfacher Verschiebung wurde im September Java 9 released.
Änderungen, die potential für uns als Scala-Entwickler interessant sind:
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.
Zu Scalamacros findet man auf Github Beispiele für Macro-Annotations und def Macros, allerdings bisher wenig Dokumentation.
Inzwischen beteiligt das Scala Center sich bei der Implementierung (siehe SCP-014) und es gibt eine Planung für die nächsten Schritte:
Wer mit Scala Macros experimentiert, dem kann der AST explorer die Arbeit deutlich vereinfachen.
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.
Sven hat Scala.js angepriesen. In letzter Zeit hat er sich mit TypeScript beschäftigt. Hier sein Vergleich:
Stand heute ist der Einsatz von Scala.js als JavaScript-Ersatz nur mit großen Kompromissen möglich:
Ende Juni wurde Play 2.6.0 freigegeben. Über die Änderungen sprachen wir in Episode SP02/17 im Detail. Die wichtigsten Änderungen sind:
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:
Weiterhin vorhandene Features:
Frei verfügbare eBooks rund um Scala.
Derzeit verfügbar:
Von der Projektseite:
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:
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
Am 18. April wurden gleich [drei Releases angekündigt]((http://www.scala-lang.org/news/releases-1Q17.html).
scala.meta ist ein Meta-Programming Toolkit für Scala. scala.meta wurde komplett neu implementiert und soll scala.reflect ersetzen.
Aktuell ist die Version 1.7 vom 11. April 2017. Geplant ist eigentlich ein Major Release (1.8, 1.9) am 10. von jedem Monat, eigentlich müsste es also schon die Version 1.8 geben.
scala.meta wird z.B. von scalafmt und von scalafix verwendet.
Wie üblich gibt es leider bisher relativ wenig Dokumentation. Am hilfreichsten ist momentan ein Tutorial von Ólafur Pall Geirsson (A Whirlwind Tour of scala.meta).
Für Fragen kann man den scala.meta Gitter channel oder natürlich stackoverflow verwenden.
Beispiele findet man im Projekt Elysium auf GitHub.
scala.meta ist in der Verwendung deutlich einfacher als scala.reflect.
Für eine Macro-Annotation muss man eine Klasse von scala.annotation.StaticAnnotation und eine apply Methode implementieren, die dann für das Element (Objekt, Klasse, Methode, …) aufgerufen wird, an das die Annotation geschrieben wird:
Über das abort(...) Statement erzeugt man einen compile Fehler.
Die AST-Objekte die man bekommt sind deutlich verständlicher, als bei scala.reflect.
Hier ein Beispiel aus Li Haoyis Sourcecode Bibliothek(Aus der Datei SourceContext.scala:
Die Funktion getName gibt den Namen von einem übergebenen Symbol zurück.
Analog hier der Code um in der Annotation von oben zum Beispiel an den Namen einer Klasse zu kommen:
Die übergebenen AST-Objekte sind case Klassen. Wenn man etwas verändern will kann man per copy(...) ein neues, angepasstes Objekt erzeugen und das dann zurück geben.
Macro-Annotation können in IDEA relativ problemlos verwendet werden. IDEA erkennt wenn ein Annotation an einer Stelle einen Compile-Fehler auslöst und zeigt den Code dann auch als Fehlerhaft an.
Neben der Annotation wird ein Symbol angezeigt über die das Macro ›ausgeführt‹ werden kann. IDEA ersetzt dann den vorhanden Code durch den, den das Macro generiert.
Das alles funktioniert allerdings nicht sonderlich gut für Macros die im gleichen IDEA Projekt entwickelt werden. Änderungen am Macro die neue Compile-Fehler erzeugen oder aktuelle Compile-Fehler beheben erkennt IDEA in der Regel nicht, womit dann unter Umständen korrekter Code als fehlerhaft angezeigt wird oder umgekehrt.
Am einfachsten lässt sich ein Macro debuggen über Remote-Debugging.
Das hat bei Benjamin aber nicht immer zuverlässig funktioniert. Von Zeit zu Zeit wurde die Remote-Debugging-Session beendet und manchmal hat IDEA nicht an einem Break-Point angehalten.
Wer einen Eindruck von »Akka Typed« erhalten will kann sich die Blog-Reihe auf dem Akka-Blog anschauen, die bisher aus drei Artikeln besteht:
Alpakka ist ein von Lightbend initiiertes Sammelsurium von Akka-Stream-Connectoren, Integrations-Patterns und Daten-Transformationen für Integrations Use-Cases.
Ziel von Lightbend ist es mit Alpakka eine moderne Alternative zu Apache Camel zu schaffen.
Hier eine Liste der aktuell verfügbaren Komponenten.
scalajs-bundler ermöglicht es NPM-Dependencies in scala.js via SBT anzubinden.
Nachdem hinzufügen des SBT Plugins (und der lokalen Installation von NPM) können NPM-Dependencies einfach eingebunden werden:
Für sbt-web steht ebenfalls eine Variante des scalajs-bundlers bereit.
JetBrains hat eine Tech Preview für Kotlin/Native heraus gebracht. Genau wie Scala Native setzt Kotlin/Native auf LLVM um Kotlin-Code in nativ ausführbare Executables für verschiedene Plattformen zu übersetzen.
Auf der diesjährigen Google I/O hat Google Kotlin als offiziell unterstützte Programmiersprache für Android beworben.
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
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).
In Episode SP02/17 hatte Benjamin bemängelt, dass der Contextual String-Interpolator ein Any anstelle des gewünschten Typs zurückgibt und großspurig angekündigt dafür einen Pull-Request zu stellen.
Igor Mielientev war da schneller. Sein Pull-Request ist auch schon gemergt, allerdings gibt es noch kein neues Release in dem die Änderung enthalten ist.
Der Scala Platform Process soll die Implementierung, Pflege und Verwaltung von Modulen für die Scala Platform vereinfachen.
Zur Erinnerung: Scala soll weiter modularisiert werden. Die Standard Library soll nur die wichtigsten Komponenten enthalten, wie zum Beispiel die Collections. Alles was soll in extra Bibliotheken ausgelagert werden, wie das bei 2.11 zum Beispiel schon mit der XML Bibliothek passiert ist.
Der Scala Platform Process bietet:
Lightbend hat seine Pläne für die Scala-Roadmap 2017 inklusive eines Ausblicks auf Scala 2.13 veröffentlicht.
Scala 2.13 wird sich auf folgende Themen fokussieren:
An der Sprache wird sich in 2.13 also nichts ändern.
Die Scala Collections sind zwar gut, sind aber durchaus auch ein bisschen überladen und zum Teil schwer zu verwenden und schwer zu implementieren.
Sie sollen deshalb für 2.13 mit den folgenden Zielen neu implementiert werden:
Im (verspäteten) Januar-Ergebnis des halbjährlich erscheinenden RadMonk-Programmiersprachen-Rankings konnte Scala gegenüber dem letzten Ergebnis drei Plätze gut machen und liegt jetzt, gleich auf mit Swift, auf Platz 11.
Die RedMonk-Analysten werten StackOverflow und GitHub aus, um einzuschätzen, wie stark welche Programmiersprachen in der Zukunft eingesetzt werden.
Hier die ersten zehn Plätze:
Bestehender Code erfordert einiges an Migrationsaufwand, der mittels scalafix teilweise automatisch durchgeführt werden kann.
Scala Native v0.1 ist verfügbar.
Google hat sich entschieden die Jack-Toolchain (höre Episode SP004) zu verwerfen und Java 8 Features stattdessen direkt via javac und dx zu unterstützen. Laut eigener Aussage wollen sie damit erreichen, dass bestehende Tools, die auf dem Java-Bytecode-Format aufsetzen, auch im Android-Umfeld funktionieren.
Im März 2016 hatte Google angekündigt Java 8 Features über den neuen Jack-Compiler zu unterstützen, der keine .class-Dateien mehr, sondern .jack-Dateien generiert, die direkt DEX-Code enthalten sollten.
Mit der neuen Marschrichtung könnte Scala 2.12 für Android wieder realistisch werden.
Biran Goetz, Java Language Architect by Oracle, hat Project Amber angekündigt. Ziel ist es kleinere, produktive Sprach-Features zu evaluieren.
public class User(String firstName, String lastName, DateTime birthday) { }
Pattern Matching
Verfügbarkeit: Vielleicht 2020?
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
Paul hat geschrieben.
Seine Highlights 2016:
Seine Wünsche für 2017:
Das Scala Center Advisory Board hat zwei neue Mitglieder:
Folgende Empfehlungen wurden beschlossen:
SIP-27 (trailing commans) wurde nach ein paar letzten Änderungen akzeptiert.
Für SIP-20 (improved lazy val initialization) gibt es eine Implementierung für Dotty und es wird jemand gesucht, der sich um eine Implementierung für scalac kümmert.
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. — wenn auch noch nicht so komfortabel).
Ursprünglich wurde Scastie von Aleh Aleshka als kollaborative Plattform zum Reproduzieren von Fehlern im Scala-Compiler erstellt. Seit neuestem steht das Ergebnis jedem interessierten als Beta-Version zur Verfügung (Login via Github).
Dein Code wird zu den Scala-Center-Servern geschickt, dort mittels SBT compiliert und ausgeführt und der Output zurück zum Server gestreamt.
Cool dabei:
Die Agenda für die Scala Days 2017 in Kopenhagen ist online.
Es gibt gleich zwei Vorträge aus der Berliner Scala Community:
Daniel Jentsch hält einen Vortrag über eine ScalaTest Erweiterung zum testen von Abfrageketten mit Futures und externen Systemen.
Oleg Ilyenko stellt seine GraphQL Implementierung Sangria vor.
Es gibt in Scala bisher keine impliziten lazy Parameter. Das kann im Zusammenhang mit generischer Programmierung zu Problemen führen, die Shapeless mit dem Lazy Pseudo-Typ umgeht (mit Macro-Magie dahinter).
Zur Vereinfachung gibt es in dotty jetzt die Möglichkeit implizite ›by-name‹ Parameter zu verwenden (def fun(implicit a => String)).
Das Play-Team hat den ersten Milestone des 2.6.0‑Releases der Allgemeinheit zum Testen zur Verfügung gestellt. Geplantes Release-Datum ist gemäß dem Roadmap-Dokument März bis April 2017.
Gemäß dem Roadmap-Dokument sind die folgenden weiteren Features für Play 2.6 geplant, derzeit aber noch nicht verfügbar:
In dem Roadmap-Dokument findet sich auch ein Ausblick auf Play 3 (ETA Januar 2018)
John Pretty hat die erste Version von Contextual vorgestellt. Mit Contextual kann man sich einfach einen String-Interpolator implementieren, der schon beim kompilieren überprüft ob ein gegebener String bestimmte Bedingungen erfüllt.
Das folgende Beispiel von der Homepage zeigt einen einfachen String-Interpolator für URLs (wobei die Funktion checkValidUrl(...) noch irgendwo anders implementiert werden muss):
Mit diesem Interpolator führt dann z.B. url"foobar" zu einem Compiler-Fehler, wäheren url"http://co.ntextu.al" ohne Fehler compiliert.
Es gibt verschiedene Möglichkeiten Enumerations in Scala umzusetzen. Pedro Rijo einen lesenswerten Artikel geschrieben in dem er die verschiedenen Möglichkeiten mit Ihren Vor- und Nachteilen beleuchtet. In einem zweiten Artikel bezieht er auch Java Enumerations in die Betrachtung mit ein.
Features:
Probleme:
Features:
Probleme:
itemized erzeugt mit Hilfe von Macros sealed Trait-Hierarchien:
Features:
Probleme:
Features:
Nachteile:
Der Artikel von Pedro führte zu einer interessanten Diskussion auf Reddit, der unter anderem die klassischen Java-Enumerations als Alternative vorschlugen.
Features:
Nachteile:
scala.Enumeration taugt für die meisten Fälle. Wenn das nicht reicht scheint die Library enumeratum eine interessante Alternative zu sein.
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
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).
Seit 3. November ist Scala 2.12 verfügbar!
Der Scala-Compiler wurde komplett überarbeitet um — wo möglich — die neuen Java 8 Features zu nutzen:
Außerdem bietet das Release einen leistungsstarken neuen Optimierer.
2.11 und 2.12 sind Source-Code-kompatibel, wie gewohnt aber nicht binärkompatibel.
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.
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.
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.
Das letzte Release für Scala 2.11 (2.11.9) wird für Mitte Dezember erwartet.
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.
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.
Bisherige Standards:
Neue Standards:
Node.js und jsdom müssen getrennt installiert werden.
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).
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
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).
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.
Dort wurden vier Empfehlungen ausgesprochen:
Protokoll des ersten Meetings
Folgende Empfehlungen wurden beschlossen:
Protokoll des zweiten Meetings
Im neuen Scala Improvement Process wird jeder SIP einem Reviewer zugeordnet, der diesen dem SIP-Komitee präsentiert.
Im Prozess sind:
Ein SIP wurde auf Wunsch des Autors zurückgestellt:
Zwei weitere wurden abgelehnt:
Equality-Operator == ist nicht typsicher. So kann man versehentlich folgendes schreiben:
Das Ergebnis wird immer false sein, da die Typen nicht übereinstimmen.
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.
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!
Kürzlich wurde ScalaTest 3.0.0 freigegeben. In dem Artikel What’s new in ScalaTest 3.0 werden Hauptneuerungen der Version aufgeführt:
ScalaFiddle ist ein Seite zum testen und teilen von Scala Code, also JsFiddle nur für Scala. Ein ScalaFiddle kann per ›
Swagger ist eine Sprache zur Spezifikation von REST-Schnittstellen. play-swagger kann aus dieser Spezifikation folgende Play-Artefakte generieren:
Scala Exercises ist ein Open-Source Projekt von 47 Degrees. Auf der Web-Seite gibt es Einführungen mit Übungen zu verschiedenen Scala Bibliotheken.
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.
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
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 für unser siebenköpfiges Scrum-Team.
Auch als Quereinsteiger aus der Java-Welt bist Du herzlich willkommen.
Bewirb Dich jetzt (gib bei Deiner Bewerbung bitte an, dass Du über diesen Podcast auf die Stelle aufmerksam geworden bist).
Typelevel
Der Scala Library Index jetzt online. Hier werden Scala-Libraries getaggt aufgelistet. Somit erhält man einen guten Überblick populärer Bibliotheken zu unterschiedlichen Themen.
Scaladex ist eine der ersten Initiativen des Scala Centers.
Paul Boschmann hat uns eine gute Eselsbrücke zu Either genannt:
Wir verabschieden uns in die Sommerpause. Die nächste Episode gibt es voraussichtlich im September.
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
»Alles neu macht der Mai«. In diesem Sinne haben wir ein paar kleinere Anpassungen vorgenommen:
Sven hat sich mit ScalaJS beschäftigt.
Für jemanden, der statisch typisierte, mächtige Sprachen gewöhnt ist, ist das Programmieren in JavaScript kein Vergnügen:
Einiges wird mit ECMAScript 6 besser (Module, Arrow-Syntax für Funktionen, Klassen, let-Deklarationen für »korrektes« Scoping, const). In der Realität kommt man aber um einen ES6-nach-ES5-Transpiler wie Babel nicht herum.
Wenn man eh einen Transpiler nutzt kann man auch gleich eine brauchbare Programmiersprache nehmen. Folgende Alternativen habe ich mir angeschaut:
Maßgeblich war für mich die geplante Förderung von Scala.js durch das Scala Center — das suggeriert Ernsthaftigkeit und Zukunftssicherheit.
Ebenfalls interessant: Code-Sharing zwischen Frontend und Backend (ist natürlich via Node.js auch mit JavaScript möglich).
Scala.js ist im Wesentlichen ein Compile-Plug-In, das den Scala AST (der zuvor den größten Teil der Scala-To-JVM-Pipeline durchlaufen hat und dem entsprechend vereinfacht ist) in einen JavaScript AST übersetzt (Link).
Zum Zugriff auf JavaScript-Funktionen werden Fassaden benötigt. Die besorgt man sich entweder fertig oder man erstellt sie einfach selbst:
Um Scala-Klassen aus JavaScript nutzbar zu machen müssen diese exportiert werden:
Es kann fast alles genutzt werden, was Scala bietet. Ausgeschlossen sind im Wesentlichen Reflection-basierte Funktionalitäten.
Um die Performance zu testen hat das Scala.js-Team einen Benchmark nach Scala.js überführt und die Ergebnisse auf der Scala.js-Seite veröffentlicht. Extrakt: Die Ausführung via Scala.js lag je nach Anwendungsfall 10 bis 20% über der nativen JavaScript-Lösung.
Ausnahme: Bei einem Collection-lastigen Test hat die Nutzung der Scala-Collections die Ausführungszeit um den Faktor 2.2 steigen lassen. Nachdem der Benchmark auf die Nutzung von JavsScript-Arrays umgestellt wurde, war der Benchmark wieder nur ca. 20% langsamer.
Was die Größe des resultierenden JavaScripts angeht: Während der Entwicklung wird zugunsten der Turnaround-Zeiten eine schnelle Optimierung durchgeführt. Ein einfaches AngularJS-Projekt hatte hier bei mir ca. 1 MB Größe. Der Release-Build wird unter Einsatz des Google Closure-Compilers größenoptimiert und lieferte bei mir 196 kB.
Aber Achtung: Der Google Closure Compiler macht die Anwendung wieder etwas langsamer.
Scala.js-Projekte werden mit SBT erstellt. Dabei kommen drei Source-Verzeichnisse zum Einsatz:
Ich habe Scala.js in einem Play-Projekt genutzt.
ScalaTest 3 bringt als Haupt-Feature die Unterstützung für Scala.js — somit können die Tests mit einem bewährten Framework geschrieben werden.
Debugging im Browser funktioniert, da Scala.js Source-Maps generiert. Durch die Optimierung, sind allerdings teilweise Variablen nicht verfügbar und auf diversen Source-Zeilen können keine Breakpoints gesetzt werden. Evtl. müsste man mal probieren die Fast-Optimization im Entwicklungsprozess zu deaktivieren.
Mit Scala.js macht Frontend-Entwicklung endlich Spaß und wird produktiv! Wenn Fehler auftreten kann die Suche nach der Ursache aufwändig werden, aber wie immer hilft Erfahrung hier weiter.
Aufgrund des Overheads, den die Standard-Library produziert, ist Scala.js sicherlich nicht zum Aufwerten einer normalen Web-Seite geeignet. Geht es aber um eine vollwertige Web-Applikation, mit der sich der Anwender längere Zeit beschäftigt, steht in meinen Augen einer Nutzung in Produktivsystemen nichts mehr im Wege.
Gradle muss nicht von allen Entwicklern installiert werden. Wenn ein Projekt neu aufgesetzt wird kann ein Entwickler der Gradle
Die konkrete Version ist dann Build-Skript festgelegt und wird bei der ersten Verwendung runter geladen.
Etwas komplizierter:
Aus einem Gradle-Task heraus können andere Tasks nicht direkt ausgeführt werden. Das geht nur indirekt über Abhängigkeiten:
Wenn sichergestellt werden muss, dann beim Aufruf von Task C erst A und dann B ausgeführt wird kann entweder noch eine Abhängigkeit
oder (z.B. wenn Task B auch unabängig von Task A ausgeführt werden kann) über mustRunAfter eine Reihennfolge festgelegt werden:
Solange man den Namen kennt kann man dynamisch auf jede Einstellung zugreifen. Allerdings ist das nicht typsicher und Tippfehler
SBT muss nicht installiert werden. Auf der Homepage kann man sich ein sehr schlankes Paket runterladen, dass so wie der Gradle-Wrapper
Die in einem Projekt verwendete SBT Version wird in project/build.properties definiert.
Anders als man denken könnte führt taskC damit aber nicht taskA und taskB in der angegebenen Reihennfolge aus — zumindest
Wenn man eine bestimmte Reihenfolge erzwingen will kann man das wie bei Gradle über Abhängigkeiten machen oder über Def.sequential:
Der Zugriff auf Einstellungen oder dem Rückgabewert einer Task erfolgt immer über .value. Das funktioniert aber nur innerhalb
Ahead-of-time-Compilierung für Scala inklusive Low-Level-Operationen wie Structs und Pointer und Interoperabilität mit C.
Projekt vom EPFL.
Miles Sabin hat in einem Blog erläutert wie er den PR für SI-2712 entwickelt hat.
Clippy ist ein SBT-Plugin, dass schwer verständliche Compiler-Fehler in verständliche übersetzt.
wird übersetzt in
https://github.com/softwaremill/scala-clippy
Sven hatte von seiner Lösung geschwärmt, bei der Inhalte einer HTML-Datei via Macro als String eingebettet wurden. Leider ist diese Lösung nicht praxistauglich, da SBT die Abhängigkeit zwischen den beiden Sourcen nicht korrekt erkennt: Ändert sich die HTML-Datei, so erkennt SBT nicht, dass es die importierende Scala-Source-Datei neu kompilieren muss. Somit ist diese Lösung nicht praktisch einsetzbar.
Unser Hörer Daniel Jentsch hat sich Svens Fragestellung aus der letzten Episode angenommen, wie man einen String-Interpolator erstellt, der nicht das Ergebnis eines Ausdrucks einbettet, sondern den Ausdruck selbst (um z.B. Reafctoring-sichere Templates im Umfeld von Scala.js zu erstellen).
Das Ergebnis findet Ihr im Artikel Expressions in string interpolation
Awesome Scala ist eine von der Community erstellte Liste von nützlichen Scala-Libraries, Frameworks und Software.
Vielen Dank für den Tipp von Stefan Kaufmann.
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
Endlich hat Sven selber Erfahrungen mit Macros gesammelt. Auslöser waren erste Gehversuche mit Scala.js zur Umsetzung eines AngularJS-Projekts auf Basis von scalajs-angular.
Scala.js bietet nahezu alle Möglichkeiten von Scala, aber Reflection gehört nicht dazu. Probleme, die in Java üblicherweise über Reflection gelöst werden, lassen sich in Scala.js aber mit Macros meist eleganter und vor Allem zur Compilier-Zeit lösen.
scalajs-angular definiert zum Beispiel eine @injectable-Annotation um in Scala.js geschriebenen Komponenten den von Angular für Dependency-Injection benötigten Namen zuzuweisen. Darauf basierend hat Sven einige nützliche Macros erstellt:
Mehr zu meinen Erfahrungen mit Scala.js in der nächsten Episode.
Kleine Scala Bibliothek, die Zugriff auf Source-Code Informationen wie z.B. den Dateinamen oder der Zeile zur Laufzeit bietet. Die benötigten Objekte können dazu über implizite Parameter oder implicitly geholt werden.
=>
Gibt aus: foo(arg = bar)
SourceCode
Vervollständigt die Features von 2.12. Auffälligste Änderung ist der neue ScalaDoc-Style.
Es folgen M5 und danach RC1.
In Scala 2.12 geht es im Wesentlichen darum die neuen Java 8 Features optimal zu nutzen:
sbt-webverspricht mit Web-JARs die einfache Einbindung von JavaScript-Libraries und mit Plug-Ins einen einfachen Aufbau einer Frontend-Asset-Pipeline, um z.B. LESS- oder SASS-Dateien zu CSS zu compilieren, ES6-JavaScript nach ES5 zu compilieren, zu konkatenieren und zu minifizieren.
In der Praxis klappt das leider nicht: Die sbt-web-Plug-Ins sind halbherzig umgesetzt:
Mit sbt-web-Plug-Ins wie zum Beispiel sbt-play-gulp lässt sich eine Asset-Pipeline mit im JavaScript-Umfeld etablierten Build-Systemen (in diesem Fall GULP) aufbauen und in de Play-Lifecycle einbinden.
Scala Bibliothek zum Erzeugen von CSS, ähnlich wie LESS oder SASS, allerdings mit Scala-Code.
Bei CSS-Attributen oder Funktionen bei denen für die verschiedenen Browser ein Prefix verwendet werden muss kümmert ScalaCSS sich automatisch darum die Prefixe für alle Browser gesetzt werden.
ScalaCSS produziert hier auf Wunsch eine Warnung und es kann festgelegt werden, welcher Stil gewinnen soll.
Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
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).
From the publisher's feed