|
Autor |
Nachricht |
boris
Beiträge: 11195
|
Titel: DLW 2008: Metaprogramming with Ruby
Verfasst am: Sa, 18 Apr 2009, 12:13 |
|
|
Metaprogramming with Ruby: Writing code that writes code
Stefan Tilkov, innoQ Deutschland GmbH
28.5.2008, 11:00, Raum 1.29, ca. 12 Personen
- Einige Feststellungen zur Wahl einer Programmiersprache / des -stils für ein Projekt und der Motivation, die zu Metaprogramming führte:
"Languages are not equal" (languages are not equal)
"Repetition kills productivity" (repetition equals redundancy)
"Language influences thought" ("Sapir-Whorf Hypothese", s. Ressourcen)
-man wendet nur Patterns und Konzepte an, die man kennt
-die Fähigkeiten der Sprache beinflussen die Lösung
"Languages must evolve"
- Metaprogramming bedeutet, Code zu programmieren, der selbständig weiteren Code erzeugt (oder ändert)
- In diesem Rahmen werden z.B. Klassen zur Laufzeit "geöffnet" und erweitert, um z.B. eine String-Klasse mit neuen Methoden auszustatten (s. Beispiel), mittels einer "Meta-Klasse" können Klassen zur Laufzeit definiert werden
- Mit dem Konstrukt der "Alias-Methode" kann eine Klasse umbenannt werden, Aufrufe zur ursprünglichen Klasse werden abgefangen, der Aufruf wird (u.U. nach Ausführung weiteren Codes) an das Original weitergereicht
- Durch Metaprogramming wird der zu schreibende Code minimiert
- Code, der sich oft (mit nur minimalen Änderungen) wiederholt ("boilerplate code") wird eliminiert
- Beispiel für Metaprogramming:
Durch die Methode "add_multiplier" kann der Klasse "Meta" zur Laufzeit eine neue Methode hinzugefügt werden.
Hier: "add_multiplier 5" erzeugt eine neue Methode, die das Multiplizieren eines übergebenen Wertes mit 5 ermöglicht.
Der Aufruf ".times5" ruft diese generierte Methode dann auf.
Fazit: Eine hoch interessante, aber nicht wenig komplizierte Einführung in "Metaprogramming", gut vorgetragen mit guten Beispielen (und Zitaten).
Nachteil (für mich): Leider nicht in PHP.
Ressourcen:
http://www.innoq.com/blog/st
http://www.innoq.com/blog/st/presentations/2008/2008-01-21-Metaprogramming-Ruby--OOP-2008.pdf (Präsentation des Vortrags)
http://www.paulgraham.com/avg.html (Paul Graham: "Beating the Averages")
http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html (_why: "Seeing Metaclasses Clearly")
http://practicalruby.blogspot.com/2007/02/ruby-metaprogramming-introduction.html (John Hume: "A Ruby Metaprogramming Introduction")
http://de.wikipedia.org/wiki/Sapir-Whorf-Hypothese (beschäftigt sich mit dem Zusammenhang zwischen Sprache und Denken)
http://de.wikipedia.org/wiki/Neusprech (dito, anhand von George Orwells Sprachkonstrukt "Neusprech" in "1984")
Literatur:
Ola Bini: Ruby Metaprogramming Techniques
Programminfo:
In this session, the overall motivation for metaprogramming - i.e, programming to create programs - will be explained, and Ruby's support for metaprogramming, based on its meta-object support, will be explained in detail. A number of examples from different real-world usage scenarios will be used to show why metaprogramming is the key feature that sets dynamic languages apart.
____________ beehave - home of humbug ... [we can't afford to be neutral]
|
|
Nach oben |
|
|
|
ähnliche Beiträge |
|
Thema
| Autor
| Forum
| Antworten
| Verfasst am
|
|
Sie hören gerade..... (2008) |
Frederik |
silikonimplantate |
153 |
Do, 17 Sep 2009, 22:48 |
|
DLW 2008: Understanding the PHP Object-Model |
boris |
hal9000 |
0 |
Sa, 18 Apr 2009, 12:27 |
|
DLW 2008: Advanced Object-Oriented JavaScript |
boris |
hal9000 |
0 |
Sa, 18 Apr 2009, 12:21 |
|
DLW 2008: Speaker Panel: Top Speakers from Ruby, Groovy |
boris |
hal9000 |
0 |
Sa, 18 Apr 2009, 12:16 |
|
DLW 2008: Up-2-date: The State of eZ Components |
boris |
hal9000 |
0 |
Sa, 18 Apr 2009, 12:04 |
Schreiben: nein. Antworten: nein. Bearbeiten: nein. Löschen: nein. Umfragen: nein.
|