Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Prototype object model for Parrot

6 views
Skip to first unread message

Allison Randal

unread,
Feb 5, 2007, 9:40:40 PM2/5/07
to Perl 6 Internals
I spent yesterday pair programming with Sam Vilain on a prototype object
model written in PIR. We actually wrote two prototypes. The first one
had 2 levels of meta objects and the system was getting pretty
convoluted, so we scrapped it and started over.

I just checked in the second prototype to compilers/smop (Simple Meta
Object Protocol). The prototype has two classes, Class.pir, and
Attribute.pir. The instance of Class.pir is a class object, and the
instance of a class object is an object.

.local pmc class, init_args, myobj
init_args = new Hash
init_args['name'] = 'MyClass'
class = new 'Class', init_args
class.add_attribute('myattribute')
myobj = class.'new'( 'myattribute' => "Foo" )

The prototype code bootstraps off the existing object model, so for now
you create a class object with "new 'Class'". Ultimately this will be
the newclass opcode instead:

# class = newclass 'MyClass'

An Attribute is a simple datatype that stores the attribute name, its
type (if any), and a link back to the class that contains the attribute.
(It's the class's pattern for the attribute, not the storage for the
attribute value.)

This is a simple object model, but it can be used to implement as many
meta-levels as a particular HLL needs. Each level of class object is
just an instance of the next higher level of meta class object.

To move past bootstrapping on the current object model, the next step is
to implement this prototype at the C PMC level, and incorporate much of
the functionality of src/objects.c.

Allison

Kevin Te

unread,
Feb 6, 2007, 10:57:18 AM2/6/07
to Allison Randal, Perl 6 Internals
I was just starting to port Class::MOP to C PMCs, I would be happy to
help port smop to C PMCs.

Kevin

Allison Randal

unread,
Feb 6, 2007, 11:53:10 AM2/6/07
to Kevin Te, Perl 6 Internals
Kevin Te wrote:
> I was just starting to port Class::MOP to C PMCs, I would be happy to
> help port smop to C PMCs.

Great, let's meet on #parrot later this week.

Allison

0 new messages