chromatic wrote:
Parrot *cannot* support Perl 6 semantics with the current object system. Full stop. If we want Rakudo to run efficiently on Parrot and if we want Rakudo to interoperate with other languages on Parrot, we have to fix the object system.

+1. While I can go and write an object system that looks how I want for Rakudo/NQP-RX, it's not going to have the level of interop that would be desirable, so I'd much rather see Parrot level improvements.

Parrot's conflation of NameSpace and Class requires the clunky initialization system with :load and :init to attempt to create Class instances before runtime. This is fragile and depends on subtle issues of ordering.

Aye. Just to clarify on namespace/class relations, a method *may* end up living in a namespace, but only by virtue of it explicitly being declared as also going there as well as in the methods table of the class. That is, in Perl 6 terms:

   method foo() { } # not in namespace
   our method bar() { } # in namespace

Certainly going in the namespace should not be the default though, which is what iirc is what #389 fixed.

Also the class registry probably should die.

A *declarative* PIR syntax for Classes, attributes, and methods would not require this fragility, because we could set up the Classes at *compilation* time and freeze them into bytecode.

A declarative PIR syntax for classes, attributes and methods is not what Rakudo needs, though. What I *really* want is Parrot to provide is some quite low-level pure prototype-ish object that:

* Can be serialized efficiently - including trees of them

*  Knows how to have native types as attributes

* Can look up said attributes by index as well as string (because most Perl 6 attribute lookups should be done by an offset)

* Has a way to let us call methods both dynamically and statically (that is, we can resolve method calls whose names are statically known at compile time into offset based calls - this probably implies single inheritance if we want to be efficient, and that is fine)

Rakudo would then implement it's ClassHOW and RoleHOW (meta-objects for Class and Role) in terms of this. Parrot could similarly then provide class and role semantics that support something close enough to the current Parrot semantics to not make life too much of a nightmare for existing developers. (I'd want to implement our ClassHOW/RoleHOW in NQP so we can share them amongst backends, essentially making the small efficient pure prototype-ish thing our main primitive to port - this is somewhat off-topic for Parrot devs, but an important factor for Rakudo's object model development).

Note that meta-objects implementing e.g. a class system with multiple inheritance would be totally free to do so. It's just that the primitive thing at the base of it all should be as simple and optimizable as is reasonably possible.

I fully expect Rakudo's class and role definitions to continue to compile down to a series of method calls on meta-objects. However, what should be possible is that we can then freeze the resulting object (/meta-object) tree into the PBC, so that we can just bring it back to life later on rather than having to run through re-creating it.

Thanks,

Jonathan

_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev

Reply via email to