Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^8: ref to read-only alias ... why? (notabug)

by LanX (Canon)
on Jan 06, 2012 at 18:44 UTC ( #946649=note: print w/ replies, xml ) Need Help??


in reply to Re^7: ref to read-only alias ... why? (notabug)
in thread ref to read-only alias ... why?

Could you please clarify which the "working case" is in your opinion?

I agree with tye that there are good arguments for both perspectives.

Cheers Rolf


Comment on Re^8: ref to read-only alias ... why? (notabug)
Re^9: ref to read-only alias ... why? (notabug)
by ikegami (Pope) on Jan 06, 2012 at 21:47 UTC

    Could you please clarify which the "working case" is in your opinion?

    It shouldn't matter whether your scalar was created by «my $x» or by «123». The literal «123» should return a modifiable value. The code in \ is specifically there to emulate that without the cost of creating a new scalar every time «123» is evaluated.

    I agree with tye that there are good arguments for both perspectives.

    I can't find these arguments. Could you give me a link?

      The literal 123 should return a modifiable value.

      Could you elaborate on that please? I don't find that neither convincing nor intuitive. If that's true, why error message "Modification of a read-only value" exists at all? By the same logic 123++ should be working fine, no?

        Expected result:
        Expected Current for (1..2) { for (1) { my $r = \$_; ++$$r; say $$r; 2 2 2 2 (threaded) } [die] (non-threaded) } for (1..2) { for (1) { ++$_; say; 2 2 [die] } } for (1..2) { for (1..3) { ++$_; say; 234 234 234 345 } }

        123++ should be working fine, no?

        A "useless" warning would be appropriate.

        ++123 would be equivalent to 1+123, though.

      > I can't find these arguments. Could you give me a link?

      He didn't list many arguments, thats the link: Re^3: ref to read-only alias ... why? (notabug)

      > It shouldn't matter whether your scalar was created by my $x or by 123.

      So your POW is that the standard behavior is wrong, such that in my code-example inc_a() should better also act like inc_b()?

      Without really understanding the opcode-level I'm wondering why you say that either behaviors are difficult to implement if both already exist.

      IMHO there should always be a configurable (i.e. switchable) warning because different people expect different behavior.

      Cheers Rolf

        He didn't list many arguments

        He mentions there are arguments for both ways ("I don't find it hard to imagine cases where either result would be preferred."), but they're not listed.

        So your POW is that the standard behavior is wrong

        My POV is:

        • There is currently no standard. (See Re^11: ref to read-only alias ... why? (notabug).)
        • Many people are currently modifying values from literals where it is possible to do so, and they are very unwilling to give up that feature.
        • Perl is about enabling people to do what they want to do.
        • The two downsides are addressable.
          • Inefficiency of creating a new scalar every time a const op is evaluated. (Use a COW mechanism.)
          • Creation of useless code is possible, e.g. 123++; (Emit warnings when appropriate.)

        Without really understanding the opcode-level I'm wondering why you say that either behaviors are difficult to implement if both already exist.

        There's no denying the current implementation isn't sane.

        • Inconsistent. (For example, for (1) { ++$_; say $_; } is different than for (1) { $r = \$_; ++$$r; say $$r; }.)
        • Buggy. (For example, for (1..2) { for (1..3) { ++$_; say; } }.)

        Hash key vivification has similar problems.

        sub {}->( $h{x} ) # Doesn't vivify sub {}->( @h{x} ) # vivifies for ( $h{x} ) { } # vivifies for ( @h{x} ) { } # vivifies \$h{x} # vivifies \@h{x} # vivifies

        In both case, it's more a question of time than difficulty.

        IMHO there should always be a configurable (i.e. switchable) warning because different people expect different behavior.

        I don't see a point to a switch whose sole purpose is to break working code.

        No argument or example was given to indicate there is another purpose. There probably are some, and I would love to hear them. Until then, the switch makes no sense.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://946649]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (9)
As of 2014-12-22 07:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (112 votes), past polls