109
Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Metaprogrammierung und Metalinguistische Abstraktion in modernen Programmiersprachen Fabian Bieker 23.10.2008 - Version 0.9.6

Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Metaprogrammierung und MetalinguistischeAbstraktion in modernenProgrammiersprachen

Fabian Bieker

23.10.2008 - Version 0.9.6

Page 2: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

• Wenn ihr Verständnisfragen habt, bitte sofort melden

• Diskusion später

• Folien sind im SE Wiki verlinked

Page 3: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Abstract

• Metaprogammierung == Code der Code schreibt /generiert

• Metalinguistische Abstraktion == Abstraktion auf(linguistischem) Sprachniveau

• Metaprogramierung ist ein Werkzeug für MetalinguistischeAbstraktion

• In Ruby weil sehr lesbar (oder will jemand Lisp lernen?)

Page 4: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Abstract

• Metaprogammierung == Code der Code schreibt /generiert

• Metalinguistische Abstraktion == Abstraktion auf(linguistischem) Sprachniveau

• Metaprogramierung ist ein Werkzeug für MetalinguistischeAbstraktion

• In Ruby weil sehr lesbar (oder will jemand Lisp lernen?)

Page 5: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Gliederung

EinleitungAbstraktion

Ruby

Metaprog.Beispiele

Metal. Abs.Domain Specific Language (DSL)

Java

Probleme

OptionalUnternehmenMDA / MDSD und Meta*

Page 6: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Inhalt

EinleitungAbstraktion

Ruby

Metaprog.Beispiele

Metal. Abs.Domain Specific Language (DSL)

Java

Probleme

OptionalUnternehmenMDA / MDSD und Meta*

Page 7: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

• Warum Abstraktion?

Page 8: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

• “Tip 53: Abstractions Live Longer than Details”

• “Tip 38: Put Abstraction in Code, Details in Metadata”

• Quelle: The Pragrammtic Programmer (PragProg)

Page 9: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Abstraktion in Programmiersprachen 1

• Abstraktion durch Assembler (statt Maschinencode /Lochkarten)

• Abstraktion durch Funktionen / Prozeduren• Abstraktion durch Module

• Abstraktion durch APIs

Page 10: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Abstraktion in Programmiersprachen 2

• Abstraktion durch OOP• Abstraktion durch Komponenten Frameworks

• Abstraktion durch Sprache (Metalinguistische Abstraktion)• Bsp.: “Das Ding mit einer Lampe, einem Stromanschluß,

einem Lüfter usw., das diese Präsentation projiziert” →“Beamer”

Page 11: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Abstraktion in Programmiersprachen 2

• Abstraktion durch OOP• Abstraktion durch Komponenten Frameworks

• Abstraktion durch Sprache (Metalinguistische Abstraktion)• Bsp.: “Das Ding mit einer Lampe, einem Stromanschluß,

einem Lüfter usw., das diese Präsentation projiziert” →“Beamer”

Page 12: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Anmerkung

• Compiler == Interpreter == Runtime Env.• Unterscheidung zwischen Compile- und Runtime ist

unwichtig in Ruby (und erst recht in Lisp)• nur für Laufzeitbetrachtungen relevant

Page 13: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Anmerkung

• Compiler == Interpreter == Runtime Env.• Unterscheidung zwischen Compile- und Runtime ist

unwichtig in Ruby (und erst recht in Lisp)• nur für Laufzeitbetrachtungen relevant

Page 14: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Inhalt

EinleitungAbstraktion

Ruby

Metaprog.Beispiele

Metal. Abs.Domain Specific Language (DSL)

Java

Probleme

OptionalUnternehmenMDA / MDSD und Meta*

Page 15: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby Grundlagen 1

• Syntax: Wie Java oder Perl . . .

• Konzepte: Smalltalk, Lisp und Perl

• Design-Ziel: “Programmers Happiness”

Page 16: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby Grundlagen 2

• Dynamic Typing / Duck Typing

• Alles ist ein Object ! (ausser Blocks . . . )

• Open Base Classes

• Mix-Ins

Page 17: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby und Java

• JRuby (Beide Hauptentwickler von Sun eingestellt)

• Groovy

Page 18: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Kommentare, Arrays und Strings

# This is a one-line comment

