Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^7: Shouldn't references be readonly? (updated)

by LanX (Saint)
on Aug 08, 2020 at 01:17 UTC ( [id://11120489]=note: print w/replies, xml ) Need Help??


in reply to Re^6: Shouldn't references be readonly? (updated)
in thread Shouldn't LITERAL references be readonly? (updated)

There are far more situations where it might make sense to append or add something to a simple type.

Not so with refs, no way a .= or a += will lead to anything meaningful.

Well except when blessed and overloaded. But that's far fetched.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

Replies are listed 'Best First'.
Re^8: Shouldn't references be readonly? (updated)
by ikegami (Patriarch) on Aug 09, 2020 at 06:55 UTC

    Making the var read-only won't prevent concatenation or addition, so it doesn't matter that $x . [] or $x + [] doesn't make sense.[1]. This isn't relevant to the topic at hand.

    The only thing making it read-only will do is prevent assignment, and map { $_ = 3 } $x.$y makes no more sense than map { $_ = 3 } [].

    Either prevent both of them, or prevent neither of them. No need for baseless inconsistencies.


    1. That said, $ref+0 makes some sense for refs to things other than objects with overloads, and both concatenation and addition make sense for refs to objects with overloads (which aren't farfetched at all!)

      Note that assigning to certain "unassigned scalars" is legitimate, such as the one returned by substr. Unassigned scalars with set magic simply wouldn't be made read-only, of course.

      But you know what else wouldn't be made read-only? "Unassigned scalars" from XS code. Making unassigned scalar *created by Perl* read-only would create inconsistencies with those created by XS code. This reduces the benefits of making any change.

      My point is about potential problems in backwards compatibility.

      A transformation of a string or a number into another string or number is common, BUT the transformation of refs is impossible.

      Hence it's far more likely that legacy code will break if something like $_++ became illegal for an aliased input like 3+4 .

      Same code for refs wouldn't make sense at all.

      I can't come up with more intuitive examples, but I'm sure those exist.

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery

        Put differently, you want to prevent transformation of references, but using a completely ineffective tool to achieve it. Making references read-only doesn't prevent transformation.

        Preventing transformation (stringification, numification, but not booleanification) of references might be a good idea.

        Issues:

        • Intentional uses of $ref+0 would have to be replaced by refaddr($ref).
        • Intentional uses of "$ref" would have to be replaced.
        • Programs that mostly function will start dying instead.

        Benefits:

        • Catch some bad code (But what code wouldn't already be obviously wrong?)

        Since making the scalar read-only doesn't prevent transformation (only assignment), there is no backwards compatibility issue relating to transformation.

        Hence it's far more likely that legacy code will break if something like $_++ became illegal for an aliased input like 3+4 .

        And that's exactly what the change is suppose to prevent. What's the point of making the change if it doesn't prevent exactly what it's suppose to be preventing!

        If you say there's no point in preventing $_ = ... when $_ is an unassigned string, then there's no point in preventing it when it's an unassigned reference.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (9)
As of 2024-03-28 10:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found