> Am 13.11.2017 um 21:08 schrieb Stephane Ducasse <stepharo.s...@gmail.com>:
> 
>> 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.
> 
> 
No, you will depend on zinc classes. How is that supposed to work in bootstrap? 

Norbert
>> 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