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