>         * The new C<interface> keyword would be unnecessary if *package
>           specifications* could take attributes:
> 
>                 interface Fetcher;
> 
>           would then become:
> 
>                 package Fetcher : interface;

I'm not sure about this - seems like we're squeezing a whole bunch of
stuff into "package" that's not a package.

If an interface can't have variables, real methods, or do anything, then
a separate keyword seems in order. Looking at this:

   interface Fetcher;

Makes it much more obvious "Ok, here's an interface, not a package. I
can't stick 'real stuff' in here". However, if we are going to
potentially add many more attributes, like

   package int : variable;    # custom var for "my int $x = 5";

then perhaps attributes are the way to go after all.

It should also be a compile-time error for an interface to contain
anything except sub definitions (and possibly constant variables). I
didn't see that mentioned, but I could have missed it.

>         * There's also no need to distinguish C<use base> and C<use interface>,

Again, I'm not sure. As the RFC shows, it's quite easy to imagine a
situation where you have a tangential interface specification that does
*not* serve as the inheritance point for your class:

   package TrainedCat;

   use strict 'implementation';
 
   use base 'Cat';
   use interface 'Fetcher';

I can see many potential uses for keeping interfaces and classes
separate.

Finally, maybe that should be "use strict 'interface'" ?

-Nate

Reply via email to