SIP: Scala Improvement Process
Der Scala Improvement Process unterscheidet SIPs und SLIPs.
SIP
Änderungen an der Sprache oder am CompilerFührt normalerweise zu Änderungen an der Scala Language SpecificationScala Language Specification.Jeder kann einen SIP submittenDurchlaufen einen strengen Review-Prozess mit vielen Reviews und Diskussionen.Beurteilung durch das SIP-Komitee — derzeit bestehend ausMartin OderskyJosh SuerethAdriaan MoorsSeth TisueDick WallHeather 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
Scala Improvement ProcessStrategic 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 FeindScheue Dich nicht vor RefactoringsVermeide Over-EngineeringLinks
Strategic Scala Style: Principle of Least PowerEmpfehlung von Martin Odersky auf TwitterScala Collection Guide
Toller Artikel zu Scala Collections von 47 Degrees:
Vergleich von Mutable und Immutable CollectionsVergleich von Seq, List und VectorVergleich bzgl. Performance und HandhabbarkeitÜbersichtliche VergleichstabellenTypische StolpersteineKlare EmpfehlungenErkenntnis
Vector ist als »general Purpose«-Lösung List vorzuziehen.
Link
Adventures with Scala CollectionsKotlin 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 JavaJVM, Android und JavaScript als Ziel (in 1.0 ist JavaScript noch experimentell)Kleine Standard-Library und somit gute Eignung für zum Beispiel AndroidVon Anfang an mächtiges Tooling (Entwicklungsumgebung)Dabei aber einen Compiler, der mindestens so schnell ist wie der Java-CompilerSprach-Features
Hohe Ähnlichkeit zu Scala, aber deutlich abgespeckter Funktionsumfang.
Kompakte Syntax (sieht auf den ersten Blick wie Scala aus)Alles ist ein ObjektGenerics inklusive VarianzKlassen und ObjekteData-Classes (vergleichbar zu Case-Classes in Scala)SingletonsPrimäre KonstruktorenPropertiesGetter und SettersInterfaces (wie in Java 8: können Methoden implementieren, aber keinen Status haben)DelegationFunktionenHigher Order Functions und LambdasLokale FunktionenDefault-ArgumenteBenannte ArgumenteInfix-NotationTail RecursionExtension FunctionsInline FunctionsSonstigesMutable und Immutable CollectionsType-Checks und implizite CastsDestructing Declarations (ähnlich unapply)Operator-ÜberladungNull-Safetykeine checked ExceptionsDynamic TypeString 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
Kotlin 1.0 releasedKotlin HomepageAkka 2.4.2
Akka 2.4.2 integriert Akka Streams & Akka HTTP.
Link
Announcement: Akka 2.4.2 releasedPlay 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-StreamingJava-API: Play-spezifische funktionale Typen wie Promise und Option wurden durch ihre Java 8 Pendants ersetztJava-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 sichAkka Streams bieten einen guten Kompromiss zwischen Sicherheit und EinfachheitAkka Streams finden in Play an folgenden Stellen Anwendung:FilterStreaming Response-BodiesRequest Body-ParsersWebSocketsStreaming Web-Service Client-ResponsesIteratees können weiter genutzt werden.Links
Play 2.5.0‑RC1 releasedWhat’s new in Play 2.5uPod 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
uPod 5.0: A new Chapter in PlaybackuPod auf Google Play Gib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
Kapitel
Opener (00:00:00.000)
Scala Improvement Process (00:00:59.945)
Strategic Scala Style (00:04:13.240)
Scala Collection Guide (00:48:45.219)
Kotlin 1.0 (00:52:44.376)
Akka 2.4.2 (01:13:35.277)
Play 2.5.0 RC1 (01:14:24.749)
uPod 5.0 (01:17:20.605)
Outro (01:18:06.611)
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).