Hi Sven,
See also discussion at https://github.com/OpenSmalltalk/opensmalltalk-vm/pull/232

2018-04-04 11:32 GMT+02:00 Sven Van Caekenberghe <sven@stfx.eu>:
Somehow, somewhere there was a change to the implementation of the primitive called by some streams' #atEnd.

IIRC, someone said it is implemented as 'remaining size being zero' and some virtual unix files like /dev/random are zero sized.

Now, all kinds of changes are being done image size to work around this.

I am a strong believer in simple, real (i.e. infinite) streams, but I am not sure we are doing the right thing here.

Point is, I am not sure #next returning nil is official and universal.

Consider the comments:

Stream>>#next
�� "Answer the next object accessible by the receiver."

ReadStream>>#next
�� "Primitive. Answer the next object in the Stream represented by the
�� receiver. Fail if the collection of this stream is not an Array or a String.
�� Fail if the stream is positioned at its end, or if the position is out of
�� bounds in the collection. Optional. See Object documentation
�� whatIsAPrimitive."

Note how there is no talk about returning nil !

I think we should discuss about this first.

Was the low level change really correct and the right thing to do ?

Note also that a Guille introduced something new, #closed which is related to the difference between having no more elements (maybe right now, like an open network stream) and never ever being able to produce more data.

Sven