[self-interest] prototypes, "meta" and reflective programming

Jecel Assumpcao Jr jecel at merlintec.com
Mon Jan 15 18:36:19 UTC 2001

On Fri, 12 Jan 2001, Dru Nelson wrote:
> C. Ramakrishnan wrote:
> >   (|slot1 = foo. slot2 = bar| code)
> > 
> > is a form of lightweight meta-programming?

I would call that "plain programming".

> what is meta-programming?

Well, my explanation in a previous message seems to have been too brief
so I'll try to be more detailed here.

"Meta" means "beyond", as in these three examples:


"Physics" is the study of the laws of the universe. It asks questions
like "if I let this object go, will it fall down or fly away?".

"Meta-physics" is the study of physics. It asks questions like "are the
laws we see in the universe the only possible ones? Are they random or
the product of an intelligent design?".


This list is for the discussion of the Self programming language. If we
start talking about the list itself, asking questions like "should a
simple reply go to the list or just to the author? Should we just
discuss Self or are Self-like languages ok?" then we can say that we
are having a "meta discussion".


Here is a bit of programming in Self:

     failed: students copyFilteredBy: [ |:s| s grade < 5.0 ]

This program is *about* students and their grades. Now here is a bit of
meta-programming in Self:

    enumerating all enumerate asList copyFilteredBy:
       [ |:m| m isReflecteeMethod &&
                     [m sourceString asTextLines size == 10]]

This program is *about* a program - it finds the list of all methods in
the system that are exactly 10 lines long. Though this code looks very
much like the previous one, there is a subtle difference in that 's'
was an object and 'm' is a meta-object (a mirror). But there is
sometimes no difference at all in the tools used by programmers and
meta-programmers. In the example of a discussion and a meta-discussion
both used exactly the same tool: English.

-- Jecel

More information about the Self-interest mailing list