On Mon, Nov 13, 2017 at 8:27 PM, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> The idea is to have much simpler streams which can be composed to get more 
> sophisticated behaviour.
>
> The most primitive streams should be binary read or write streams, like a raw 
> file or network connection.
>
> To add a character encoding/decoding you wrap them in a ZnCharacterReadStream 
> or ZnCharacterWriteStream (these use the newer, cleaner ZnCharacterEncoders).

Yes really nice :)

And Guille started to use them and we are slowly rewriting all the
stream internal users to use Zn and after we will be free.


> If you want buffering, you wrap a ZnBufferedReadStream or 
> ZnBufferedWriteStream around them.
>
> And there are some other examples in the system too.
>
> Have a look at BinaryFileStream and ZdcSocketStream.
>
> Simply put, MultiByteFileStream and MultiByteBinaryOrTextStream must die, 
> because they try to be everything at once and are impossible to change.


YES YES YES and celebrate. I could never understand anything. My brain
is too limited for these kind of games :)



> The contract of a stream should be much, much simpler than it is today.

Fully agree.

>
> For writing that means
>
> #nextPut:
> #nextPutAll:
> #next:putAll:
> #next:putAll:startingAt:
>
> the 3 last ones can be written in terms of of the first one, but the last one 
> is key because it can be the most efficient.
> And maybe also
>
> #flush
> #close
>
> Some helpers for character writing are
>
> #space
> #tab
> #cr
> #crlf
> #lf
>
> Maybe #newline

:)


>
> #<< is a handy method too.
>
> For reading that means
>
> #atEnd
> #next
> #next:
> #next:into:
> #next:into:startingAt:
> #nextInto:
> #peek
> #skip:
> #upToEnd
> #upTo:
> #readInto:startingAt:count:
>
> Again, they can all be written in terms of #next, but 
> #readInto:startingAt:count: is the core, efficient one.
> Note that #peek allows a one character lookahead, which should be sufficient 
> for almost all parsing needs.
>
> #close is also a necessary operation, #peekFor: a handy one, #nextLine is 
> popular too.
>
> There is a discussion about positioning (#position , #position: and related) 
> but these cannot be supported _in general_ by the kind of streams described 
> above.
>
> If you absolutely need these, read #upToEnd and use a regular ReadStream 
> (over a fixed collection).
>
> The collection based classic Streams should always remain in the system, they 
> are too handy. But have you seen for example, #nextInt32 on 
> PositionableStream ? Good luck with that when the the underlying collection 
> is anything other than bytes.
>
> All this being said, there is no one, single correct answer.
>
> But if we all try to simplify what we expect of streams (use a more limited 
> API), we'll be more nimble to make implementation changes later on.
>
> Sven
>
>> On 13 Nov 2017, at 19:58, Stephane Ducasse <stepharo.s...@gmail.com> wrote:
>>
>> Hi Evan
>>
>> I think that we will use the ZnStreams.
>> If we use Xtreams we will transform their API because some messages
>> are not really good.
>> Stef
>>
>> On Mon, Nov 13, 2017 at 7:54 PM, Evan Donahue <emdon...@gmail.com> wrote:
>>> I've heard mention once or twice on this list and in some release notes of
>>> what sounded like possible coming changes to the stream API. Could anyone
>>> point me to any concrete details about that? I haven't been able to dig
>>> anything up myself by searching. I'm about to write something that I'd like
>>> to be polymorphic with the stream API, but if that's about to change, I'd
>>> like to plan ahead.
>>>
>>> Thanks,
>>> Evan
>>
>
>

Reply via email to