Very strange bug on Streams and probably compiler

Klaus D. Witzel klaus.witzel at cobss.com
Wed Feb 14 16:48:54 UTC 2007


Hi Damien,

on Wed, 14 Feb 2007 17:19:13 +0100, you wrote:
> On Feb 14, 2007, at 4:36 PM, Bert Freudenberg wrote:
>
>
>> It is normal.
>
>
> This is normal for you because you know how the compiler works. But
> do you think the compiler works normally? Is it normal that a
> compiler considers two equal strings as identical? I would agree with
> symbols because symbols are immutable. I think this is a first bug, a
> bug in the compiler.
>
> In my opinion, there is another bug. When the collection of a stream
> becomes full, its is replaced by another bigger collection. So,
> first, the stream uses the collection you passed to the constructor,
> then, at a given time, this collection is replaced by a new one. I
> don't think it's a normal behavior.

Whatever the stream does with the collection, it is encapsulated. Imagine  
the stream always uses a highly optimized species for its internal job (or  
a file on your harddisk!). You should not depend any code on the internals  
of (in this case) stream.

I suggest you use (aStream contents asArray) and then #= for comparing  
aStream's contents to your expectations.

/Klaus

> In my opinion, the collection
> must always be the one you gave at the beginning OR it must always be
> a copy. I prefer the second solution.
>
> So, what should be done ? I can write tests for the compiler and
> tests for streams to show the behavior. This tests will fail because
> they show a non corrected bug.
>
>
>> Lesson: never modify string literals.
>
> Lesson: Use a correct compiler :-)
>





More information about the Squeak-dev mailing list