[1,2,3,5,8] # Array

"Ruby rocks!" # String

Page 19: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Methoden

def foo(a,b,c)a + b + c # no return needed

end

> foo(1,2,3)=> 6

Page 20: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Klassen

class A

attr_reader :name # def method name()def initialize(n) # constructor hook

@name = nend

def foo { "foo" } # def method foo()

# def class method bar()def self.bar { "bar" }

end

Page 21: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Klassen - Methodenaufrufe

# A.new("MyName").foo()> A.new("MyName").foo # no ’()’ needed=> "foo"

> A.bar=> "bar"

> A.new("MyName").name=> "MyName"

Page 22: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Einige Metaprogammierungs-Funktionen in Ruby

• attr_reader, attr_accessor, . . .

• instance_eval, class_eval, . . .

• send

• define_method

Page 23: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Inhalt

EinleitungAbstraktion

Ruby

Metaprog.Beispiele

Metal. Abs.Domain Specific Language (DSL)

Java

Probleme

OptionalUnternehmenMDA / MDSD und Meta*

Page 24: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Metaprogrammierung?

• Code der Code schreibt

• Ursprung: Lisp makros - 1958 am MIT entwickelt• In Ruby Metaprog. u.a. über Interpreter Hooks

• z.B. method_missing, Class.inherited

Page 25: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Metaprogrammierung?

• Code der Code schreibt

• Ursprung: Lisp makros - 1958 am MIT entwickelt• In Ruby Metaprog. u.a. über Interpreter Hooks

• z.B. method_missing, Class.inherited

Page 26: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

map_send - 1

• Haskell like map (+1) xs (u.a.)

• Abstraktion durch neue Sprachkonstrukte

• Ja . . . nur mittel sinnvoll, aber einfaches Bsp.

Page 27: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

map_send - 1

• Haskell like map (+1) xs (u.a.)

• Abstraktion durch neue Sprachkonstrukte

• Ja . . . nur mittel sinnvoll, aber einfaches Bsp.

Page 28: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

map_send - 1

• Haskell like map (+1) xs (u.a.)

• Abstraktion durch neue Sprachkonstrukte

• Ja . . . nur mittel sinnvoll, aber einfaches Bsp.

Page 29: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

map_send - 2

# reopen the Enumerable modulemodule Enumerable

# define a public method# usage: [1,2,3].map_send1 :+, 1def map_send1(method, * args) # ruby varargs

map { |x| x.send method, * args }end

Page 30: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

map_send - 3

# define a public method (using define_method)# usage: [1,2,3].map_send2 :+, 1define_method(’map_send2’) do | method, * args |

map { |x| x.send method, * args}end

Page 31: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

map_send - 4

# define a bunch of methods - called map_send,# each_send ...# usage: [1,2,3].map_send :+, 1%w[select map each collect inject].each do |method|

self.send(:define_method,"#{method}_send") do |m, * args|

send(method) { |x| x.send(m, * args) }end

end

end # module Enumerable

Page 32: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Bsp. map_send - 5

> [1,2,3].map_send :+, 1=> [2,3,4]

Page 33: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Optional: Java synchronized in Ruby

Page 34: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Warum? Wieso? Weshalb?

• Kritik: “Das spart doch nur Zeichen!”

• Nein - Abstraktion durch Einführung neuerSprachkonstrukte

Page 35: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Warum? Wieso? Weshalb?

• Kritik: “Das spart doch nur Zeichen!”

• Nein - Abstraktion durch Einführung neuerSprachkonstrukte

Page 36: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Inhalt

EinleitungAbstraktion

Ruby

Metaprog.Beispiele

Metal. Abs.Domain Specific Language (DSL)

Java

Probleme

OptionalUnternehmenMDA / MDSD und Meta*

Page 37: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

SICP

• Quelle: Structure and Interpretation of Computer Programs- 2nd Edition (SICP)

• s.http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-25.html

Page 38: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

SICP über Metalingustische Abstraktion

“Metalinguistic abstraction – establishing new languages –plays an important role in all branches of engineering design. Itis particularly important to computer programming, because inprogramming not only can we formulate new languages but wecan also implement these languages by constructingevaluators.An evaluator (or interpreter) for a programming language is aprocedure that, when applied to an expression of the language,performs the actions required to evaluate that expression.”

