Ok, I have splitted the slice in two parts: PART1 and PART2. PART1
includes the fixes in #makeRoomAtFirst and #makeRoomAtLast and a new
class WeakOrderedCollectionTest  with two tests:
#testWeakOrderedCollectionSomeGarbageCollected and
#testWeakOrderedCollectionAllGarbageCollected.

Those tests can be improved a lot and make them look like those in
WeakSetTest where each collection operation is tested. I don't have
the time/knowledge to do that right now, but if someone can,
excellent.

The second part is just the revome of OrderedCollection >> grow.


Name: 
SLICE-Issue-4596-WeakOrderedColllection-array-is-replaced-by-an-Array-instead-of-a-WeakArray-PART1-MarianoMartinezPeck.1
Author: MarianoMartinezPeck
Time: 3 August 2011, 2:40:10 pm
UUID: 35f20200-98ef-581f-1100-000044ef581f
Ancestors:
Dependencies: CollectionsTests-MarianoMartinezPeck.529,
Collections-Sequenceable-MarianoMartinezPeck.97

This is the first part. It includes the fix and 2 tests.




Name: 
SLICE-Issue-4596-WeakOrderedColllection-array-is-replaced-by-an-Array-instead-of-a-WeakArray-PART2-MarianoMartinezPeck.1
Author: MarianoMartinezPeck
Time: 3 August 2011, 2:41:42 pm
UUID: caf00200-1007-401f-18ec-0e0008e05c1f
Ancestors:
Dependencies: Collections-Sequenceable-MarianoMartinezPeck.98

It just removes OrderedCollection >> grow



On Wed, Aug 3, 2011 at 2:11 PM, Mariano Martinez Peck <[email protected]
> wrote:

