[squeak-dev] enabling read-only literals...

John Pfersich smalltalker2 at mac.com
Fri Mar 13 07:43:18 UTC 2020


Thank the gods, finally.

/————————————————————/
For encrypted mail use jgpfersich at protonmail.com
Get a free account at ProtonMail.com
Web: https://objectnets.net and https://objectnets.org
https://datascilv.com https://datascilv.org


> On Mar 11, 2020, at 14:10, Eliot Miranda <eliot.miranda at gmail.com> wrote:
> 
> 
> Hi All,
> 
>     I'v committed the core support for read-only objects, adapted from Clément's Pharo implementation.  Enabling read-only literals is a very small step from that (three methods modified in the parser, and one method modified in Symbol class).  I would like to do this as soon as possible, but it may break code.  Hence my asking for permission/sending out a warning before hand.  Note that the only code it will break is bad code; code that writes to literals.
> 
> With the changes installed doing this:
> 
> #(1 2 3) at: 2 put: 'nevermore'
> 
> raises a ModificationForbidden exception with the message text "ModificationForbidden:  #(1 2 3) is read-only, hence its field 2 cannot be modified with 'nevermore'"
> 
> 
> When we added read-only object support to VisualWorks some of the engineering staff were of the opinion that insulating customers from the change was a necessary thing, and so we implemented a preference to allow automatic mutating of read-only literals so that customers whose code did modify literals could set the preference rather than fix their code.  I *really* don't ant to do this.  It is a lot of complication for little gain; the right fix is just to rewrite the code not to write to literals.  Note that that's as easy as:
> 
> #(1 2 3) copy at: 2 put: 'nevermore'; yourself
> =>
> #(1 'nevermore' 3)
> 
> since copies of read-only objects are mutable.
> 
> So do I have everyone's consent in changing trunk over to read-only literals?  If there are no strenuous complaints by tomorrow noon, PST, I shall effect the change.
> 
> To avoid recompiling (which can produce unbound methods, etc) I shall change literals to be read-only via a pass over all literals and a pass over the Symbol table.  Hence the change should be non-invasive.  If your code (like probably 99.9% of all code in the system) doesn't write to literals you won't notice.
> 
> _,,,^..^,,,_
> best, Eliot
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200313/b87c01c1/attachment.html>


More information about the Squeak-dev mailing list