Prof. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt

Ähnliche Dokumente
Funktionale Programmierung (in Clojure)

Programmieren in COMMON LISP

Alles außer Java! JVM-Sprachen sagen Happy Birthday

(Common Lisp) Ein Vortrag von Matthias Schütz und Andreas Klein. auf dem UUGRN FixMe Treffen ( )

Guile Die Erweiterungssprache des GNU-Projekts

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.

Beispiel: Hamming-Folge Erzeuge eine Folge X = x 0,x 2,... mit folgenden Eigenschaften: 1. x i+1 > x i für alle i

6. Verkettete Strukturen: Listen

Algorithmen und Datenstrukturen II

13. Funktionale Konzepte in Java

SmallTalk - Eine kurze Einführung

vii 4 t.scheme: Funktionale Programmierung Funktionen als Daten erster Klasse

LISP. Viele eklige Klammern. Entropia e.v. - CCC Karlsruhe

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

II.1.1. Erste Schritte - 1 -

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

Programmierparadigmen

Klassen als Datenstrukturen

Grundlagen der Programmierung 2. Operationale Semantik

Python zur Lösung von AvA Übung 1 VON MORITZ FEY

Clojure in Lehre und Forschung

Freie Markierung Die Templating-Engine FreeMarker im Einsatz

Workshop Einführung in die Sprache Haskell

II.1.1. Erste Schritte - 1 -

11. Funktionale Konzepte in Java

Der Datentyp String. Stringvariable und -vergleiche

Repetitorium Informatik (Java)

Grundlagen der Informatik 0

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Klaus Schmidt PHP 4. Computer & Literatur Verlag GmbH

Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES

Informatik I. Grundlagen der systematischen Programmierung. Peter Thiemann WS 2007/08. Universität Freiburg, Germany

Crashkurs C++ - Teil 1

10. Felder (Arrays) Teil 2. Java-Beispiele: Echo.java Primzahlen.java Monate.java. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Objekt-Funktionale Programmierung. am Beispiel von SCALA. Thorsten Jolitz

Memory Models Frederik Zipp

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom : Scala Eine praktische Einführung

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom : Scala Eine praktische Einführung

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Praktische Informatik 1

Einstieg in die Informatik mit Java

1.1 Abstrakte Datentypen 1.2 Lineare Strukturen 1.3 Bäume 1.4 Prioritätsschlangen 1.5 Graphen

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

Proseminar Aspekte funktionaler Programmierung und ihrer Anwendung

Algorithmen und Datenstrukturen

Programmiersprachenkonzepte

1. Typen 1.1 Typsicherheit 1.2 Typprüfung

Einführung in die Programmierung 1

Software Entwicklung 1

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Escher funktionale und logische Programmierung

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

LISP A programmable programming language

Web-basierte Anwendungssysteme PHP-Einführung

Werkzeuge zur Programmentwicklung

Gliederung. Funktionale Programmierung. Pattern matching in Haskell. Pattern matching in ERLANG. Materialien zur Vorlesung

Skriptsprachen: Python

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Validation und Quick Fixing mit Xtend. 3. Dezember 2014

Datenstrukturen / Container in Java

7. Zusammenfassung (1)

Einführung in C# Teil 1. Matthias Nübling

Tag 8 Repetitorium Informatik (Java)

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Transkript:

Informatik Seminar WS 2009/2010 Prof. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt Lisp in der JVM Michael Krüger (inf6065) 1

Übersicht 1. Hintergrund 2. Designziele 3. Spracheigenschaften 4. Klassenanalyse Michael Krüger (inf6065) 2

1. Hintergrund Open Source Projekt, initiiert und betreut durch Rich Hickey Common Lisp Nutzer Hat vorher zwei CL Java Bridges entwickelt Praktiker, nicht Forscher Broadcast Animation, Scheduling, Election Nebenläufigkeit Michael Krüger (inf6065) 3