Page 39: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

SICP über Metalingustische Abstraktion

“It is no exaggeration to regard this as the most fundamentalidea in programming:The evaluator, which determines the meaning ofexpressions in a programming language, is just anotherprogram.In fact, we can regard almost any program as the evaluatorfor some language.”

Page 40: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

(Sehr optimistisches) Ziel von MetalinguistischerAbstraktion

• eval(SPEC)

• deploy(eval(SPEC))

• (if (testAndVerify(eval(SPEC)), SPEC)(deploy(eval(SPEC)))) → everyone is happy

Page 41: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

(Sehr optimistisches) Ziel von MetalinguistischerAbstraktion

• eval(SPEC)

• deploy(eval(SPEC))

• (if (testAndVerify(eval(SPEC)), SPEC)(deploy(eval(SPEC)))) → everyone is happy

Page 42: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

(Sehr optimistisches) Ziel von MetalinguistischerAbstraktion

• eval(SPEC)

• deploy(eval(SPEC))

• (if (testAndVerify(eval(SPEC)), SPEC)(deploy(eval(SPEC)))) → everyone is happy

Page 43: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ziel von Metalinguistischer Abstraktion

• So was geht nicht?

• Was ist mit eval(RFC) → Protokol En-/Decoder ?

Page 44: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ziel von Metalinguistischer Abstraktion

• So was geht nicht?

• Was ist mit eval(RFC) → Protokol En-/Decoder ?

Page 45: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Sprache vs. Framework

• Framework:new CoffeeShop(”Foo”, ...).getCoffee(new Customer(”Fabian”, ...));

• Spache:Fabian getsCoffee @ CoffeeShop named Foo

• Vorteil: Abstraktionsgewinn• z.B.: “Fabian ist ein Customer Objekt” ist nicht relevant

• Nachteil: Evtl. höherer Aufwand

Page 46: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Sprache vs. Framework

• Framework:new CoffeeShop(”Foo”, ...).getCoffee(new Customer(”Fabian”, ...));

• Spache:Fabian getsCoffee @ CoffeeShop named Foo

• Vorteil: Abstraktionsgewinn• z.B.: “Fabian ist ein Customer Objekt” ist nicht relevant

• Nachteil: Evtl. höherer Aufwand

Page 47: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Was ist eine DSL?

• DSL == Sprache um domänen-spezifische Probleme zulösen

• z.B.: Make oder ANT

• Zwei Arten von DSLs: eingebettet und nicht-eingebettet

Page 48: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Was ist eine DSL?

• DSL == Sprache um domänen-spezifische Probleme zulösen

• z.B.: Make oder ANT

• Zwei Arten von DSLs: eingebettet und nicht-eingebettet

Page 49: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

nicht eingebettete DSLs

• wird mit externem Parser-Generatoren (Yacc, . . . ) erzeugt

• potentziell flexibler

• mehr Aufwand bei der Impl.

• Problem: “Wir brauchen ein if - Ach, und einefor -Schleife wäre auch gut . . . ”

Page 50: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

nicht eingebettete DSLs

• wird mit externem Parser-Generatoren (Yacc, . . . ) erzeugt

• potentziell flexibler

• mehr Aufwand bei der Impl.

• Problem: “Wir brauchen ein if - Ach, und einefor -Schleife wäre auch gut . . . ”

Page 51: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

eingebettete DSLs (eDSL)

• wenig Aufwand bei der Impl.

• Rückgriff auf bereits vorhandene Sprachfeatures

• Abhängigkeit von Sprachsyntax der umgebenden Sprache

• verbreited in Ruby, Lisp, Smalltalk, Python, . . .

Page 52: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Beispiele für DSLs

Page 53: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Rake - Ruby Makefile DSL - 1

# [...] by Sandor Szuecs - FU Berlin# c compiler flags CFLAGSCFLAGS = "-Wall -pedantic [...]"

if (‘uname‘).strip.chomp=="Darwin"ARCH = "-DMACOSX"# linking OpenGLGL_LIBS = "-framework OpenGL [...]"

# [...]else

puts("unknown system, maybe windows?")exit!

end

Page 54: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Rake - Ruby Makefile DSL - 2

