Clojure in Lehre und Forschung Johannes Brauer NORDAKADEMIE Hochschule der Wirtschaft 29. Mai 2015 Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 1 / 22
Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 2 / 22
Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 3 / 22
Merkmale [ECG12, Hig15] Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] Autor: Rich Hickey, 2008, http://clojure.org stürmische Entwicklung Jede Woche erscheint ein neues Clojure-Buch. Planet Clojure verzeichnet über 400 Clojure-Blogs. Findet zunehmend Beachtung in der Industrie. Lisp-Dialekt gehostete Sprache läuft auf der Java Virtual Machine Variante: ClojureScript wird nach JavaScript kompiliert strenge, dynamische Typisierung betont den funktionalen Programmierstil starke Unterstützung von paralleler und asynchroner Programmierung Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 4 / 22
Clojure Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] Try Clojure Command line tool - the repl java -cp clojure.jar clojure.main LightTable is a new interactive IDE La Clojure and IntelliJ IDEA Eclipse and Counterclockwise Clojure with Emacs Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 5 / 22
Clojure-Datenstrukturen Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] Atomare Datentypen Ganzzahlen beliebiger Genauigkeit 123456789876543 Doubles 1.234, BigDecimals 1.234M Rationale Zahlen 7/13 Strings "Karl", Characters \R \o \s \a Symbole daniel gustav, Keywords :duesentrieb :gans true, false, nil Datenstrukturen Listen einfach verkettet, wachsen vorn (Karl ist 27), (list 2 3 4) Vektoren Zugriff per Index, wachsen hinten [a b c [d e f]] Maps Mengen von Schlüssel-Wert-Paaren {:a 1, :b 2, :c 3}, {"Karl" 27 "Rosa" 45} Mengen #{karl rosa klara} Alle können beliebig ineinander verschachtelt werden. Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 6 / 22
Persistente Datenstrukturen [Oka98, Hic09] Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] In Clojure sind alle Datenstrukturen unveränderbar (immutable). Keine Synchronisierung bei konkurrierendem Zugriff erforderlich Datenstrukturen sind (wie Funktionen) Werte erster Ordnung. Jede Änderung liefert neue Version einer Datenstruktur: ( def m {: a 1 : b 2}) m ; ; => {: a 1, : b 2} ( assoc m : c 5) ; ; => {: c 5, : a 1, : b 2} m ; ; => {: a 1, : b 2} Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 7 / 22
an der NORDAKADEMIE anderswo Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 8 / 22
an der NORDAKADEMIE an der NORDAKADEMIE anderswo im Bachelor-Studiengang Wirtschaftsinformatik : Modul Abstraktionskonzepte der Informatik funktionale Abstraktion (funktionale Programmierung) Datenabstraktion Typsysteme Algebraische Spezifikation von Datentypen im Bachelor-Studiengang Angewandte Informatik : Modul Programmierparadigmen funktionale Programmierung prädikative Programmierung Constraint programming in Zukunft in der Programmiergrundausbildung aktuelle Diskussion im Fachbereich Informatik Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 9 / 22
anderswo Projekt Clojure in Education (ClojurEd)[MAE13] der University of Minnesota, Morris incorporating Clojure into undergraduate curriculum an der NORDAKADEMIE anderswo Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 10 / 22
Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 11 / 22
Die DSL-Akademie Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Thema: Innovationen im Bereich n aus der Sicht der Praxis [BCK08] akademischer Zirkel bestehend aus: Dr. Christoph Crasemann Dr. Hartmut Krasemann Stefanie Jasser mir Schwerpunktthema der letzten Zeit: Überwindung der semantischen Lücke zwischen Allzwecksprachen und Anwendungsdomänen Implementierungstechniken für domänenspezifische Sprachen [KBC11] Implementierung einer in Smalltalk eingebetteten Sprache für die Erzeugung klassenloser Objekte (DOSL) [BKC12] Vortrag auf NKIF 2012 Implementierung einer Parserkombinator-Bibliothek in Clojure [Bra15] DOSL für Clojure Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 12 / 22
Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Objekte als Closures 1 ( defn person [ ] 2 ( l e t [ name (atom n i l ) 3 vorname (atom n i l ) 4 set name ( fn [ n ] ( r e s e t! name n )) 5 set vorname ( fn [ n ] ( r e s e t! vorname n )) 6 get name ( fn [ ] @name) 7 get vorname ( f n [ ] @vorname ) 8 vollname ( fn [ ] ( s t r @vorname " " @name ) ) ] 9 ( fn [ message ] 10 ( cond (= message : set name) set name 11 (= message : set vorname ) set vorname 12 (= message : get name) get name 13 (= message : get vorname ) get vorname 14 (= message : get vollname ) vollname 15 : e l s e ( throw ( Exception. 16 ( s t r "Message not understood : " 17 message ) ) ) ) ) ) ) Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 13 / 22
person Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben ( def p ( person )) (( p : set vorname ) "Gustav ") (( p : set name) "Gans ") (( p : get vollname )) ; ; => "Gustav Gans" Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 14 / 22
Funktionale Objekte Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Den Begriff functional objects prägte Mattias Felleisen in einer Keynote der ECOOP 2004 in Oslo am 16 Juni 2004. ( defn person [ n v ] ( l e t [ name n vorname v get name ( fn [ ] name) get vorname ( fn [ ] vorname ) vollname ( fn [ ] ( s t r vorname " " name )) gruss ( fn [ grussformel ] ( s t r grussformel " " ( vollname ) ) ) ] {: get name get name : get vorname get vorname : vollname vollname : gruss gruss })) ( def p ( person "Gans" "Gustav ")) (( p : gruss ) " Hallo ") ; ; => " Hallo Gustav Gans" Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 15 / 22
klassenlose Objekte Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben In der Syntax der DOSL wird das person-objekt aufgeschrieben, ohne dass vorher eine Klassendefintion angelegt werden muss: ( obj [ name "Gans" vorname "Gustav "]) Technisch liefert der Ausdruck wieder eine Dispatcher-Funktion, die mit dem Namen einer Methode als Argument aufgerufen werden kann: (( obj [ name "Gans" vorname "Gustav "]) name) ; ; => "Gans" Ein DOSL-Objekt kann auch an ein Symbol gebunden werden: ( def p ( obj [ name "Gans" vorname "Gustav "])) (p vorname ) ; ; => "Gustav" Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 16 / 22
Ergänzungen Definition von Methoden: Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben ( defobj p [ name "Gans" vorname "Gustav" vollname ( fn [ ] ( s t r vorname " " name ) ) ] ) (p vollname ) ; ; => "Gustav Gans" Nachträgliches Hinzufügen von Slots: ( def p (add s l o t p gruss ( fn [ grussformel ] ( s t r grussformel " " ( vollname ) ) ) ) ) (p gruss " Hallo ") ; ; => " Hallo Gustav Gans" Set-Methoden automatisch erzeugt: (( p name "Ente ") name) ; ; => "Ente" (p name) ; ; => "Gans" Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 17 / 22
Implementierung Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Die Implementierung der DOSL erfolgt hauptsächlich durch drei Clojure-Makros: obj Erzeugung der DOSL-Objekte defobj syntaktischer Zucker für die Bindung eines Objekts an eine Variable add-slot Erzeugung eines neuen Objekts durch Hinzufügen eines Slots Zusammen mit Hilfsfunktionen und -makros ca. 50 LOC. Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 18 / 22
Vorhaben Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Überarbeitung des Curriculums für die Programmiergrundausbildung in den Informatik-Studiengängen Abschied von objects first (und Smalltalk) Eine Idee (unter vielen) für das erste Studienjahr: Einstieg mit funktionaler Programmierung funktionale Objekte Klassen als expliziten Abstraktionsmechanismus einführen DSL-Akademie: Nutzung von funktionalen Objekten für die Entwicklung einer DSL für eine kaufmännische Domäne Nutzung von Clojure für die Umsetzung des Data-Context-Interaction-Architekturmusters [CR12] Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 19 / 22
Literatur Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 20 / 22
Literatur technisch: Möglichkeit der Klassenbildung? änderbare Objekte? Ist das DCI-Architekturmuster tragfähig? Ist Clojure als DCI-Sprache geeignet? didaktisch Wie wird das didaktische Konzept für die Programmiergrundausbildung aussehen? Wird Clojure (DOSL) ggf. dabei helfen? Ihre Fragen! Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 21 / 22
Literatur [BCK08] Brauer, Johannes, Christoph Crasemann und Hartmut Krasemann: Auf dem Weg zu idealen Programmierwerkzeugen Bestandsaufnahme und Ausblick. Informatik-Spektrum, 31(6):580 590, Dezember 2008. [BKC12] Brauer, Johannes, Hartmut Krasemann und Christoph Crasemann: Implementierung einer in Smalltalk eingebetteten Sprache für die Erzeugung klassenloser Objekte. In: Forschung für die Wirtschaft 2012. NORDAKADEMIE Hochschule der Wirtschaft, 2012. [Bra15] [CR12] Brauer, Johannes: Implementierung einer Parserkombinator-Bibliothek in Clojure. In: Forschung für die Wirtschaft 2015. NORDAKADEMIE Hochschule der Wirtschaft, 2015. Coplien, James O. und Trygve Mikkjel Heyerdahl Reenskaug: The data, context and interaction paradigm. In: SPLASH 12: Proceedings of the 3rd annual conference on Systems, programming, and applications: software for humanity, Seiten 227 228, New York, NY, USA, 2012. ACM. [ECG12] Emerick, Chas, Brian Carper und Christophe Grand: Clojure Programming. O Reilly Media, Inc, 2012. Hickey, Rich: The clojure programming language. In: Proceedings of the 2008 symposium on Dynamic languages, Seite 1. ACM, 2008. [Hic09] Hickey, Rich: Persistent Data Structures and Managed References. https://github.com/engelberg/instaparse, 2009. zuletzt aufgerufen am 11. 4. 2015. [Hig15] Higginbotham, Daniel: Clojure for the Brave and True. Leanpub, 2015. [KBC11] Krasemann, Hartmut, Johannes Brauer und Christoph Crasemann: DSLs MIT PARSER-KOMBINATOREN: Mit wenig Code zu einer Harel- Statechart-DSL. OBJEKTspektrum, (4), 2011. [MAE13] Machkasova, Elena, Stephen J Adams und Joe Einertson: Steps towards teaching the Clojure programming language in an introductory CS class. 2013. [Oka98] Okasaki, Chris: Purely Functional Data Structures. Cambrigde University Press, 1998. Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 22 / 22