HaloO chromatic,

you wrote:
I don't understand the question (I don't recognize the words "lubs" or
"glbs", for example), but I don't think this has anything at all to do
with multiple inheritance.

Sorry, that was given only in the picture: lub = least upper bound (also known as supremum) glb = greatest lower bound (infimum) see e.g. http://www-rohan.sdsu.edu/~gawron/mathling/poset/posets.pdf


I don't think that roles are necessarily unsubstantiable; class and role
names should occupy the same namespace.

That is the case in Perl 6, isn't it? Makes sense to me. And subs are in the same name space as well, right?


 It ought to be possible to have
class A with a particular set of methods and class B with a set of
methods of the same name and similar enough semantics for the entire set
of behavior of those methods and be able to mark class B as performing
the A role

Hmm, like that?

class A { ... }
class B does A { ... }


and to be able to pass B objects into code that asks for A
objects and have things just work without A or B necessarily having to
share code and definitely without them being related to each other in
any sort of inheritance relationship.

Types/roles and classes form different hierarchies. The former is partially ordered by checking the does relation the latter by checking the isa relation. By letting classes do roles you create families of objects that do a certain behaviour but don't share the same implementation. On the other hand areas of code happen to require certain functionality. The entity that checks that they are met is the typechecker. My question basically is about how you declare your intensions so that the type checker can DWYM. E.g. if you were to specify comparability so that you are just comparing the right things.


Maybe there's not enough behavior in a role to make it a full class, but
there's enough behavior that it's useful across classes horizontally and
it deserves its own name.

My question is not about completeness of roles versus classes but about how the Perl 6 type system shall work. Or better which assertions it is supposed to make about code. This is very usefull when it comes to programming in the large and of course it allows good optimization if the typecheker can proof e.g. that no dynamic dispatch is needed because there is only one statically determinable match anyway.


Maybe that's not helpful, but I did warn that I didn't understand the
question!

I'm struggling, too. -- TSa (Thomas Sandlaß)





Reply via email to