In light of the recent discussion regarding nil keys in Dictionaries, I have removed the anti-fixes related to this (including the #associationsDo: override in WeakKeyIdentityDictionary) from their "System overrides for ma object serialization" package of Magma.
Magma is back to 100% pure*, making no system changes that have not been approved for at least 3.9.
[*] I left the 3.9-approved fixes in, however, for <= 3.8 users.
I have also removed all use of Ma*Dictionary's. They were written to fix the performance bug with #removeKey: for which they are 1000x (or more) faster than their standard counterparts but are a bit slower for other operations. Magma now avoids removeKey: altogether, so going back to the standard Dictionary's you should enjoy a minor performance improvement.
A few more improvements too:
- More robust network error handling for when other end drops unexpectedly. - Tests now only open transcript in conductor image. Besides being faster, Squeak was locking up loading a font or something, no time to debug it. - Fixed possible error when opening partially-written commitPackages file.
Let me know if any questions or issues.
- Chris
Chris
we are planning to remove your fixes from 3.9a. So let us know your position.
Stef
On 21 sept. 05, at 23:47, Chris Muller wrote:
In light of the recent discussion regarding nil keys in Dictionaries, I have removed the anti-fixes related to this (including the #associationsDo: override in WeakKeyIdentityDictionary) from their "System overrides for ma object serialization" package of Magma.
Magma is back to 100% pure*, making no system changes that have not been approved for at least 3.9.
[*] I left the 3.9-approved fixes in, however, for <= 3.8 users.
I have also removed all use of Ma*Dictionary's. They were written to fix the performance bug with #removeKey: for which they are 1000x (or more) faster than their standard counterparts but are a bit slower for other operations. Magma now avoids removeKey: altogether, so going back to the standard Dictionary's you should enjoy a minor performance improvement.
A few more improvements too:
- More robust network error handling for when other end drops
unexpectedly.
- Tests now only open transcript in conductor image. Besides being
faster, Squeak was locking up loading a font or something, no time to debug it.
- Fixed possible error when opening partially-written
commitPackages file.
Let me know if any questions or issues.
- Chris
I hope you mean only the Dictionary>>at:put: and WeakKeyDictionary>>associationsDo: fixes, correct?
I'm puzzled how these made it into 3.9 in the first place. I don't recall ever submitting them to Mantis, but since they accidently found their way into 3.9 it finally forced the discussion I had wanted to have about them 15 months ago.
The community concensus seems to indicate neither are bugs, so I have adjusted my programs to live with or without them. Magma is good to go either way.
Thanks Stéphane..
--- stéphane ducasse ducasse@iam.unibe.ch wrote:
Chris
we are planning to remove your fixes from 3.9a. So let us know your position.
Stef
On 21 sept. 05, at 23:47, Chris Muller wrote:
In light of the recent discussion regarding nil keys in Dictionaries, I have removed the anti-fixes related to this (including the #associationsDo: override in WeakKeyIdentityDictionary) from their "System overrides for ma object serialization" package of Magma.
Magma is back to 100% pure*, making no system changes that have not been approved for at least 3.9.
[*] I left the 3.9-approved fixes in, however, for <= 3.8 users.
I have also removed all use of Ma*Dictionary's. They were written to fix the performance bug with #removeKey: for which they are 1000x (or more) faster than their standard counterparts but are a bit slower for other operations. Magma now avoids removeKey: altogether, so going back to the standard Dictionary's you should enjoy a minor performance improvement.
A few more improvements too:
- More robust network error handling for when other end drops
unexpectedly.
- Tests now only open transcript in conductor image. Besides being
faster, Squeak was locking up loading a font or something, no time to debug it.
- Fixed possible error when opening partially-written
commitPackages file.
Let me know if any questions or issues.
- Chris
Hi Chris,
Congrats on your release!
Chris Muller wrote:
Magma is back to 100% pure*, making no system changes that have not been approved for at least 3.9.
[*] I left the 3.9-approved fixes in, however, for <= 3.8 users.
IIUC, what this means is that if we change those methods again, and then a user of such an image loads Magma, the further fixes will be reverted. The ensuing mess causes unbounded amounts of pain to the users and developers of all the packages you're overriding.
Overrides are evil, please don't use them.
If the intent is to provide a 3.8 usable version, that is better served by keeping them only in a fork intended for use in 3.8 (there is no problem with overrides there, since the version will be very very stable).
Daniel
Magma is back to 100% pure*, making no system changes that have not been approved for at least 3.9.
[*] I left the 3.9-approved fixes in, however, for <= 3.8 users.
IIUC, what this means is that if we change those methods again, and then a user of such an image loads Magma, the further fixes will be reverted. The ensuing mess causes unbounded amounts of pain to the users and developers of all the packages you're overriding.
No, I've completely removed the overridden methods from the overrides package ("System overrides for ma object serialization"), therefore nothing is overridden anymore on any Dictionary. You can change those methods all you want and loading Magma will have no effect on them.
Overrides are evil, please don't use them.
I generally agree, but Squeak bugs are evil too, so what to do when you find a Squeak bug, have submitted it to Mantis and awaiting its harvestation? Up 'til now, I have been isolating the fixes in a separate package explicitly named "Overrides for blah" to give it high-visibility and easy unloading, which Monticello supports.
If the intent is to provide a 3.8 usable version, that is better served by keeping them only in a fork intended for use in 3.8 (there is no problem with overrides there, since the version will be very very stable).
Ah, I see your point here. You are talking about the *other* fix in the overrides package besides this Dictionary one.
Probably what I will do is create a "Magma 3.8 compatibility" package that must be loaded separately until the fix is harvested into a maintenance release of 3.8.
Magma doesn't officially support 3.9 yet anyway, but when it does, I will do this.
Thanks, Chris
squeak-dev@lists.squeakfoundation.org