Re: RFC 218 (v1) C<my Dog $spot> is just an assertion
[email protected] (Nathan Torkington) Wed, 13 Sep 2000 16:05:55 -0600 (MDT)
| Newsgroups | perl.perl6.language.objects |
|---|---|
| Message-ID | <[email protected]> |
Perl6 RFC Librarian writes: > I therefore propose that C<my Dog $spot> comes to mean that C<$spot> > is restricted to being either undefined or a reference to a C<Dog> > object (or any subclasses of Dog). Simply having this implicit > assertion can be useful to the programmer, but I would argue that its > main advantage is that the compiler knows the object's interface at > compile time and can potentially use this fact to speed up method > dispatch. Yes! I mentioned the hypothetical use strict 'types'; which would require all variables assigned to/from an object, and all variables upon which method calls are made, to be typed like this. Then the compiler can: (a) optimize (b) check at compile-time Your sample implementation is done through a Tie class, which is only runtime. The big win is that if you check types like this (and it's a window into C's type-checking hell) then Perl knows types at compile-time. If there's a formal interface specification for classes, the compiler can use this to check whether a method call is valid or not. You can build calls to the correct subroutine into optree instead of delaying that lookup until runtime. Every compile-time check comes at the cost of a run-time freedom, though. All bets would be off if you modified @ISA, reblessed, or passed objects through non-strict-types-compliant code. Polymorphic types also becomes a problem: how to say that it's okay for a variable to hold a Dog *or* a Cat, because we know that both of them have a "pet()" method? I'd love to see these suggestions incorporated into your RFC. I was going to do it myself, but I have a lot of other things to RFC. > =head1 MIGRATION > > Migration issues should be minor, the only problem arising when people > have assigned things that aren't objects of the appropriate type to > typed variables, but they deserve to lose anyway. Not if you made the checks and optimizations enabled by a pragma. Old programs wouldn't have it, so they could continue to do their stupid things and be fine. Nat