Metaprogramming is a way by which programs can inspect and generate programs. Ruby language provides powerful features for metaprogramming. This presentation discusses some of these features.
1 of 21
Download to read offline
More Related Content
Exploring metaprogramming using Ruby language
1. Exploring
metaprogramming
using
Ruby language
A brief introduction
Harshal Ganpatrao Hayatnagarkar
PhD Candidate in Dept. of Computer Science
1
Friday, October 3, 2014
3. Assembly Lines: Process marvels
Ford Model T Assembly Line
Tesla Robotic Assembly Line
10/24/2014 3
4. Assembly Lines: Process marvels
People building cars
A worker on assembly line does same task
repetitively, item after item and day after day.
People building robots building cars
Is this like programming?
People building robots build robots building
cars
What is this analogous to?
Courtesy: http://stackoverflow.com/questions/3468246/whats-the-use-of-metaprogramming
10/24/2014 4
5. Metaphor
People building robots building robots building cars
What is this analogous to?
10/24/2014 5
6. Meta-programming
Meta (beyond in Greek) + programming Programming
Abstraction
Similar to meta-data, meta-model, meta-physics and so on.
Writing of computer programs that with ability to treat
programs as their data, as it meant that a program could
be designed to read, generate, analyse and/or transform
other programs, and even modify itself while running. In
some cases, this allows programmers to minimize the
number of lines of code to express a solution (hence
reducing development time), or it gives programs greater
flexibility to efficiently handle new situations without
recompilation. - Wikipedia
10/24/2014 6
9. Reflection
Ability of a computer program to examine and modify the
structure and behavior (specifically values, meta-data,
properties and functions) of the program at runtime.
Metalanguage in which metaprogram is written.
object language, programs written in which are manipulated.
reflection or reflexivity is ability of a programming language to
be its own metalanguage.
Fairly common in programming languages
C++ (limited)
Java (+ other JVM languages), C# (+ other CLR languages)
JavaScript, Python, PHP, Ruby
10/24/2014 9
10. Generative Programming
A style of computer programming that uses
automated source code creation through generic
frames, classes, prototypes, templates, aspects,
and code generators to improve programmer
productivity. - Wikipedia
For example,
Internal to language: C/C++ preprocessor macros, C++
templates, LISP macros, Ruby/Python/PHP
evaluations.
External: Code generation templates.
10/24/2014 10
11. Ruby Programming Language
Dynamic, reflective, object-oriented,
general-purpose programming language.
Influenced by Perl, Smalltalk, Eiffel, Ada,
and Lisp.
Supports multiple paradigms functional,
object-oriented, and imperative.
With dynamic type system and automatic
memory management.
Yukihiro "Matz"
Matsumoto
10/24/2014 11
12. Meta Object Protocol
Everything is an object, including classes.
Method calling is analogous to message
passing where arguments are payload.
10/24/2014 12
17. Generative Programming
Code generation one or more levels
eval expression family
Takes source code in string form and embed in current
context.
10/24/2014 17
19. Pitfalls
Metabugs?
Bugs generating bugs generating
And there is no programs debugging programs
debugging programs.
Increased code complexity
10/24/2014 19
20. Further exploration
Model-driven development
Domain-specific languages
Ruby on Rails for web development
framework
An example of metaprogramming features.
10/24/2014 20
#6: This metaphor can explain metaphor in two ways:
Robots building robots
Self-aware robots (autonomic computing)
#9: 1. Reflection: Recalling the example of self-aware robots, if a robot can inspect itself for faults and optimization, it is wonderful. Such a capability requires many features in the robotic system, which could be provided by reflection.
#10: In many languages such as C/C++, once code is generated, the information about types and variables is lost after compilation (only exception is RTTI where name of type is retained at runtime). However, the