Thanks for getting this RFC together, Piers.

A few comments:

        * I suggest you remove my alternative C<:must(Foo)> suggestion.
          It's too ugly to live, inless you just want to use it as a
          scare tactic to encourage Larry to chose the C<interface>
          syntax instead ;-)


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

                interface Fetcher;

          would then become:

                package Fetcher : interface;


        * There's also no need to distinguish C<use base> and C<use interface>,
          since you've previously distinguished them by keyword. I would
          suggest that either C<use base> be used for both types of
          inheritance, or else the definition of an interface specification
          just be a regular C<package>.


        * Interfaces will also need to honour C<use delegation>
          (RFC 193), which provides yet another way of *not* actually
          specifying a method, yet still having it callable.


        * The C<use deferred> pragma seems unnecessary, as it is sufficient
          to *declare* the autoloaded method, rather than *define* it.
          That is:

                use deferred 'rollover';

          is really just:

                sub rollover;

          BTW, this trick already works in Perl 5 (for making C<can>
          acknowledge autoloaded methods).


Damian

Reply via email to