On Sat, Dec 13, 2003 at 11:12:31AM -0800, Larry Wall wrote:
> On Sat, Dec 13, 2003 at 04:57:17AM -0700, Luke Palmer wrote:

> : For one, one role's methods don't silently override another's.  Instead,
> : you get, er, role conflict and you have to disambiguate yourself.  

How do you disambiguate?

> : For
> : two, you can attach new roles to an object at runtime (I don't know if
> : you can do this with mixins, actually).
> 
> Yes, you can.  The mixin creates a new singleton class every time
> you do it, derived from the previous class.  My current thinking is
> that run-time roles work a little differently.  You get a singleton
> class for the object the first time you apply a property, so that each
> object's properties remain distinct.  However, subsequent properties
> re-use the existing singleton class, and do the same role-conflict
> checks at run time that "does" would do in the class definition
> at compile time.  Furthermore, the singleton class is not really
> derived from the original class, but just presents a different view
> of the same class, so that, from the viewpoint of the object, every
> role has the same standing, and run-time roles aren't privileged
> above compile-time roles, as they would be if the singleton class
> were really derived from the original class.  In a sense, the object
> thinks it's recomposing the original class, but it's slightly wrong.

After reading this several times, I _think_ I understand.  Let me
check: imagine that the original class is a text buffer going from
0-99.  We have two roles (A and B), each of length 100.  Objects of
various types can then see different segments of the buffer (i.e.,
different methods/properties/whatever), as follows:

        Type            Can see 
        ----            -------
        Class           1-100           
        A               101-199
        B               200-299
        Class+A         1-100,101-199
        Class+B         1-100,200-299
        Class+A+B       1-100,101-199,200-299

Is that right?

Dave

Reply via email to