Re: Tying sub arguments is rare?

[email protected] (Chip Salzenberg) Thu, 14 Oct 1999 13:22:37 -0700
Newsgroups perl.perl6.porters
Message-ID <[email protected]>
According to Ken Fox:
> Chip Salzenberg writes:
> > According to Ken Fox:
> > >    my $x = 1;
> > >    $x = foo();
> > >    sub foo { my $y : KenFoxScalar = 2; $y }
> > 
> > Oh, that's easy.  Scalars are allowed to be tricky, but as long as
> > they're actually scalars they have to know how to do value assignment.
> 
> Custom representations aren't very useful if they get "sliced" whenever
> they get copied.

Sure they are.  Think of $$.  After C<$a = $$>, you don't expect $a to
be a magical pid variable, just a copy of the current pid.

On the other hand, in C<$a = $b>, $b's copy_to() is allowed to do a
dynamic_cast<>() on $a, and do something special if it's a known type.
That allows assignments to be fatter than usual when appropriate.

> Perl-wrapped constructors become impossible too.

There's were reasons Larry made all objects references.  I'll bet this
is one of them.

> > > Doesn't all of this trouble go away if extension writers only create
> > > new Guts?
> > 
> > Yes, but then we're back to Perl 5's requirement of an extra level of
> > indirection on EVERY SINGLE DATUM.  I'm sick of that.
> 
> Huh? The core can still do ThinScalars -- just make extension writers
> do FatScalar-like scalars.

In that case, FatScalar et al become mere forwarders.  That would
impose an extra vtable dispatch on *every* operation that currently
requires only one.

> I have no objection to my customizations taking an indirection
> penalty in exchange for simple transmogrification.

But not only your customizations would pay that penalty.  FatScalar,
FatArray, FatHash, etc. would also pay it.  That would add up.

   I never worry about giving away a Factor of Two in a program.
   The problem is, neither do nine of my friends.
			-- Stu Feldman (progenitor of Make)

-- 
Chip Salzenberg             - a.k.a. -              <[email protected]>
           "I am the Lemon Zester of Destruction!"  //MST3K