<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Dru Nelson wrote:
<blockquote TYPE=CITE>>   (|slot1 = foo. slot2 = bar| code)
<br>>
<br>> is a form of lightweight meta-programming?
<p>what is meta-programming?
<br> </blockquote>

<p><br>As far as I know this discussion about metaprogramming
<br>started with my suggestion to search for more integrated
<br>or unifying methods in computer science. Then Brian Rice
<br>suggested we should look for the Tunes project, which tries
<br>to reach this ideal.
<br>There I found the interesting paper by Faré (member of
<br>the Tunes project) about
<br>Metaprogramming and free availability of sources
<br>He says that central to any process of building software
<br>is manipulation of the source code of programs. To
<br>enhance these processes, to ease the task of the
<br>programmer, is to relieve the programmer from all
<br>repetitive and conceptually redundant operations,
<br>so that he may focus on the essence of programming
<br>that is on the problems that have never been solved
<br>yet. This means manipulation of code must be automated
<br>as much as possible, by having machines handle reliably
<br>all the inferior tasks that do not pose theoretical
<br>problems anymore. And to automate programming
<br>is by definiton metaprogramming.
<br>He sees metaprogramming and open development as
<br>two faces of the phenomenon that unifies both of them
<br>called reflective programming.
<br> 
<p>It seems this story starts with the highly interactive,
<br>integrated and incremental programming environments
<br>of many Lisp systems, such as Interlisp. They are in many
<br>aspects much more advanced than most environments
<br>for development of production software.
<br>So Lisp is an excellent  language for writing metaprograms
<br>i.e., programs that manipulate other programs, such as
<br>programming environments.
<br>So Lisp developed the exploratory programming style.
<br>However Ole Madsen and Claus Norgaard say Lisp is
<br>not considered an alternative for development  of
<br>production programs.
<p>The need for metaprogramming was felt by the
<br>Mjolner Beta group (Aarhus, Denmark).The need
<br>for building large and complex software systems
<br>resulted in the development of more powerful
<br>programming languages and more powerful program
<br>development tools (editors, compilers, debuggers
<br>configuration management tools, user interface tools
<br>etc)
<p>The development tools are used for manipulating different
<br>types of information (e.g. program text, run-time
<br>structures, etc)  In order to fulfill the goals of the tool
<br>it must be able to represent this information in a form
<br>that makes the different manipulations possible.
<br>These development tools are often individual tools
<br>with disjoint representations even in the case where
<br>the tools are manipulating essentially the same
<br>information( compiler and interpreter for example).These
<br>problems gave rise to research into architectures for
<br>software development environments.
<p>separate tools with disjoint representantions
<br>pipeline architectures
<br>residential architectures
<br>bus architecture
<br>client-server architectures
<br>common representation architectures.
<p>So the Mjolner Beta system can be characterized
<br>as the usage of abstract syntax trees (ASTs)as the
<br>central structure for handling program information.
<p>The experience with using an object oriented
<br>framework for modeling AST permits building tools
<br>applicable for all programming languages and
<br>more language specific tools to use the same
<br>ASTs.
<br> 
<br> 
<p>Could someone trace back when and how
<br>reflection was introduced? Is indeed
<br>reflection a kind of metaprogramming?
<p>Now the connection with virtual machine.
<p>Ungar et al  argues that that a Self-like
<br>in nature  implementation substrate could
<br>support the implementation of a wide variety
<br>of OO languages.They add further that
<br>static compilation techniques became sufficiently
<br>well advanced that code generators could be
<br>produced which supported a broad spectrum
<br>of conventional languages. Many production
<br>compilers have back-end systems which
<br>produce code for C, C++, FORTRAN, Pascal
<br>and similar languages. Perhaps
<br>a Self-like system could form the basis
<br>for a general dynamic compilation system
<br>for a variety of OO languages.
<br> 
<p>Better there should be a processor for
<br>Self, preferably user-programmable
<br>to add flexibility to the processor's
<br>instruction set.
<p>Why is a user interface a virtual machine
<br>at least some say this?
<p>Above all what 's the role of reflection?
<p>What's the role of pattern-based
<br>architectures?
<p>Why do things evolved differently
<br>from the original architectures stated
<br>above?
<br>Why are they better?
<br>Joergen Lindskow Knudsen states
<br>clearly the differences among them.
<p>Nice weekend
<p>Albertina
<br> 
<br> 
<blockquote TYPE=CITE> 
<br>Dru Nelson
<br>San Mateo, California</blockquote>

<pre>-- 
.----------------------------------------------------------.
| Albertina Lourenci                                       |
| PhD  in Architecture and Urbanism                        |
| post-doctorate researcher                                |
| Laboratory of Integrated Systems University of Sao Paulo |
| Avenida Professor Luciano Gualberto, 158 Travessa 3      |
| CEP: 05508-900                                           |
| Sao Paulo Sao Paulo State Brazil                         |
| Voice: +55 011 818 5254                                  |
| Fax: +55 11 211 4574                                     |
.----------------------------------------------------------.</pre>
 </html>