Larry,

I have been giving a lot of thought to the way you have been describing classes lately. I think I understand where you are going with it, but I need to understand some of the details.

On Oct 14, 2005, at 2:15 PM, Larry Wall wrote:
This only reinforces my view that all the meta stuff for Dog must
be via the .meta or the associated package.  There is no Class object.
It's a false dichotomy.  Class is a role that manages partially
instantiated objects, just as Routine (or whatever it is these
days) is a role that manages partially instantiated sub calls.
And they mostly manage by delegation to .meta.

If I understand you correctly then, what I have been calling a class object is just really the "thing" on the other end of .meta.

When I say "class object", I mean some kind of object instance which contains all the information to describe a class (methods, meta- attributes, superclass list, etc). This can just as easily be called a metaclass instance too, it makes no difference to me.

As for the idea that "Class is a role that manages partially instantiated objects", I am not sure i am understanding what you mean here. I am assuming this is along the lines of the "Class's are a special form of undef" idea. In that case I can see where maybe the Class "thing" is simply a parameterized role of some kind which has the following behaviors:

1) it evaluates to undef in an expression

  my Dog $fido;
  if ($fido) {
      # this won't run, $fido is not yet defined
  }

2) it acts as a proxy if a method is called on it

  my Dog $fido;
  $fido .= new();

If this is true, then maybe Class looks something like this:

role Class[MetaClassType $T] {
    # evaluate to false in bool context
    method prefix:? () { bool::false }

    # probably need to overload some other
    # operators here too, but I will leave
    # that for now

    # the AUTOMETH checks for an calls
    # any method you attempt to call on
    # this particular class
    # ( I am not sure about the details
    # of the code here, but you get the
    # idea I think )
    method AUTOMETH { $T.can($_).([EMAIL PROTECTED]) }
}

Then if this were so, then the following:

  my Dog $fido;

Would be de-sugared into:

  my $fido = Class[Dog].new();

At least this is how I am seeing it currently in my head. Please let me know if I am way off the mark here, I am trying to understand how this all will work. Ideally it can fit into the current meta-model prototype as designed, if not, I have no problem re-writing it again, but I just need to wrap my head around how this should work.

Thanks much,

Stevan





Reply via email to