[squeak-dev] Re: Small question about ReadOnlyVariableBinding

Andreas Raab andreas.raab at gmx.de
Wed Nov 23 08:17:15 UTC 2011


On 11/22/2011 21:52, Ricardo Moran wrote:
> Hi guys,
>
> I have just a small question: how dangerous would it be if I change a
> system dictionary association (such as #SerialPort) to be a read-write
> binding?
>
> I want to be able to provide a different abstraction for SerialPort than
> the one squeak provides, but I don't want to change all the code that
> uses it. So I though a quick and dirty way to do it would be to replace
> it in the SystemDictionary, like this:
>
>     Smalltalk at: #SqueakSerialPort put: SerialPort.
>     (Smalltalk associationOrUndeclaredAt: #SerialPort) beReadWriteBinding.
>     Smalltalk at: #SerialPort put: MySerialPort
>
>
> Apart from being an ugly hack, do you think that could be dangerous in
> some way?

This should work fine. ReadOnlyVariableBindings are there to protect 
against accidentally overwriting system globals (i.e., when executing 
"Array := new" in a workspace which is one of my favorite mistakes :-) 
But as long as you know what you're doing, go ahead.

BTW, it will be faster to install your class if you do the following (it 
avoids the need to recompile all references):

	[SerialPort := SqueakSerialPort]
		on: AttemptToWriteReadOnlyGlobal
		do:[:ex| ex resume: true].

Cheers,
   - Andreas



More information about the Squeak-dev mailing list