Re: RFC 265 (v1) Interface polymorphism considered lovely

[email protected] (Damian Conway) Thu, 21 Sep 2000 07:51:04 +1100 (EST)
Newsgroups perl.perl6.language.objects
Message-ID <[email protected]>
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