## rake taskstask :default => []

task ’build:mathgl’ => [’math_opengl.o’]

desc "build all"task "build:all" => [’build:mathgl’, [...]]

# [...]

Page 55: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby OCL eDSL - Quelle

• Quelle: “Building Domain-Specific Languages forModel-Driven Development” (MDADSL)

http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2007.135

Page 56: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

OCL

context UML::Classinv: self.attributes->forAll(attr |

attr.name == ’id’ impliesattr.type.oclKindOf(UML::Integer))

Page 57: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby DSL

context UML::Class doinv(’integer-id’) do

self.attributes.forAll { |attr|(attr.name == ’id’).implies(

attr.type.oclKindOf(UML::Integer))}

endend

Page 58: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Inhalt

EinleitungAbstraktion

Ruby

Metaprog.Beispiele

Metal. Abs.Domain Specific Language (DSL)

Java

Probleme

OptionalUnternehmenMDA / MDSD und Meta*

Page 59: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

One-Time Code Generators

• z.B.: Eclipse - Source - Generate Getters / Setters• suboptimal

• redundanter Code• Metainformationen gehen verloren

Page 60: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

One-Time Code Generators

• z.B.: Eclipse - Source - Generate Getters / Setters• suboptimal

• redundanter Code• Metainformationen gehen verloren

Page 61: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Java Features für Metaprogammierung

• Anotations

• Java Instrumentierung und Reflection

• Beans (?)

Page 62: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Optional: Metaprogammierung / MetalinguistischeAbstraktion und MDA / MDSD

Page 63: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Werkzeuge für Java

• ANTLR (ANother Tool for Language Recognition)• OAW (OpenArchitectureWare)

• MDA / MDSD Toolkit• Sexy!

Page 64: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Werkzeuge für Java - Google Code

• http://code.google.com/p/java-macros/

• “An enhancement to the JDK7 compiler (the GPL’d version)that adds support for compile-time macros.”

• Sprich: Lisp-artige Makros für Java

• Sehr sexy!

Page 65: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Optional: Metaprogammierung und MetalinguistischeAbstraktion in Unternehmen

Page 66: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Inhalt

EinleitungAbstraktion

Ruby

Metaprog.Beispiele

Metal. Abs.Domain Specific Language (DSL)

Java

Probleme

OptionalUnternehmenMDA / MDSD und Meta*

Page 67: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Probleme und Lösungen

Page 68: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Komplexität

“While I admire the cleverness and skill that hides behind C++libraries (...), the fact remains that writing advanced templatecode is devilishly hard, (...)” (RatMeta)

Page 69: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Komplexität - Lösungsansätze

• Verwendung bekannter Metaprog. Paradigmen / Patterns

• Lisp hat etliche zu bieten!

• In der Funktionalen Programmierung gibt es viele Patterns(z.B. aus ALP1: higher-order functions und currying)

Page 70: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Abgeschlossenheit

• Metaprog. soll den selben Code erzeugen können, denman von Hand schreiben kann (und umgekehrt)

Page 71: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Debuging

• Komplexe DSLs erzeugen teilweise schwer Debug-barenCode

• Komplexe Frameworks erzeugen teilweise schwerDebug-baren Code

• Hat jemand eine Idee für eine Lösung?

Page 72: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Debuging

• Komplexe DSLs erzeugen teilweise schwer Debug-barenCode

• Komplexe Frameworks erzeugen teilweise schwerDebug-baren Code

• Hat jemand eine Idee für eine Lösung?

Page 73: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Code als ASCII-String etc.

• Compiler kann Code nicht prüfen

• besser: Programmiersprachen-Konstrukte für Metaprog.verwenden

Page 74: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Sprachkonsistens

• Programmiersprachen-Design ist schwierig

• Das Erlernen neuer Sprachen ist aufwändig

• Der Support für Sprachen ist resourcen-intenssiv

Page 75: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Sprachkonsistens - Lösungsansatz

• Also sollten die verwendeten Sprachen möglichstkonsistent sein und sich optimal in vorhandeneSprachumgebung einpassen

• Eingebettete DSLs helfen hierbei

Page 76: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

• Danke für Ihre Aufmerksamkeit!

Page 77: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Diskussion

