23.08.2012

Taschenspielertricks - Spaßige Dinge, die man mit dem Scala-Typsystem machen kann

Die JUG nun auch in Wolfsburg. Und auch noch mit einem spannenden Vortrag. Klare Sache, da musste ich hin!
Der Einsatz von Scala in Real-Life-Projekten ist sicherlich noch sehr dünn, aber es lohnt sich aus meiner Sicht immer, dass man mal über den Tellerrand schaut.

Und dazu gehört auch, dass man sich das Typensystem von Scala und vor allem die Möglichkeiten etwas genauer anschaut. Die Beschreibung des Vortrags liest sich wie folgt:

In diesem Vortrag werden einige Dinge vorgestellt, die man mit dem Typsystem anstellen kann – angefangen beim beliebten „Pimp my Library“-Pattern bis zum Nachweis, dass das Typsystem Turing-vollständig ist. Aber nicht alles ist Taschenspielerei. So manches lässt sich sehr sinnvoll in realen Projekten einsetzen.

Macht auf jeden Fall neugierig. Der Referent Jens Schauder war bereits aus anderen Veranstaltungen, wie dem Webmonday oder anderen Vorträgen im Rahmen der JUG bekannt und auch seine Affinität zu Scala war nicht neu.
Nach kurzer Begrüßung der etwas mehr als 15 Teilnehmer ging es in die kurze Einleitung (was ist ein Typ, was ist eine Klasse), zu den ersten Schritten in Scala und der groben Einordnung des Vortrags. Dabei wurde klar, dass die Veranstaltung sicherlich nicht dazu gedacht war neue Teilnehmer in Scala einzuführen, sondern es ging direkt in die fortgeschrittenen Themen.

Den Anfang machten die implicit conversions. Die wichtigste Regel ist, dass der Compiler versucht bei den entsprechenden Objekten (von Quell- und Zieltyp) nach passenden Methoden zu suchen. Ist also eine Methode für einen speziellen Typ nicht vorhanden, sucht der Compiler einen passenden Typen anhand der definierten Regeln.

Mit den structural types kam das Thema Duck-Typing auf. Structural types beschreiben Objekte nicht anhand ihres Namens, sondern anhand ihrer Struktur. Ein mögliches Äquivalent in Java sind Interfaces, wenngleich nicht so mächtig. Nah an den anonymen Typen in .NET (Ein Type mit einer Menge von Methoden und Werten, aber ohne Namen), bieten die structural types die Möglichkeit Funktionen auf Objekten auszuführen, ohne deren genaue Position innerhalb der Type-Hierachy zu kennen.

Danach wurde die Luft schon etwas dünner, es ging weiter mit den phantom types. Definitionen von Typen, die niemals eine Instanz besitzen. Aha...
Validierung bereits beim Kompilieren des Codes und daher eine Hilfestellung für den Entwickler. Grundlage ist ein Sub-Typing, welches durch Fehlermeldungen des Typsystems bereits zur Compile-Zeit Fehler aufzeigt. Vorteil ist die dadurch vorhandene, zusätzliche Sicherheit bei der Verwendung von Datentypen. Ein tolles Beispiel ist Tic-Tac-Toe, gelöst nur mit Hilfe der phantom types.

Kurz vor Erreichen des Gipfels noch ein kleiner Ausflug in die Welt der type lamdas. Was ist das? Ein kleines, aber prägnantes Beispiel zeigt die Verwendung:


Toll was mit dem Typsystem machbar ist. Noch viel besser, wenn man weiß, dass man Gebilde aus Gruppentheorie, Funktionstheorie oder anderen mathematischen Gebieten knapp, präzise und im Zweifel unlesbar für andere Entwickler abbilden kann. Sicherlich findet man das ein oder andere Einsatzgebiet, aber das ist schon echt heftig...

Der Gipfel war dann gegen 20:45 erreicht, als eine eigene Definition von Boolean inkl. der Prüfung zur Compile-Zeit auf dem Beamer erschien. Ziel war es anzudeuten, dass das Typsystem in Scala Touring-Vollständig ist. Spannend, aber sicherlich zu theoretisch um innerhalb von 10 Minuten abgehandelt zu werden! Sollte sich jemand für die Touring-Vollständigkeit interessieren, so kann man sich sicherlich mal durch den Blog von Michid oder dem von Apocalisp.

Gefallen habe ich daran gefunden, wenngleich ich sagen muss, dass der ein oder andere Einsatzzweck für mich verborgen geblieben ist ;-)

1 Kommentar:

  1. Sieht alles sehr, sehr wartbar aus, Sascha. Nicht so wie bei Java, C# & Co. wo man morgen schon nicht mehr weiss, was man gestern mit dem Code eigentlich bewirken wollte…

    Vorbereitend zum zukünftigen, weitflächigen Einsatz von Scala sei begleitend Sriram Srinivasans "Advanced Perl Programming" empfohlen (http://www.amazon.com/Advanced-Perl-Programming-Sriram-Srinivasan/dp/1565922204), denn "Die Samen der Vergangenheit sind die Früchte der Zukunft".

    Ich gehe jetzt ein wenig Absinth saufen, macht mich einfach kreativer und strukturierter für die kommenden IT Entwicklungen.

    Axel

    AntwortenLöschen