Please discuss this RFC on the -objects sublist. Thanks.

Matt, you should probably update the Mailist List to
perl6-language-objects for v2.

-Nate

Perl6 RFC Librarian wrote:
> 
> This and other RFCs are available on the web at
>   http://dev.perl.org/rfc/
> 
> =head1 TITLE
> 
> OO Integration/Migration Path
> 
> =head1 VERSION
> 
>   Maintainer: Matt Youell <[EMAIL PROTECTED]>
>   Date: 25 Aug 2000
>   Mailing List: [EMAIL PROTECTED]
>   Version: 1
>   Number: 161
> 
> =head1 ABSTRACT
> 
> Allow Perl 6 to benefit more directly from object orientation and object
> syntax while leaving a bridge to Perl 5.
> 
> =head1 DESCRIPTION
> 
> =head2 Overview
> 
> Everything in Perl becomes an object, using existing object-syntax. Out of
> plain sight, there would be essentially three base classes: Scalar, List,
> and Hash. Stricter typing would be imposed (as needed) at the object level
> without the need for new keywords. The Scalar base class would know about a
> fixed number of types, perhaps: ref, int, long, bool, and string. Other
> types could be added by subclassing Scalar.
> 
> =head2 Examples
> 
> For example, rather than:
> 
>  my int $intVal = 0;
> 
> you would say:
> 
>  my $intVal = 0;
> 
>  $intVal->asInt;
> 
> Or possibly even:
> 
>  my $invVal->asInt = 0;
> 
> for simplicity.
> 
> Unary operations could also be made the Scalar object's responsibility in
> the same style:
> 
>  $record->chop;
> 
> Or even possibly controversial things like:
> 
>  $value->undef;
> 
> Finally, some of the more domain-specific features being requested of the
> language could be added in a subclass of Scalar. For example,
> transaction-friendly variables might be subclassed:
> 
>  use Transactions;
> 
>  my $firstName = "Bob";
> 
>  # ... (transaction happens) ...
> 
>  $firstName->commit; # or ->rollback
> 
> (Of course, transaction vars might be in their own, independent, class ala
> TMTOWTDI.)
> 
> =head2 Wrap-up
> 
> What this gives us is a means for adding functionality while leaving the
> basic language structure alone. This way we don't interfere with
> improvements happening elsewhere in the language, and we leave a clean
> migration path for Perl 5.
> 
> Also, by allowing lower-level extensibility, many language-feature requests
> may become moot.
> 
> =head1 IMPLEMENTATION
> 
> Most of the tools required to implement this system are already there.
> 
> - Scalar values already have Perl Doing The Right Thing for type conversion.
> Providing the user with methods to activate type conversion explicitly
> shouldn't be a major chore. In fact it could lighten Perl's load in many
> cases by eliminating guess work about when to convert.
> 
> - The existing bless-based object system provides most (if not all) of the
> tools needed to implement this system. For example, if I create my own
> scalar class in Perl 5, I can say:
> 
>  $myScalar->chop;
> 
> or
> 
>  chop $myScalar;
> 
> and Perl automagically knows what I mean, barring namespace considerations.
> 
> It could work the same way in Perl 6. That would mean that older code could
> very easily get along with newer code, because all of the same operators
> would still be there and they would still work as expected.
> 
> =head1 MISC
> 
> This approach may also allow for better organization of Perl's internals,
> specifically if the plan is to move toward a Topaz-style (C++)
> implementation. Also, by organizing responsibilities into explicit classes,
> the "mind-reading" load might lighten for the Perl interpreter. At least it
> looks that way from outside.
> 
> =head1 REFERENCES
> 
> RFC 4:   "Type Inference"
> 
> RFC 49:  "Objects should have builtin stringifying STRING method"
> 
> RFC 89:  "Controllable Data Typing"
> 
> RFC 137: "Overview: Perl OO should I<not> be fundamentally changed."
> (specifically the EXECUTIVE SUMMARY)
> 
> http://www.perl.com/pub/1999/09/topaz.html : "Topaz: Perl for the 22nd
> Century" - Chip Salzenberg
> 
> http://www.youell.com/matt/perlstring/ - A C++ string class that emulates
> Perl's scalar manipulation tools. Bears some similarity to the Scalar object
> described here.

Reply via email to