Very strange bug on Streams and probably compiler
Mathieu Suen
mathk.sue at gmail.com
Wed Feb 14 17:10:26 UTC 2007
On Feb 14, 2007, at 5:37 PM, Klaus D. Witzel wrote:
> Stef,
>
> why should strings be immutable, and why blame the compiler.
It's not about making string immutable but is wen you use it as a
literal it should be immutable.
This show use that literal that are not immutable make really bad
tedious side effect. ( Same reflection for #(a b c ) )
Math
>
> The same situation is, for example, with Associations. In order to
> prevent mutation, someone invented ReadOnlyVariableBinding.
>
> Literals have nothing much to do with compiler optimization, see
> senders of #encodeLiteral:, just with determining the correct
> bytecode for pushing them onto the stack.
>
> But of course the compiler could emit code for always copying
> string literals, if you can afford the performance penalty.
>
> As Bert wrote: it's normal :)
>
> [Okay okay other languages have immutable string, but this is
> Smalltalk.]
>
> /Klaus
>
> On Wed, 14 Feb 2007 16:56:56 +0100, stephane ducasse wrote:
>
>> Bert
>>
>>> It is normal.
>>
>> No this is not. You get used to it and accept it.
>>>
>>> You are modifying the 'a test ' literal into 'to test'. This
>>> modified string gets copied in the second test.
>>>
>>> Lesson: never modify string literals.
>>
>> It shows that the fact that the compiler optimizes the use of
>> certain literals such as boolean and number is good
>> for immutable objects but is wrong for mutable object such as
>> strings.
>>
>> Iin the semantics of Smalltalk nothing says that two strings with
>> the same representation in the same
>> methods are pointing to the same object. I did not check in which
>> books but the difference between strings and symbols
>> is really that two strings are pointing to two different objects,
>> while symbols are referring to the same objects (and are immutable).
>>
>> Stef
>>
>>
>
>
>
More information about the Squeak-dev
mailing list
|