Aaron Sherman writes:
: On Thu, Oct 25, 2001 at 11:30:00AM +1000, Damian Conway wrote:
: > 
: > Glenn wrote:
: > 
: >    > > Have I missed anything?
: >    >
: >    > Perhaps you've missed one thing.
: >    >
: >    >    [snip]
: >    >
: >    > Perl 6 could provide a pragma to produce a warning on the first
: >    > run-time auto-numerification (compile time would be really hard to
: >    > do), together with a selection of different string numerification
: >    > methods for extracting the numeric values, for a variety of types
: >    > of numeric values.
: > 
: > I believe this would be covered by the ability to lexically redefine
: > C<operator:+($)>.
: 
: Hmm... this seems dangerous. In general a "numeric context" was imposed
: in Perl5 by the function that needed it by calling SvNV. The overhead
: that I see from externalizing that, and forcing:
: 
:       $x + $y
: 
: To implicitly be:
: 
:       +($x) + +($y)
: 
: is rather large (three times the stack management, type checking, etc)....
: Is this really what we want?

That depends on whether operator:+ is truly identified with the
internal numerifying function.  In the first one, the internal numerify
might only be called if numerification is actually needed.  In the
second one, it would potentally be forced.

There are a number of internal functions that may or may not be
identified with a particular operator.  Some of these show up as
non-operator keys in Perl 5's overloading scheme, but there could be
others.  Even some that are identified with particular operators are
called intrinsically in places that don't use the operator in question.

In any event, we need to realize that lexically scoped overrides might
interfere with overloading.  What will you do if $x or $y has its own
ideas of what unary + ought to do?  Seems to me that we have to make
overloading override the lexically scoped operator, if the lexically
scoped operator is pretending to be the built-in default numerify.

Larry

Reply via email to