Benutzername    Passwort    Autologin    
  Passwort vergessen       Registrieren  
beeForum Foren-übersicht » hal9000
Neues Thema eröffnen   Neue Antwort erstellen Hervorhebung entfernen


DLW 2008: Metaprogramming with Ruby
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
boris



Beiträge: 11154

Titel: DLW 2008: Metaprogramming with Ruby
Verfasst am: Sa, 18 Apr 2009, 11:13
Beitrag
Antworten mit Zitat

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
Private Nachricht senden Website dieses Benutzers besuchen Rang:godmode methusalem 3. platz professioneller Sportangler Profi-Winzer (7x Hamm) Arcade-Meister, Rang 16 rainbow-cup
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    beeForum Foren-übersicht » hal9000 Seite 1 von 1
Gehe zu:  



ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Sie hören gerade..... (2008) Frederik silikonimplantate 153 Do, 17 Sep 2009, 21:48 Letzten Beitrag anzeigen
Keine neuen Beiträge DLW 2008: Understanding the PHP Object-Model boris hal9000 0 Sa, 18 Apr 2009, 11:27 Letzten Beitrag anzeigen
Keine neuen Beiträge DLW 2008: Advanced Object-Oriented JavaScript boris hal9000 0 Sa, 18 Apr 2009, 11:21 Letzten Beitrag anzeigen
Keine neuen Beiträge DLW 2008: Speaker Panel: Top Speakers from Ruby, Groovy boris hal9000 0 Sa, 18 Apr 2009, 11:16 Letzten Beitrag anzeigen
Keine neuen Beiträge DLW 2008: Up-2-date: The State of eZ Components boris hal9000 0 Sa, 18 Apr 2009, 11:04 Letzten Beitrag anzeigen


Schreiben: nein. Antworten: nein. Bearbeiten: nein. Löschen: nein. Umfragen: nein.
phpBB © phpBB Group | impressum