Nathan Wiger <[EMAIL PROTECTED]> writes:

> Nathan Torkington wrote:
> > 
> > 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
> 
> Hate to add a "me too", but I think this is a great idea. Nat needs to
> be able to torture himself in whatever sick C-type ways he desires. ;-)
> ;-)
>  
> Seriously, though, this adds lots of potential benefits.
> 
> > 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?
> 
> Seems in order to satisfy this you'd have to have a common ancestor,
> Pet, which Dog and Cat inherited:
> 
>    my Pet $foofoo;      # Can be Dog, Cat, or anything inherited

I'm kind of tempted to look at adding another pragma to go with 'use
base' along the lines of:

     use implements 'Interface';

Which is almost entirely like C<use base 'Interface'> but with
'Interface' consisting of nothing but:


     package Interface;

     sub virtual_method;
     sub virtual_method2 (#prototype);
  
     ...

     1;

This is, of course, strictly unnecessary since C<use base> could do
exactly the same thing, and it is painfully Javalike. It kind of
depends on whether or not useful compiletime optimizations become
possible if a class is flagged as being 'virtual'.

> And if you didn't want inherited classes to count, you could specify
> that as an attribute:
> 
>    my Pet $foofoo : onlybase;    # Must be a Pet, not Cat/Dog
> 
> Or ":only", ":nochildren", ":justme", or any other similar word...

Why on earth would I want to do that? You just shot the polymorphism
in the head.

-- 
Piers

Reply via email to