+ 10000 Ah what a relief. Thanks a lot guille for all this good energy. BTW I also like the pattern. We should apply the same to OPAL. Do not mix API and add a wrapper for the backward compatible so that the new API is untouched. I really like that way.
Now we should replace cr by newline :) Stef On Thu, Mar 15, 2018 at 11:36 PM, Nicolas Cellier <[email protected]> wrote: > Very good initiative! > It's worth a few hick-ups. > > I've tried to reduce RWBinaryOrTextStream usage in Squeak maybe 10 years > ago, but you know it very well, the last places which are resisting are the > more intricated and convoluted. > I call it the SwiisKnifeStream and allways wandered why we would have to > carry so many subclasses of Stream, since we have one capable of almost > everything! > Managing the states in such a hierarchy was an art, if ever torture is an > art... and we are loosing a great can of worms for fishing the bugs. > So, R.I.P. and no regret! > > 2018-03-15 21:01 GMT+01:00 Sven Van Caekenberghe <[email protected]>: >> >> Executive Summary of the recent FileStream Changes >> >> In Pharo 7 Guille Polito recently committed a heroic set of changes that >> we were planning to do for a long time but were afraid to take on. >> >> The idea is to replace a couple of fat, overly complex, multi-functional, >> do-all classes with a set of simpler single purpose classes that can be >> combined as needed. >> >> The classes that we want to get rid of can be found in the package >> DeprecatedFileSystem, in particular FileStream, StandardFileStream, >> MultiByteFileStream, MultiByteBinaryOrTextStream and RWBinaryOrTextStream. >> >> The replacements are can be found in packages Files and >> Zinc-Character-Encoding-Core. >> >> Encoding and decoding characters to and from bytes is done using classes >> that you wrap around a more primitive binary stream. The same goes for >> buffering or translating line endings. >> >> For example, >> >> '/Users/sven/Desktop/foo.txt' asFileReference binaryReadStream. >> >> gives you a ZnBufferedWriteStream wrapping a BinaryWriteStream. >> >> While, >> >> '/Users/sven/Desktop/foo.txt' asFileReference readStream. >> >> gives a ZnCharacterReadStream wrapping a ZnBufferedWriteStream wrapping a >> BinaryWriteStream. >> >> To translate line endings, we would wrap a ZnCharacterWriteStream using a >> ZnCrPortableWriteStream. >> >> There are a couple of more specialised streams to cover special cases >> (like read and writing at the same time). >> >> SocketStream remains another fat, overly complex, multi-functional, do-all >> class, for which usable replacements exist in the form of ZdcSocketStream >> and ZdcSecureSocketStream, which are simpler, cleaner and binary only. >> >> Of course, switching is more than replacing one class with a 100% >> compatible alternative, that would give us the same complex result. The >> challenge is to use a simpler API as well, to rethink how the streams are >> used. You know, KISS. >> >> Of course, we are far from done and need more testing, debugging and help >> from as many people as possible. >> >> Sven >> >> >> -- >> Sven Van Caekenberghe >> Proudly supporting Pharo >> http://pharo.org >> http://association.pharo.org >> http://consortium.pharo.org >> >> >> >> >> >
