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 <marianopeck@gmail.com
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 < nicolas.cellier.aka.nice@gmail.com> 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 <marianopeck@gmail.com>:
On Wed, Aug 3, 2011 at 1:01 PM, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> 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 <marianopeck@gmail.com>:
btw...how can I change OrderedCollection>>grow without shooting my foots?
On Wed, Aug 3, 2011 at 12:51 PM, Mariano Martinez Peck <marianopeck@gmail.com> wrote:
On Wed, Aug 3, 2011 at 12:42 PM, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> 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 <marianopeck@gmail.com>:
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