In an earlier post it was noted that WriteStream does not support having its
collection instance variable being an instance of OrderedCollection; the Problem being that OrderedCollection does not support: #at:index put: object where the index is beyond the lastIndex instance variable of the orderedCollection object. I suggest that if the value of index is one beyond the value of lastIndex then the orderCollection object do an add operation and otherwise behave as before. This would fix the problem with WriteStream but I suppose this violates some principle somewhere. For me the complaint is that now you have the WriteStream instance managing the size of its collection and if its collection is an instance of OrderedCollection the collection is also managing its own size. For the record: What are the reasons that WriteStream was not designed to use OrderedCollection as the class of its (then internally instanciated and private) collection instance variable anyway? This would have made the implementation of WriteStream MUCH simpler. One could argue that this would prevent the collection being some kind of growable linked list structure. But since WriteStream already does a complete copy every time it decides the collection is too small this doesn't seem very important to me. Of course, since the user passes the initial collection to the WriteStream object, he also has access to the collection which he would then lose. But it is not clear to me why the user should have direct access to the collection at all. Of course, for PositionalStream objects, the user would still need to pass in a collection object but WriteStream could override this behavior. The biggest problem I see with modifying WriteStream to work this way is that currently the user determines the class of the object returned by the contents method of WriteStream. With this change the class of the object returned would be decided by WriteStream. If WriteStream were modified to work this way would anything in Squeak break? Of course somewhere some squeak user would get burned but since I think such users have written BAD code I am not too sympathetic. Reasons why the whole idea is just plain bad are perfectly welcome. (And who's going to stop you from pointing them out anyway.) Ralph Boland |
Ralph Boland a écrit :
> In an earlier post it was noted that WriteStream does not support having > its > collection instance variable being an instance of OrderedCollection; > the Problem being that OrderedCollection does not support: > > #at:index put: object > > where the index is beyond the lastIndex instance variable > of the orderedCollection object. > > I suggest that if the value of index is one beyond the value of > lastIndex then > the orderCollection object do an add operation and otherwise behave as > before. > > This would fix the problem with WriteStream > but I suppose this violates some principle somewhere. > > For me the complaint is that now you have the WriteStream instance > managing the size of its collection and if its collection is an instance of > OrderedCollection the collection is also managing its own size. > > For the record: > What are the reasons that WriteStream was not designed > to use OrderedCollection as the class of its > (then internally instanciated and private) collection instance variable > anyway? > This would have made the implementation of WriteStream MUCH simpler. > > One could argue that this would prevent the collection being some kind > of growable > linked list structure. But since WriteStream already does a complete > copy every > time it decides the collection is too small this doesn't seem very > important to me. > > Of course, since the user passes the initial collection to the > WriteStream object, > he also has access to the collection which he would then lose. > But it is not clear to me why the user should have direct access to the > collection at all. > Of course, for PositionalStream objects, the user would still need > to pass in a collection object but WriteStream could override this > behavior. > > The biggest problem I see with modifying WriteStream to work this way is > that currently the user determines the class of the object returned by the > contents method of WriteStream. With this change the class of the object > returned would be decided by WriteStream. > > If WriteStream were modified to work this way would anything in Squeak > break? > Of course somewhere some squeak user would get burned but since I think > such users have written BAD code I am not too sympathetic. > > Reasons why the whole idea is just plain bad are perfectly welcome. > (And who's going to stop you from pointing them out anyway.) > > > Ralph Boland > > > > > ------------------------------------------------------------------------ > > This is a possible solution. Dictionary for example grow when sent at:put: with a new key. But this is questionnable with OrderedCollection, because: - you need to allocate eventually a lot of memory - you also add a bunch of nil Matlab did and main consequence is to delay bug finding. Most code will expect an outOfBounds error. So I would say, please don't. If we want growth, we'd better use explicit messages for that, with generallity larger than just OrderedCollection. And if only for making WriteStream on: OrderedCollection new work, there are other solutions with less side effects. Only my personal feeling... Nicolas |
Free forum by Nabble | Edit this page |