• Anregungen? Kritik?

• Was haltet Ihr von Meta* ? Benutzt Ihr das? Wofür?• Benutzt Ihr MDA / MDSD? Wofür?

• Kennt Ihr gute Papers, Bücher oder Links?

Page 78: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Quellenverzeichnis

Page 79: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Quellenverzeichnis - Bücher

(SICP) “Structure and Interpretation of Computer Programs” -2nd Edition,MIT Electrical Engineering and Computer Science,ISBN-13: 978-0262011532(PragProc) “The Pragrammtic Programmer”,Addison-Wesley Longman, Amsterdam (24. November 1999),ISBN-13: 978-0201616224

Page 80: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Quellenverzeichnis - Bücher

(MatzRuby) “The Ruby Programming Language”,David Flanagan and Yukihiro ’Matz’ Matsumoto,O’Reilly Media, Inc. (January 25, 2008),ISBN-13: 978-0596516178

Page 81: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Quellenverzeichnis - IEEE Papers

(RatMeta) “Rational Metaprogramming”, Diomidis Spinellis,2008, IEEE Software,http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2008.15(MDADSL) “Building Domain-Specific Languages forModel-Driven Development”, Jesús Sánchez Cuadrado andJesús García Molina, University of Murcia, September/October2007 IEEE SOFTWARE,http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2007.135

Page 82: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Quellenverzeichnis - IBM Papers

(IBM-eMetaProg) “The Art of Enterprise Metaprogramming”,MDA, MDSD und Metaprogramminghttp://www.ibm.com/developerworks/linux/library/l-metaprog3/(IBM-MetaProg) “The Art of Metaprogramming”http://www.ibm.com/developerworks/linux/library/l-metaprog1.html

Page 83: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

• Slides:https://page.mi.fu-berlin.de/bieker/metaprog.pdf

• Source: page.mi.fu-berlin.de -slash- bieker/metaprog(punkd) tex

• License: CC - by-nc-sahttp://creativecommons.org/licenses/by-nc-sa/3.0/de /

• Contact: Fabian Bieker - bieker -at- zedat . . .

Page 84: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Inhalt

EinleitungAbstraktion

Ruby

Metaprog.Beispiele

Metal. Abs.Domain Specific Language (DSL)

Java

Probleme

OptionalUnternehmenMDA / MDSD und Meta*

Page 85: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby - Alles ist ein Objekt

> 5.class=> Fixnum

> 5.methods=> ["%", "inspect", "<<", ... ]

Page 86: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby - Klassen, Methoden etc. sind Objekte

> 5.class=> Fixnum

> Fixnum.class=> Class

> Fixnum.methods=> ["inspect", "private_class_method",

"const_missing", ... ]

Page 87: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby - Open Base Classes 1

class Object # reopen class Objectdef foo

"foo"end

end

Page 88: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Ruby - Open Base Classes 2

> Object.new.foo=> "foo"> Object.foo=> "foo"> 5.foo=> "foo"> Fixnum.foo=> "foo"

Page 89: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Bsp. synchronized - 1

require ’thread’ # ruby 1.8 (Mutex in this lib)

def synchronized(o)o.mutex.synchronize

end

Page 90: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Bsp. synchronized - 2

class Object # opening class Objectdef mutex

return @__mutex if @__mutex# get mutex on class obj.synchronized(self.class) {

@__mutex = Mutex.new # ret-val is @__mutex}

endend

Page 91: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Bsp. synchronized - 3

# Prevent endless recursion# Class is an object after all :)Class.instance_eval { @__mutex = Mutex.new }

Page 92: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

synchronized - 4

• Quelle: “The Ruby Programming Language” S. 282 - Matz

• (Und? Habt Ihr die (kleine) Racecondition gesehen?)

Page 93: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Historie 1

• ???? Selbstmodifizerender (Assembler) Code• 1958 Lisp (Designed von John McCarthy, Impl. von Steve

Russel - MIT)• Basiert auf lambda-calulus• CLOS (OO-System implemeniert durch Makros)

Page 94: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Historie 2

• 1969 Smalltalk (Alan Key, Xerox Park)• Metaprogrammierung für OOP

