On Thu, May 06, 2004 at 01:52:45PM -0400, Dan Sugalski wrote:
: At 10:44 AM -0700 5/6/04, chromatic wrote:
: >On Thu, 2004-05-06 at 10:39, Aaron Sherman wrote:
: >
: >> The simple case is:
: >>
: >> sub foo(X $i is rw) {...}
: >> class X {...}
: >> class Y {...}
: >> my Y $var = 'something';
: >> foo($var);
: >>
: >> In this case, something kind of interesting has to happen.
: >>
: >> Either the signature checking has to verify that Y isa X (and thus can
: >> be used polymorphically as X, not just converted to X) ...
: >
: >I'd argue 'Y does X', actually, though Dan disagrees and says "Well,
: >whatever!"
:
: Nope. Dan says "Is that X in the signature an assertion of interface
: or of parentage?" and has the Perl 6 compiler emit the appropriate
: code. (Parentage is the safer option generally, since only in perl 6
: is the class == interface assertion going to be true, and you might
: want to be able to yank in Python/Ruby/Perl5/Objective-C/Java/C#/C++
: objects and classes. Or... you might not, which is fine too)
I don't see a problem with using "does" sematics in Perl 6 because
roles and classes live in the same namespace, and "does" naturally
devolves to "isa" semantics if you hand it a class. So we just
"render unto classes the things that are class's, and unto roles the
things that are role's", as it were. So the X in the signature is
always an assertion of interface, which may or may not care about
parentage--and which may care about *extra* things if X is a subtype
that adds constraints. But subtypes also live in the same namespace
as classes and roles, so again, we know almost immediately what kind
of checking is required.
Larry