Loading ...
Sorry, an error occurred while loading the content.

1426Re: [GP] GP, meta programming and reflection

Expand Messages
  • Mariusz Nowostawski
    Mar 2, 2003
      Lee Spector wrote:
      > No offense taken, and I may even agree, but could you provide a pointer to
      > the definition of reflection that you are using? By definitions I've been

      The best description, together with semi-definitions about object
      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 at
      > http://www2.parc.com/csl/groups/sda/projects/reflection96/docs/malenfant/ref96/node2.html)
      > 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.

      Yes indeed. The quoted definitions (by J. Malenfant, M. Jacques and F.N.
      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,

      best regards

      > --
      > 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
    • Show all 6 messages in this topic