• seit 1980 MIT Lisp Courses baseierend auf dem SICP• 1982 Begriff DSL (definiert von James Martin in seinem

Buch “Applications Development Without Programmers”)• Martin, James. Application Development Without

Programmers. Prentice-Hall, 1981. ISBN 0-13-038943-9.

Page 95: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Historie 3

• 1990 ANTLR 1.00B released

• 1995 Ruby (Yukihiro ’Matz’ Matsumoto)

• Juli 2004 - Ruby on Rails released

Page 96: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Metaprogammierung und MetalinguistischeAbstraktion in Unternehmen

Page 97: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

IBM

• “The Art of Enterprise Metaprogramming”

• MDA und Metaprogramming

• http://www-128.ibm.com/developerworks/linux/library/l-metaprog3/

Page 98: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Sun

• JavaOne 2007 - Zwei Vorträge die sich u.a. mit DSLsbeschäftigen

• s. http://java.sun.com/javaone/sf/2007/javauniversity.jsp

• JRuby, Scalar ...

Page 99: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Paul Graham - Viaweb

• “In 1995 he developed with Robert Morris the firstweb-based application, Viaweb, which was acquired byYahoo in 1998.”

• http://www.paulgraham.com/bio.html

Page 100: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Netzwert -> Apertio -> Nokia Siemens Networks(NSN)

• Mobile IP AAA Server

• 3G / 3.5G / 4G / IMS Infastruktur

Page 101: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

NSN - AAA Server

• Hochverfügbar und Geo-Redundant

• Massiv Parallel

• Multi-Tier

• DSL u.a. zum Konfigurieren der Buisness Logic

• Disclaimer: Ich habe zwei Jahre da gearbeited

Page 102: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

BeagleSoft

• Viel Meta* / MDA / MDSD Know-How

• Kundenprojekte u.a. im BPM Bereich

• Disclaimer: Ich arbeite für BeagleSoft

Page 103: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Naughty Dog (one Lisp game project failed!)

• “Crash Bandicoot” teilweise in Lisp

• GOAL (Game Object Assembly Lisp) für Naughty Dog’sJax and Daxter

Page 104: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Naughty Dog - Naughty Dog’s Jax and Daxter

“GOAL rocks! (...)GOAL sucks! While it’s true that GOAL gave us manyadvantages, GOAL caused us a lot of grief. A singleprogrammer (who could easily be one of the top ten Lispprogrammers in the world) wrote GOAL. ...”

Page 105: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Naughty Dog - Naughty Dog’s Jax and Daxter

“... While he called his Lisp techniques and programmingpractices ’revolutionary’, others referred to them as ’codeencryption’, since only he could understand them. Because ofthis, all of the support, bug fixes, feature enhancements, andoptimizations had to come from one person, creating quite abottleneck. Also, it took over a year to develop the compiler,during which time the other programmers had to make do withmissing features, odd quirks, and numerous bugs.”

Page 106: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Naughty Dog - Naughty Dog’s Jax and Daxter

• Quelle: http://ynniv.com/blog/2005/12/lisp-in-games-naughty-dogs-jax-and.html

http://www.gamasutra.com/features/20020710/white_02.htm

Page 107: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Metaprog. / Metaling. Abstraktion und MDA / MDSD - 1

• Ähnliche Problemstellung - Ähnliche Lösungsansätze• Graphische Rep. (UML etc.) und Textuelle Rep. (DSL)

• Graphische Rep. muss formale Sprache sein, weilcompilierbar

• Gleiche Komplexität (s. nächste Folie)

Page 108: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

Metaprog. / Metaling. Abstraktion und MDA / MDSD - 2

• Komplexität bzw. Abstraktionsniveau abhängig von derSprache

• Graphische Rep. kann man aber besser mit zusätzlichenInformationen anreichern

• und diese z.B. je nach View ein- und ausblenden

Page 109: Metaprogrammierung und Metalinguistische Abstraktion in … · 2008. 12. 16. · Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional Abstraktion in Programmiersprachen 2

Einleitung Ruby Metaprog. Metal. Abs. Java Probleme Optional

DSLs für Domänenexperten

• Domänenexperten werden DSLs lieben• Aber Vorsicht mit den “Edge Cases”

• Dafür braucht man “richtige” Programmier

• Quelle: (IMB-eMetaProg)