On Monday, October 14, 2002, at 07:54 PM, Mark J. Reed wrote: > Heh, indeed. :) But seriously, you could do worse. JavaScript > receives > a lot of (IMHO) undeserved criticism. The name is a blatant marketing
No, I've had to use it off-and-on for the past year... it deserves it. :-) But enough of that. I agree, prototype based inheritance is really useful sometimes. (Those of you not subjected to JS may be more familiar with Class::Classless, a quite nice perl5 implementation.) I'd definitely like to see builtin support for instance based inheritance. I've found many, many uses for Class::Classless, and have made halfbreed variations of it for several special-case situations. IMO the best situation would be to have both worlds collide; not strictly class-based, not strictly proto-based, but a mix-and-match of each in accordance to the particular problem you're trying to solve. An interesting way to do this could simply be to allow object instances, as well as normal classes, in the inheritance tree; you could then mix a prototype-based object with, for example, several class-based mixin behaviors, etc. Something like: my $obj = Something.new; # (1) obj based on a class class MyClass is $obj {...} # (2) a class based on an obj! my $obj2 = MyClass.new; # (3) obj based on a class based on an obj my $obj3 isa $obj; # (4) an obj based on another obj my $obj4 isa $obj isa MyClass; # (5) obj + mixin (but what syntax???) Note that (2) would have interesting implications if you changed $obj runtime, but would be very uncommon. (4,5) could be quite common, tho. And (4,5) need to use a word other than 'is', which means that currently none of these syntaxes look anything alike. :-P Mixing OO frameworks is quite useful in some real-world situations. Sometimes it's more efficient to change your OO implementation than to try to translate your problem to fit the one you're given. MikeL