Artwork

Inhalt bereitgestellt von Sven Wiegand and Benjamin Hagemeister. Alle Podcast-Inhalte, einschließlich Episoden, Grafiken und Podcast-Beschreibungen, werden direkt von Sven Wiegand and Benjamin Hagemeister oder seinem Podcast-Plattformpartner hochgeladen und bereitgestellt. Wenn Sie glauben, dass jemand Ihr urheberrechtlich geschütztes Werk ohne Ihre Erlaubnis nutzt, können Sie dem hier beschriebenen Verfahren folgen https://de.player.fm/legal.
Player FM - Podcast-App
Gehen Sie mit der App Player FM offline!

SP05/17: scala.meta und mehr

1:20:37
 
Teilen
 

Manage episode 179695818 series 1206977
Inhalt bereitgestellt von Sven Wiegand and Benjamin Hagemeister. Alle Podcast-Inhalte, einschließlich Episoden, Grafiken und Podcast-Beschreibungen, werden direkt von Sven Wiegand and Benjamin Hagemeister oder seinem Podcast-Plattformpartner hochgeladen und bereitgestellt. Wenn Sie glauben, dass jemand Ihr urheberrechtlich geschütztes Werk ohne Ihre Erlaubnis nutzt, können Sie dem hier beschriebenen Verfahren folgen https://de.player.fm/legal.

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

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

JNI mit ScalaNative

Links

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?

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

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:

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

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

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

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

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

Kauf uns einen Kaffee

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

Creative Commons Lizenzvertrag
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).

  continue reading

Kapitel

1. Intro (00:00:00)

2. Drei neue Scala-Releases (00:01:48)

3. 4. Meeting des Scala Centers (00:06:22)

4. JNI mit ScalaNative (00:17:59)

5. Scala.meta (00:22:35)

6. Akka Typed (00:55:24)

7. Alpakka (00:59:54)

8. scalajs-bundler (01:04:17)

9. Kotlin/Native (01:10:14)

10. Anrdoid Announces Support for Kotlin (01:11:46)

11. Outro (01:19:36)

15 Episoden

Artwork

SP05/17: scala.meta und mehr

Scala Profis

13 subscribers

published

iconTeilen
 
Manage episode 179695818 series 1206977
Inhalt bereitgestellt von Sven Wiegand and Benjamin Hagemeister. Alle Podcast-Inhalte, einschließlich Episoden, Grafiken und Podcast-Beschreibungen, werden direkt von Sven Wiegand and Benjamin Hagemeister oder seinem Podcast-Plattformpartner hochgeladen und bereitgestellt. Wenn Sie glauben, dass jemand Ihr urheberrechtlich geschütztes Werk ohne Ihre Erlaubnis nutzt, können Sie dem hier beschriebenen Verfahren folgen https://de.player.fm/legal.

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

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

JNI mit ScalaNative

Links

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?

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

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:

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

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

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

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

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

Kauf uns einen Kaffee

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

Creative Commons Lizenzvertrag
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).

  continue reading

Kapitel

1. Intro (00:00:00)

2. Drei neue Scala-Releases (00:01:48)

3. 4. Meeting des Scala Centers (00:06:22)

4. JNI mit ScalaNative (00:17:59)

5. Scala.meta (00:22:35)

6. Akka Typed (00:55:24)

7. Alpakka (00:59:54)

8. scalajs-bundler (01:04:17)

9. Kotlin/Native (01:10:14)

10. Anrdoid Announces Support for Kotlin (01:11:46)

11. Outro (01:19:36)

15 Episoden

Alle Folgen

×
 
Loading …

Willkommen auf Player FM!

Player FM scannt gerade das Web nach Podcasts mit hoher Qualität, die du genießen kannst. Es ist die beste Podcast-App und funktioniert auf Android, iPhone und im Web. Melde dich an, um Abos geräteübergreifend zu synchronisieren.

 

Kurzanleitung