1426Re: [GP] GP, meta programming and reflection
- Mar 2, 2003Lee Spector wrote:
> No offense taken, and I may even agree, but could you provide a pointer toThe best description, together with semi-definitions about object
> the definition of reflection that you are using? By definitions I've been
oriented reflection (meta-programming in object-oriented context) I was
refering to, is given in:
R. Douence, M. Südholt: "The next 700 reflective object-oriented
languages", École des mines de Nantes, technical report, no. 99-1-INFO, 1999
> able to find just now (for example atYes indeed. The quoted definitions (by J. Malenfant, M. Jacques and F.N.
> full reflection is probably not even possible. But that doesn't mean that a
> language with certain reflective features (e.g. in which programs can
> transform parts of their own code in arbitrary ways and then execute them)
> doesn't provide useful metaprogramming facilities.
Demers) are fine with me and I agree with them. I am not suggesting that
a language has meta-programming capabilities only if it can provide
*all* the necessary reflective features; some are enough.
However, no matter what the details of the definition are, the central
notion in meta-programming is always reification. Even if the language
has very limited reflective capabilities, as long as it provides
explicitely a reification process (reification of its structure or/and
behaviour), then I would call it "meta-programming capable".
Push program can transform pieces of itself and execute these pieces,
but it does not have a proper reification mechanism. I do not think
there is a mechanism to reify bits of Push program structure from the
meta-level into the object level, which can be then operated on.
Java program can manipulate bits and pieces of its own bytecode
representation, but it does not mean Java is a meta-programming
language. It would be only the case, if you could in Java (and in
analogy, in Push) reify a meta-level-object, like Java object, class,
procedure and so on, so you can manipulate it as if it was a first order
object in your language. For example in meta-programming procedural
languages you can build a generic procedure which takes itself or
another procedure as an argument and changes it (or itself) somehow. In
Push you need to have the actual chunks of code at hand to be able to
manipulate them, and you cannot build a generic mechanism of changing a
procedure, because Push does not have a representation of procedure as
such. It does not have explicit reification.
Of course it is a great step forward from the traditional languages used
in evolutionary computation, and it indeed has some very interesting and
powerful reflective features. It fits somewhere in between
non-meta-programming language and meta-programming language category, I
Hope that helps,
> Lee Spector
> Dean, School of Cognitive Science
> Associate Professor of Computer Science lspector@...
> Cognitive Science, Hampshire College http://hampshire.edu/lspector/
> Amherst, MA 01002 413-559-5352, Fax: 413-559-5438
- << Previous post in topic Next post in topic >>