What about contributing to zinc streams? Imaging that I will create block based streams, collecting:/selecting streams like in XSteam. Where I should put them?
2017-11-13 23:51 GMT+01:00 Norbert Hartl <norb...@hartl.name>: > > > > 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 > >>> > >> > >> > >