2. Designziele 1. Ein Lisp 2. Unveränderliche Datenstrukturen (aus der funktionalen Programmierung) 3. Unterstützung von Nebenläufigkeit (Koordination von Zustandsübergängen auf Sprachebene) 4. Nutzung der Java Infrastruktur (JVM) Michael Krüger (inf6065) 4

2.1 Lisp REPL Read Eval Print Loop Syntax (vereinfachte S Expressions) Typenkonzept (dynamisch) Code as Data Makros Allerdings: Namen haben teilweise neue Bedeutungen keine Kompatibilität zu altem Lisp Code Michael Krüger (inf6065) 5

2.2 Datenstrukturen Listen Vektoren Mengen Tabellen (Alles was von der JVM bereitgestellt wird) Eigenschaften Unveränderlich Persistent Lazy (wenn möglich) Vollständige Unterstützung durch die Sprache und den Reader Michael Krüger (inf6065) 6

Michael Krüger (inf6065) 7 http://clojure.googlegroups.com/web/clojureconcurrencytalk.pdf

Michael Krüger (inf6065) 8 http://clojure.googlegroups.com/web/clojureconcurrencytalk.pdf

2.3 Unterstützung von Nebenläufigkeit Ref Atom Agent Dynamic Var Indirekte Referenzen auf unveränderliche Datenstrukturen Koordinierter Zugriff auf Referenzen Automatisch bzw. notwendig Nicht lock basiert Michael Krüger (inf6065) 9

2.4 JVM Typsystem Garbage Collection Portabilität Nutzung der vorhandenen Infrastruktur in Unternehmen It's ok to hate Java, but love the JVM. Rich Hickey Michael Krüger (inf6065) 10

Multimethoden Dispatch über alle Parameter einer Methode Wahl der geeigneten Methode durch Auswertung einer Dispatch Funktion Resultat der Dispatch Funktion beliebig Berücksichtigung der aktuellen Werte möglich Michael Krüger (inf6065) 11

Java Interoperabilität Spezielle Methoden für alle Konzepte, die durch JVM unterstützt werden, sind vorhanden: Klassen Objekte Primitive Typen Arrays... Alle Java Bibliotheken nutzbar Clojure kompiliert zu nativem Java Bytecode In Java nutzbar Michael Krüger (inf6065) 12

Makros Auswertung durch Reader zur Compilezeit Codetransformationen, dadurch Schaffung eigener Sprachstrukturen möglich Änderung der Reader Makros nicht möglich (wird noch diskutiert) Veränderung der Sprache extreme Sorgfalt erforderlich Michael Krüger (inf6065) 13

Beispiel Makro (defn unless [pred body] (if pred nil body)) => (unless false :t) :t => (unless true :t) nil Aber: => (unless true (println :t)) :t nil (defmacro unless [pred body] (list 'if pred nil body)) Michael Krüger (inf6065) 14

Metadaten Vollständig in Sprache integriert Als Tabelle an Symbolen, Sequenzen Keywords als Schlüssel Beliebig verwendbar, z.b. für: Dokumentation Type Hints Beschreibungen der Eigenschaften von Werten Vor & Nachbedingungen Testfunktionen... Michael Krüger (inf6065) 15

Klassenanalyse Wie sieht der erzeugte Bytecode aus? Michael Krüger (inf6065) 16

Quellen http://clojure.org Die Clojure Heimatseite http://github.com/richhickey/clojure Git Repository http://clojure.blip.tv/ Präsentationen http://www.infoq.com/author/rich Hickey weitere Präsentationen Halloway, S. (2009): Programming Clojure. Raleigh, Dallas: Pragmatic Bookshelf Abelson, H. Sussman, G.J. (1996): Structure and Interpretation of Computer Programms. Cambridge, London: MIT Press Michael Krüger (inf6065) 17

Fragen? Michael Krüger (inf6065) 18