My own Smalltalk library (and yes, I've tried to put it on github, I don't know what I'm doing wrong) includes Deque and BoundedDeque, both descendants of Collection. Using addLast/removeLast gives you a stack (use #last for peeking) Using addLast/removeFirst gives you a queue. (use #first for peeking)
(1) I am puzzled why there are separate FIFO and LIFO classes rather than a single BoundedDeque. -- This has implications for performance. (2) I am puzzled why #withCapacity: is used rather than #new:, familiar from OrderedCollection. -- These two points together make it hard to just swap OrderedCollection and ?IFOBuffer. (3) I am puzzled why #clear is used instead of the familiar #removeAll. -- See note on question 2. (4) I am extremely puzzled why ALL, like ALL, of the internals of the data structure are exposed. Did encapsulation fall out of favour and I didn't get the memo? (5) It looks as though calling #capacity: at the wrong time can destroy the integrity of one of these containers, but there is nothing sayiing "don't do that". (6) I am puzzled that they are not Collections. (7) I am puzzled why trying to access an element in an empty buffer does not signal a CollectionIsEmpty exception -- Is this related to (6)? The structure, with two separate classes and key performance-essential methods being template methods, hurts performance by about a factor of two in my tests. Now Pharo has a design MOOC and if Stephane Ducasse says "this is great", these things that puzzle me must be good design. I would like to improve my skills, so *why* is this good design? (As it happens, I *have* had occasion to 'push' from both ends of a single Deque.) None of this is meant as criticism of the generosity or competence of the authors. It expresses genuine puzzlement. Like when I implemented deques I could not imagine not making them Collections. Principle of Least Surprise and all that. Maybe I should be thinking differently. On Fri, 27 Jun 2025 at 20:10, stephane ducasse via Pharo-users <pharo-users@lists.pharo.org> wrote: > > Thanks this is great! > > On 18 Jun 2025, at 12:13, Alok via Pharo-users <pharo-users@lists.pharo.org> > wrote: > > Hello Everyone, > We're excited to share a new addition to the pharo-containers. An efficient > Circular Buffer implementation, developed as part of Google Summer of Code > 2025 project under the mentorship of Gordana Rakic and Sebastian Jordan > Montaño. > > This package provides fixed-size buffers supporting both FIFO (queue-style) > and LIFO (stack-style) behavior. It’s designed for use cases such as > streaming data, undo/redo functionality, chat or browser history & more. > > You can find the repo here: Containers-Buffer > The README includes usage examples, installation steps etc. > > Feedback, suggestions, and contributions are very welcome ! > ThankYou ! > Alok Pathak > GSoC'25 Contributor > > > Stéphane Ducasse > http://stephane.ducasse.free.fr > 06 30 93 66 73 > > "If you knew today was your last day on earth, what would you do differently? > ....ESPECIALLY if, by doing something different, today might not be your last > day on earth.” Calvin & Hobbes > > > > >