SP003: Strategic Scala Style, Kotlin 1.0
SIP: Scala Improvement Process
Der Scala Improvement Process unterscheidet SIPs und SLIPs.
SIP
- Änderungen an der Sprache oder am Compiler
- Führt normalerweise zu Änderungen an der Scala Language SpecificationScala Language Specification.
- Jeder kann einen SIP submitten
- Durchlaufen einen strengen Review-Prozess mit vielen Reviews und Diskussionen.
- Beurteilung durch das SIP-Komitee — derzeit bestehend aus
- Martin Odersky
- Josh Suereth
- Adriaan Moors
- Seth Tisue
- Dick Wall
- Heather Miller
SLIP
Der Scala Library Improvement Process ist ähnlich dem SIP, bezieht sich aber auf Änderungen und Erweiterungen an der Standard-Library. Er ist ebenfalls »intensiv«, aber deutlich weniger streng als der SIP.
Links
Strategic Scala Style: Principle of Least Power
Blog-Post von Li Haoyi zu Best Practices zum Schreiben von verständlichem Scala Code. Martin Odersky ist der Meinung, dass jeder Scala-Entwickler dieses Post gelesen haben sollte.
Principle of Least Power
- Komplexität ist Dein Feind
- Scheue Dich nicht vor Refactorings
- Vermeide Over-Engineering
Links
Scala Collection Guide
Toller Artikel zu Scala Collections von 47 Degrees:
- Vergleich von Mutable und Immutable Collections
- Vergleich von Seq, List und Vector
- Vergleich bzgl. Performance und Handhabbarkeit
- Übersichtliche Vergleichstabellen
- Typische Stolpersteine
- Klare Empfehlungen
Erkenntnis
Vector
ist als »general Purpose«-Lösung List
vorzuziehen.
Link
Kotlin 1.0
Nach viereinhalb Jahren ist Kotlin 1.0 erschienen.
Ziele
Ziel von Kotlin war es ursprünglich eine mächtigere Alternative zu Java zu schaffen, die folgende Bedingungen erfüllt:
- Adressierung der Pain-Points von Java (zum Beispiel Vermeidung von Boilerplate und NPEs)
- Hohe Interoperabilität mit Java
- JVM, Android und JavaScript als Ziel (in 1.0 ist JavaScript noch experimentell)
- Kleine Standard-Library und somit gute Eignung für zum Beispiel Android
- Von Anfang an mächtiges Tooling (Entwicklungsumgebung)
- Dabei aber einen Compiler, der mindestens so schnell ist wie der Java-Compiler
Sprach-Features
Hohe Ähnlichkeit zu Scala, aber deutlich abgespeckter Funktionsumfang.
- Kompakte Syntax (sieht auf den ersten Blick wie Scala aus)
- Alles ist ein Objekt
- Generics inklusive Varianz
- Klassen und Objekte
- Data-Classes (vergleichbar zu Case-Classes in Scala)
- Singletons
- Primäre Konstruktoren
- Properties
- Getter und Setters
- Interfaces (wie in Java 8: können Methoden implementieren, aber keinen Status haben)
- Delegation
- Funktionen
- Higher Order Functions und Lambdas
- Lokale Funktionen
- Default-Argumente
- Benannte Argumente
- Infix-Notation
- Tail Recursion
- Extension Functions
- Inline Functions
- Sonstiges
- Mutable und Immutable Collections
- Type-Checks und implizite Casts
- Destructing Declarations (ähnlich
unapply
) - Operator-Überladung
- Null-Safety
- keine checked Exceptions
- Dynamic Type
- String Templates (String-Interpolation)
Tools
Natürlich wird Kotlin ab Werk von IntelliJ und somit auch Android Studio unterstützt. Inzwischen gibt es auch eine erste Version eines Plug-Ins für Eclipse.
Einschätzung
Sven meint: Bei Kotlin wurde vieles richtig gemacht. Die Pain-Points von Java wurden adressiert, ohne die Schwelle so hoch zu legen, wie sie bei Scala ist (mir persönlich würden wahrscheinlich am meisten die Traits fehlen).
Nach dem Erfolg von Swift für iOS schreien viele nach einer Alternative zu Java für Android. Mit Kotlin ist diese bereits verfügbar und wird in der offiziellen Standardentwicklungsumgebung Android Studio direkt mitgeliefert und funktioniert out-of-the-box. Ich könnte mir vorstellen, dass Kotlin genau über diesen Weg erfolgreich werden könnte.
Das die Sprache von 20 bezahlten Vollzeitentwicklern weiterentwickelt und bei JetBrains selbst strategisch genutzt wird ist eine gute Grundlage.
Links
Akka 2.4.2
Akka 2.4.2 integriert Akka Streams & Akka HTTP.
Link
Play 2.5.0‑RC1
Erster Release-Candidate für Play 2.5.0.
Hauptthemen in Play 2.5.0
- Wechsel von Iteratees zu Akka streams für asynchrones IO-Streaming
- Java-API: Play-spezifische funktionale Typen wie
Promise
undOption
wurden durch ihre Java 8 Pendants ersetzt - Java-API: Annäherung der Java API an die von Scala auf Basis der neuen Möglichkeiten in Java 8 (z.B. Filter und eigene Body-Parser)
- Verbesserte Performance (bis zu 20%)
- Unterstützung für andere Logging-Frameworks (weg von Logback, hin zu SLF4J-kompatiblen Frameworks)
- Logging von SQL-Statements (unabhängig vom verwendeten Persistence-Framework)
Neues Streaming basierend auf Akka-Streams
- Bisheriger Mechanismus auf Basis von Iteratees ist mächtig und sicher, bringt aber eine steile Lernkurve mit sich
- Akka Streams bieten einen guten Kompromiss zwischen Sicherheit und Einfachheit
- Akka Streams finden in Play an folgenden Stellen Anwendung:
- Filter
- Streaming Response-Bodies
- Request Body-Parsers
- WebSockets
- Streaming Web-Service Client-Responses
- Iteratees können weiter genutzt werden.
Links
uPod 5 mit Unterstützung für Kapitelmarken
Svens komplett in Scala geschriebener Podcast-Player für Android bringt in Version 5 Unterstützung für Kapitelmarken, wie sie zum Beispiel auch bei unserem Podcast zum Einsatz kommen.
Damit kann man weniger interessante Themen (betrifft natürlich nicht unseren Podcast) überspringen oder Themen direkt anspringen.
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).
Paul
| #
Hallo zusammen.
Bin gestern rein zufällig auf euren Podcast gestoßen und bin recht froh, dass ich ihn nicht genervt weg geklickt habe. Habe erst vermutet, dass hinter dem Namen »Scalaprofis« irgendwelche abgehobenen Akademiker, die vom monadischen Olymp mit Verachtung auf das einfache Volk nieder schauen. 🙂
Aber ganz im Gegenteil, ist bisher sehr unterhaltsam und informativ. Gefällt mir sehr, sehr gut. Bin schon gespannt auf die Geschichten von den Scala Days.
Einen Tipp zum Typ Either wollte ich noch kurz los werden. Die Abneigung ihm gegenüber kann ich gut nachvollziehen — das ist so eine Seite an Scala, wo die funktionale Haskell-Fratze etwas deutlicher durchschimmert. Ich habe mir damals die Hände über den Kopf geschlagen und mich gefragt wie man damit nur arbeiten kann. Bis ich eine Eselsbrücke aufgeschnappt habe. Der Right-Part von Either enthält korrekte Werte (Right is right) und ins Left kommt der Rest: Errorcodes, Exceptions und sonstige Unwahrheiten. Habe gerade nochmal kurz recherchiert und die Eselsbrücke steht so tatsächlich in der Haskell-Doku drin: https://hackage.haskell.org/package/base‑4.9.0.0/docs/Data-Either.html
Die Dokumentation von Scala ist da nicht sooo einleuchtend.
Reply
Sven
| #
Vielen Dank für Deinen Kommentar Paul. Abgehoben sind wir tatsächlich (hoffentlich) nicht. Wir möchten tatsächlich einfach unsere Erfahrungen aus der Praxis wiedergeben — ganz ohne Akademisch zu sein.
Der Tipp mit dem »right = richtig« ist super — den werden wir mal in die nächste Episode mit reinnehmen.
Reply
Paul
| #
Nein, nein, alles gut. Für die Praxiserfahrungen bin ich auch echt dankbar. Muss beim hören des Podcasts hin und wieder grinsen: „Schau mal, die anderen haben ähnliche Probleme. Und SBT scheint tatsächlich not so simple zu sein.“ 🙂
Reply