Dynamische Sprachen auf der JVM

Werbung
Dynamische Sprachen auf der JVM
Christian Müller
29. April 2009
Dynamische Sprachen
“Dynamic programming language is a term used broadly in computer science to describe a class of high­level programming languages that execute at runtime many common behaviors that other languages might perform during compilation, if at all.”
wikipedia.org
2
Eigenschaften dynamischer Sprachen
●
dynamische Typprüfung
●
eval­Funktion
●
(Funktionen höherer Ordnung)
●
Closures
●
Continuations
●
Mixins
●
Reflection
3
●
Skriptsprache
●
„Erweiterung“ von Javas Syntax
●
spezielle Syntax für Datenbankzugriffe und XML­Dateien
4
Dynamische Typprüfung (Bsp.)
●
Bestimmung des Maximums von zwei Werten
5
Dynamische Typprüfung
●
Typkorrektheit wird zur Laufzeit überprüft
●
Vorteile
●
–
flexibler beim programmieren
–
trennt Algorithmus und Implementationsdetails
Nachteile
–
kann Fehler nicht ausschließen
–
schwerer zu debuggen
–
zusätzlicher Aufwand zur Laufzeit
6
Typprüfung auf der JVM
●
●
Funktionssignaturen sind im Konstantenpool gespeichert
Bytecodes invokeinterface, invokespecial und invokevirtual benötigen diese Signaturen
7
Typprüfung in Groovy
●
Groovy Compiler: bsp1.groovy ­> bsp1.class
●
Decompiler: bsp1.class ­> bsp1.java
8
Clojure
●
Lisp­Dialekt
●
rein funktional
●
Macros
9
Closures (Funktionsabschluss)
●
●
●
●
bezeichnet Funktionen die den Kontext in dem sie definiert wurden „konservieren“
ermöglicht information hiding
Funktionen die den selben Kontext abschließen können privat kommunizieren
mit Closures können Objektsysteme und Kontrollstrukturen implementiert werden
10
Closures (Bsp.)
●
●
Funktion die abhängig vom Parameter x eine Closure erzeugt
Verwendung der Funktion
11
Closures in Clojure
●
●
●
●
jede Funktionsdefinition wird in einer eigenen Klasse abgebildet
die Klasse hat eine invoke Methode die die Funktionalität bereitstellt
der Kontext wird durch Klassenvariablen gespeichert
werden mehrere Funktionen im selben Kontext definiert, verweisen die Variablen auf dieselben Objekte
12
Closures in Groovy
●
Problem: Java hat keine Funktionen höherer Ordnung
●
●
13
Mixins
●
●
●
●
erstellen von Objekten mit Hilfe von Klassendefinitionen die zur Laufzeit „zusammengestellt“ werden
vergleichbar mit einem Interface bei dem die Funktionen schon implementiert sind
Mixins dienen also nicht der Spezialisierung, sondern dem Zusammenstellen von Funktionalität
ermöglicht Mehrfachvererbung
14
Mixins (Bsp.)
●
MyCounter ist Unterklasse von Counter und benutzt die Mixins Resettable und Undoable
Counter
Resettable
MyCounter
...
Undoable
15
Mixins auf der JVM
●
●
jedes Mixin wird durch ein Interface abgebildet
„Vererbung“ durch einfaches kopieren der Funktionalität
16
Dynamische Sprachen auf der JVM
a
Jy
Sc
al
on
Jr
th
ub
y
y
ov
G
ro
ju
lo
C
dynamische Typprüfung
eval Funktion
Fkt. höherer Ordnung
Mixins
Closures
Continuations
Reflection
Macros
Ja
va
re
­
­
­
­
­
­
x
x
x
­
x
x
x
x
x
x
x
­
x
x
x
x
x
x
x
x
­
x
x
x
­
­
x
­
x
­
x
­
x
*
x
x
­
17
Quellen
●
http://en.wikipedia.org/wiki/Dynamic_programming_language
●
http://groovy.codehaus.org/Getting+Started+Guide
●
http://clojure.org/getting_started
●
http://en.wikipedia.org/wiki/List_of_JVM_languages
●
http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html#invokevirtual
●
http://jnb.ociweb.com/jnb/jnbMar2009.html
18
Herunterladen