> Thanks a lot Nicolas and Henrik.  I have split the slice and it works!
> I will upload soon both slides, part1 and part2 and a test for it.
>
> On Wed, Aug 3, 2011 at 1:49 PM, Nicolas Cellier <
> [email protected]> wrote:
>
>> Oh I see, for the SLICE, this is again the Pharo's version of
>> MCPackageLoader>>basicLoad which is striking.
>> In Squeak trunk it would work because removals are performed AFTER
>> methodAdditions/Changes.
>> In Pharo, removals are performed BEFORE, so yes, the SLICE needs to be
>> split in two parts...
>> Or you can just manually merge it (apply the removal after...).
>>
>> I'm eager to see a true atomic load with a single massive becomeForward:
>> :)
>> IMHO, this should be coupled with lazy initializations mechanism as I
>> proposed once (based on pragmas).
>>
>> Now if you simply modify grow from within a browser, I see no obvious
>> reason why it would fail...
>>
>> Nicolas
>>
>> 2011/8/3 Mariano Martinez Peck <[email protected]>:
>> >
>> >
>> > On Wed, Aug 3, 2011 at 1:01 PM, Nicolas Cellier
>> > <[email protected]> wrote:
>> >>
>> >> You replace Array with self arrayType, that's all.
>> >
>> > Here my images freezes and CPU goes 100%. I guess because
>> compiling/saving a
>> > method uses OrderedCollection grow at the same time.
>> >
>> >>
>> >> But there is better, Pharo already has growAtFirst and growAtLast
>> >> which are correct.
>> >> Use them instead of grow.
>> >> See SLICE in inbox.
>> >
>> > I cannot load it since it freezes in "Cleaning Up". It can be the same
>> > reason as why I cannot save the modification.
>> > I am in Pharo1.3
>> > Latest update: #13277
>> >
>> > Thanks a lot for the help!
>> >
>> >>
>> >> Nicolas
>> >>
>> >> 2011/8/3 Mariano Martinez Peck <[email protected]>:
>> >> > btw...how can I change OrderedCollection>>grow
>> >> > without shooting my foots?
>> >> >
>> >> > On Wed, Aug 3, 2011 at 12:51 PM, Mariano Martinez Peck
>> >> > <[email protected]> wrote:
>> >> >>
>> >> >>
>> >> >> On Wed, Aug 3, 2011 at 12:42 PM, Nicolas Cellier
>> >> >> <[email protected]> wrote:
>> >> >>>
>> >> >>> I'm pretty sure the array inst var of your WeakOrderedColleciton is
>> no
>> >> >>> more a WeakArray but a simple Array.
>> >> >>
>> >> >> Yes, indeed, it is a normal Array and that cought my attention. But
>> >> >> since
>> >> >> I have no idea about Weak stuff...I also noticed that
>> >> >> WeakOrderedCollection
>> >> >> is declared as:
>> >> >>
>> >> >> OrderedCollection subclass: #WeakOrderedCollection
>> >> >>     instanceVariableNames: ''
>> >> >>     classVariableNames: ''
>> >> >>     poolDictionaries: ''
>> >> >>     category: 'Collections-Weak'
>> >> >>
>> >> >> instead of using the #weakSubclass: ... message:
>> >> >>
>> >> >> OrderedCollection weakSubclass: #WeakOrderedCollection
>> >> >>     instanceVariableNames: ''
>> >> >>     classVariableNames: ''
>> >> >>     poolDictionaries: ''
>> >> >>     category: 'Collections-Weak'
>> >> >>
>> >> >>
>> >> >>>
>> >> >>> This is because Pharo's WeakOrderedCollection is broken...
>> >> >>>
>> >> >>
>> >> >> Do you know a weak collection that is not broken in Pharo and let me
>> do
>> >> >> a
>> >> >> addLast: ?
>> >> >>
>> >> >>>
>> >> >>> Every reference to Array from within OrderedCollection should be
>> >> >>> replaced with message send (self arrayType).
>> >> >>> See for example, OrderedCollection>>#grow
>> >> >>>
>> >> >>
>> >> >> Thanks. I will check how many there are and try to fix them.
>> >> >>
>> >> >>>
>> >> >>> Nicolas
>> >> >>>
>> >> >>> 2011/8/3 Mariano Martinez Peck <[email protected]>:
>> >> >>> > Hi guys. I am since yesterday trying to find something and I
>> cannot.
>> >> >>> > So
>> >> >>> > at
>> >> >>> > this point I need external eyes :)
>> >> >>> > I have this little code:
>> >> >>> >
>> >> >>> >     anObject := ClassWith2Var new.
>> >> >>> >     sharedObject := ClassWith1Var new.
>> >> >>> >     sharedObject var1: 'nose'.
>> >> >>> >     anObject var1: Date today.
>> >> >>> >     anObject var2: sharedObject.
>> >> >>> >
>> >> >>> >     serializedObjects := FuelMareaSerializer new
>> >> >>> > serializeAndWriteObject:
>> >> >>> > anObject to: 'aFileName'.
>> >> >>> >     anObject := nil.
>> >> >>> >     sharedObject := nil.
>> >> >>> >
>> >> >>> >     3 timesRepeat: [Smalltalk garbageCollect].
>> >> >>> >     serializedObjects inspect.
>> >> >>> >
>> >> >>> >
>> >> >>> >
>> >> >>> > What is important here is that FuelMareaSerializer new
>> >> >>> > serializeAndWriteObject: anObject to: 'aFileName' answers a
>> >> >>> > WeakOrderedCollection with each object of the serialized graph
>> >> >>> > (taking
>> >> >>> > anObject as the root)
>> >> >>> > Now, if I print the tempVar serializedObjects I see:
>> >> >>> >
>> >> >>> > a WeakOrderedCollection(ClassWith1Var ClassWith2Var Date
>> DateAndTime
>> >> >>> > Duration a ClassWith1Var a ClassWith2Var 3 August 2011
>> >> >>> > 2011-08-03T00:00:00+02:00 0:02:00:00 1:00:00:00 86400 2455777
>> 'nose'
>> >> >>> > 0
>> >> >>> > 7200)
>> >> >>> >
>> >> >>> > WHYYYY??  why are all there if I put a nil to both, anObject and
>> >> >>> > sharedObejct. This WeakOrderedCollection should be with all nils
>> >> >>> > (except
>> >> >>> > classes). Why are not being garbage collected?
>> >> >>> >
>> >> >>> > If I explore, for example the tempVar sharedObejct, which is at
>> >> >>> > serializedObjects at: 6   and then I put explore pointers I ONLY
>> see
>> >> >>> > the
>> >> >>> > array of the WeakOrderedCollection pointing to it. I don't
>> >> >>> > understand.
>> >> >>> >
>> >> >>> > Any help is really appreaciated.
>> >> >>> >
>> >> >>> > --
>> >> >>> > Mariano
>> >> >>> > http://marianopeck.wordpress.com
>> >> >>> >
>> >> >>> >
>> >> >>>
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Mariano
>> >> >> http://marianopeck.wordpress.com
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Mariano
>> >> > http://marianopeck.wordpress.com
>> >> >
>> >> >
>> >>
>> >
>> >
>> >
>> > --
>> > Mariano
>> > http://marianopeck.wordpress.com
>> >
>> >
>>
>>
>
>
> --
> Mariano
> http://marianopeck.wordpress.com
>
>


-- 
Mariano
http://marianopeck.wordpress.com

Reply via email to