Scala Profis

Der Podcast aus Berlin, rund um die Programmiersprache Scala. Mit Neuigkeiten, Know-How und allem was uns sonst noch so einfällt. Für alle Scala-Enthusiasten und solche die es werden wollen. Für Dich am Mikrofon: Benjamin Hagemeister und Sven Wiegand.

https://scalaprofis.de

subscribe
share






episode 12: SP05/17: scala.meta und mehr


Drei neue Scala-Releases

Am 18. April wurden gleich [drei Releases angekündigt]((http://www.scala-lang.org/news/releases-1Q17.html).

  • Scala 2.11.11: Letztes Release der 2.11er Reihe. Bugfixes. (Hinweis: 2.11.9 und 2.11.10 hat es nicht gegeben)
  • Scala 2.12.2: Bringt neben diversen Fixes mit »Trailing Commas« (SIP-27) den ersten Proposal gemäß des überarbeiteten Scala Improvement Process‹.
  • Scala 2.13.0‑M1: Basis für Modularisierung und Collection-Überarbeitung.
Links
  • Three new releases and more GitHub goodness!
4. Meeting des Scala Centers (Q1 2017) Scala Center Aktivitäten
  • Scastie:
    • Wird als nützlich für Einsteiger und für die Community zum Teilen von Code-Schnippseln eingestuft.
    • Bleibt in der Beta-Phase, bis Scala Center ausreichende Server-Ressourcen sichergestellt hat.
    • 47 Degrees hat sich bereiterklärt bei der Bereitstellung eines brauchbaren UIs zu unterstützen.
  • Zinc: Von den aktuellen Arbeiten werden sbt 1.0 und andere Build-Tools profitieren.
  • Scalafix: Es besteht die Hoffnung, dass mehr und mehr Libraries Scalafix zur Migration auf neue Versionen einsetzen.
  • Websites:
    • 47 Degrees hat mehrere umfangreiche Pull-Requests zur Scala-Website gestellt, die hoffentlich bald gemergt werden.
    • Ein externer Contractor arbeitet an den »Getting Started«- und »Language Tour«-Seiten.
  • Scala.js:
    • Scala.js ist stark am wachsen
    • scalajs-bundler gewinnt ebenfalls an Interesse
  • Scala Native: Läuft auf kleiner Flamme, bis Neueinstellung bereitsteht.
  • Scaladex: Eine UI-Überarbeitung ist geplant, da das UI inzwischen etwas unaufgeräumt wirkt.
Sonstiges
  • Community Builds: Arbeitet an einem Proposal zur Durchführung regelmäßiger Builds SBT-basierter Open-Source-Projekte um die Rückwärtskompatibilität von Neuentwicklungen im Scala-Compiler sicherzustellen.
Links
  • Minutes of the 4th meeting of the Scala Center, Q1 2017
JNI mit ScalaNative Links
  • JNA
  • JNI vs. JNA
  • Capturing Packets with Scala Native and libpcap
Was ist scala.meta?

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.

Features
  • Parsing inkl. Format und Kommentaren
  • Unterstützt verschiedene Dialekte (Scala 2.11, 2.12 und Dotty)
  • Quasiquotes
  • Macro-Annotations
  • Verfügbar für
    • Scala 2.11
    • Scala 2.12
    • Scala.js
Was bringt die Zukunft?
  • Semantische API
  • Inline Macros
  • Support für
    • Scala 2.10
    • Scala Native
Dokumentation

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.

Was ist besser?

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:

class MyAnnotation extends scala.annotation.StaticAnnotation { inline def apply(defn: Any): Any = meta { defn match { case obj: Defn.Object => ... case cls: Defn.Class => ... case _ => abort("@MyAnnotation is only allowed for classes and objects.") } } }

Ü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:

object Util{ ... def getName(c: Compat.Context)(s: c.Symbol) = s.name.decoded.toString.trim }

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:

class MyAnnotation extends scala.annotation.StaticAnnotation { inline def apply(defn: Any): Any = meta { defn match { case obj: Defn.Object => ... case cls: Defn.Class => val className = cls.name.value ... case _ => abort("@MyAnnotation is only allowed for classes and objects.") } } }

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.

scala.meta und IntelliJ IDEA Verwenden von Macro-Annotations

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.

Debugging

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.

Links
  • scala.meta
  • Changelog
  • Quasiquotes
  • Semantic Tooling at Twitter
  • Macro Paradise
  • scalafmt
  • scalafix
  • Meta-based def macros are coming
  • A Whirlwind Tour of scala.meta
  • scala.meta Gitter channel
  • stackoverflow
  • Elysium
  • Debug Scala compiler plugin in IntelliJ IDEA
Akka Typed

Wer einen Eindruck von »Akka Typed« erhalten will kann sich die Blog-Reihe auf dem Akka-Blog anschauen, die bisher aus drei Artikeln besteht:

  • Akka Typed: Hello World in the new API
  • Akka Typed: Coexistence
  • Akka Typed: Mutable vs. Immutable
Alpakka

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.

Connectoren
  • AMQP Connector
  • AWS DynamoDB Connector
  • AWS Lambda Connector
  • AWS S3 Connector
  • AWS SNS Connector
  • AWS SQS Connector
  • Cassandra Connector
  • File Connectors
  • FTP Connector
  • Google Cloud Pub/Sub
  • HBbase connector
  • IronMq Connector
  • JMS Connector
  • MQTT Connector
  • Server-sent Events (SSE) Connector
Externe Connectoren
  • HTTP Client
  • File IO
  • Kafka
  • TCP
  • Azure
  • Eventuate
  • FS2
  • Camel
  • MongoDB
Daten-Transformationen
  • Parsing Lines
  • Comma-Separated Values — CSV
  • RecordIO Framing
Links
  • Alpakka
  • Ankündigung von Alpakka (23.08.2016)
scalajs-bundler

scalajs-bundler ermöglicht es NPM-Dependencies in scala.js via SBT anzubinden.

Bisherige Lösungen
  • JS-Files ins Projekt kopieren und via ProvidedJS einbinden
  • WebJars
scalajs-bundler nutzen

Nachdem hinzufügen des SBT Plugins (und der lokalen Installation von NPM) können NPM-Dependencies einfach eingebunden werden:

npmDependencies in Compile += "snabbdom" -> "0.5.3"

Für sbt-web steht ebenfalls eine Variante des scalajs-bundlers bereit.

Links
  • scalajs-bundler
Kotlin/Native

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.

Links
  • Kotlin/Native Tech Preview: Kotlin without a VM
Android Announces Support for Kotlin

Auf der diesjährigen Google I/O hat Google Kotlin als offiziell unterstützte Programmiersprache für Android beworben.

Links
  • Android Announces Support for Kotlin

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

Kapitel
  1. Intro (00:00:00.000)
  2. Drei neue Scala-Releases (00:01:48.888)
  3. 4. Meeting des Scala Centers (00:06:22.317)
  4. JNI mit ScalaNative (00:17:59.832)
  5. Scala.meta (00:22:35.128)
  6. Akka Typed (00:55:24.621)
  7. Alpakka (00:59:54.456)
  8. scalajs-bundler (01:04:17.336)
  9. Kotlin/Native (01:10:14.808)
  10. Anrdoid Announces Support for Kotlin (01:11:46.168)
  11. Outro (01:19:36.600)
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).


fyyd: Podcast Search Engine
share








 May 22, 2017  1h20m