[Vm-dev] Re: [Pharo-project] About linkedlist

Eliot Miranda eliot.miranda at gmail.com
Fri Feb 3 18:04:48 UTC 2012


On Fri, Feb 3, 2012 at 6:18 AM, Lukas Renggli <renggli at gmail.com> wrote:

> >>>> what is the diff between arrayList and vectorList ?
> >>>
> >>> ArrayList is double ended (very much like OrderedCollection),
> >>> VectorList is single ended. I was just experimenting to see if it
> >>> makes a difference.
> >
> > ok. I like to see such kind of experiment.
> > Was the name based on something that people use?
>
> No, it is a randomly chosen and meaningless name. I guess in the end
> there will only be one named ArrayList, but I am not sure which
> implementation is better.
>
> Just a note to the VM developers: The primitive
> Array>>#replaceFrom:to:with:startingAt: is absolutely central to the
> implementation of efficient collections. While it works well if you
> copy from one array to the other, it is broken if source and
> destination array are the same and the areas overlap. Would it be
> possible to fix this. Even "memmove(void*, void*, size_t)" in C can
> handle this situation correctly.
>

The problems are that the primitive is defined to be destructive, and code
could be depending on the destructive update behaviour.  Would it be
feasible to use a new primitive that did the right thing in the case of
overlap, or do you definitely want to change primitive 105?


> >>>> Do you have some kind of high level description of Container
> explaining the rationale, ideas and approach.
> >>>
> >>> The core idea is to split iteration from containment; I think a
> >>> horrible design mistake in the Smalltalk-80 collections.
> >
> > I thought about that when I read the Iterator.
> > I would not say that this is horrible. I think that for default case
> this is not that bad.
> > Now when you want to navigate a large graph and control the navigation
> then you should have an iterator.
>
> I think it is pretty horrible. I can think of at least 4 meaningful
> ways to iterate over an simple array (for other collections there are
> even more ways):
>
>    1. forward: #do:, #collect:, #select:, #detect:, #inject:into:, ...
>    2. forward with index: #keysAndValuesDo:, #collectWithIndex:,
> everything else is not possible
>    3. backward: #reverseDo:, everything else is not possible
>    4. backward with index: not possible
>
> If you split the iterator into a separate object, suddenly all of this
> becomes trivial. A #collect: remains a #collect: no matter if you are
> going forward or backward, or with or without index.
>
> Lukas
>
> --
> Lukas Renggli
> www.lukas-renggli.ch
>
>


-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20120203/d59ccbc9/attachment.htm


More information about the Vm-dev mailing list