CSC/ECE 517 Fall 2010/ch2 S24 sk: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
<div style="color:#333;font-size:1.2em;">
==What is Metaprogramming==
==What is Metaprogramming==
Metaprogramming is in essence using programs to manipulate other programs. the concept is actually a classic UNIX principle  on writing code and is far from new. In fact, its technical beginning probably starts with Konrad Zuse's insight almost 70 years ago that a computer could prepare its own instructions. Metaprogramming has been garnering the attention of developers and software engineers in recent  years, first with dynamic languages such as Ruby and more recently with static languages such as Java and C++.
:Metaprogramming is in essence using programs to manipulate other programs. the concept is actually a classic UNIX principle  on writing code and is far from new. In fact, its technical beginning probably starts with Konrad Zuse's insight almost 70 years ago that a computer could prepare its own instructions. Metaprogramming has been garnering the attention of developers and software engineers in recent  years, first with dynamic languages such as Ruby and more recently with static languages such as Java and C++.
 
:Metaprogramming is also called generative programming. The idea is that instead of modifying simple data elements, you modify symbols (or patterns) that represent complex operations. This is achieved through three key components. A metalanguage where we define a generalization or pattern. A generator which is an expression of that generalization and finally an instance which is the output from the evaluation of that generator. The goal is to generalize a set of concrete instances that can be evaluated and generated as a static representation of what we wish our code to accomplish. This takes polymorphism variation out of the code level and moves it up to the metalevel where it can be interpreted by Domain Specific Languages (DSLs) which describe how a system should be generated.


Metaprogramming is also called generative programming. The idea is that instead of modifying simple data elements, you modify symbols (or patterns) that represent complex operations. This is achieved through three key components. A metalanguage where we define a generalization or pattern. A generator which is an expression of that generalization and finally an instance which is the output from the evaluation of that generator. The goal is to generalize a set of concrete instances that can be evaluated and generated as a static representation of what we wish our code to accomplish. This takes polymorphism variation out of the code level and moves it up to the metalevel where it can be interpreted by Domain Specific Languages (DSLs) which describe how a system should be generated.
:Some key applications of metaprogamming are the translation of a program from one language to another, to transform a program , to refactor a program, to optimize a program, verification of a program, type checking a program, and to apply design patters to a program.
==Metaprogramming in Practice==
==Metaprogramming in Practice==
===Dynamic Metaprogramming===
:Below we elaborate to much on metaprogramming, here is some fundamental terminology to become familiar with.
===Template Metaprogramming===
:* A '''Metaprogram''' represents a program that has the ability to modify another program or itself
:* '''Reflection''' is the ability of a program to manipulate the state of a program during execution. This manipulation comes in two aspects: introspection and intercession.
:*
==Drawbacks of Metaprogramming==
==Drawbacks of Metaprogramming==
==Addressing the Drawbacks==
==Addressing the Drawbacks==
==Conclusions==
==Conclusions==
==References==
==References==
</div>

Revision as of 03:38, 22 September 2010

What is Metaprogramming

Metaprogramming is in essence using programs to manipulate other programs. the concept is actually a classic UNIX principle on writing code and is far from new. In fact, its technical beginning probably starts with Konrad Zuse's insight almost 70 years ago that a computer could prepare its own instructions. Metaprogramming has been garnering the attention of developers and software engineers in recent years, first with dynamic languages such as Ruby and more recently with static languages such as Java and C++.
Metaprogramming is also called generative programming. The idea is that instead of modifying simple data elements, you modify symbols (or patterns) that represent complex operations. This is achieved through three key components. A metalanguage where we define a generalization or pattern. A generator which is an expression of that generalization and finally an instance which is the output from the evaluation of that generator. The goal is to generalize a set of concrete instances that can be evaluated and generated as a static representation of what we wish our code to accomplish. This takes polymorphism variation out of the code level and moves it up to the metalevel where it can be interpreted by Domain Specific Languages (DSLs) which describe how a system should be generated.
Some key applications of metaprogamming are the translation of a program from one language to another, to transform a program , to refactor a program, to optimize a program, verification of a program, type checking a program, and to apply design patters to a program.

Metaprogramming in Practice

Below we elaborate to much on metaprogramming, here is some fundamental terminology to become familiar with.
  • A Metaprogram represents a program that has the ability to modify another program or itself
  • Reflection is the ability of a program to manipulate the state of a program during execution. This manipulation comes in two aspects: introspection and intercession.

Drawbacks of Metaprogramming

Addressing the Drawbacks

Conclusions

References