[Cuis-dev] Inconsistent #= and #hash
hernan.wilkinson at 10pines.com
Wed Jun 12 04:28:16 PDT 2019
> BTW, I found the StackSizeWatcher in ProcessBrowser (by Hernán Wilkinson)
> extremely useful for dealing with the bugs this snippet made visible.
> Many collections can hold any kind of object. Those should not fail when
> evaluating `aCollection includes: anObject`, for any object. Others are
> specific for some kind of content, like String, ByteArray, FloatArray, etc.
> It is ok for those to raise an error when evaluating `aCollection includes:
> anObject`, if trying to add that anObject would also fail. I see no problem
> there. Still, I wouldn't object if people prefer to just make #includes:
> answer false in those cases.
I think that #includes: should not raise any exception, the same as #=, it
should always return true or false.
> On Tue, Jun 11, 2019 at 5:25 PM Juan Vuletich <juan at jvuletich.org> wrote:
>> On 6/11/2019 8:49 AM, Luciano Notarfrancesco via Cuis-dev wrote:
>> > I did this to fish for inconsistencies:
>> > instances _ OrderedCollection new.
>> > Object withAllSubclassesDo: [:each| instances addAll: each
>> > instances _ instances asArray.
>> > 1 to: instances size do: [:i|
>> > a _ instances at: i.
>> > aHash _ a hash.
>> > i+1 to: instances size do: [:j|
>> > b _ instances at: j.
>> > (a = b and: [(aHash = b hash and: [b = a]) not]) ifTrue: [self
>> > halt]]]
>> > (I typed it manually here, I hope I copied it right, but you get the
>> > idea.)
>> > Found out this:
>> > - FeatureRequest forgets to implement hash;
>> > - #() = Semaphore new, but not the other way around, and hashes also
>> > differ;
>> > - similarly, LinkedList new = Semaphore new;
>> > - RunArray new = Object new fails because it assumes the argument is a
>> > Collection and sends isSequenceable;
>> > - RunArray new = Text new, but hashes differ;
>> > - Set new = Dictionary new but hashes differ;
>> > And there are more, I stopped before finishing.
>> > I don't know how to fix some of those, and the implications of
>> > changing the behavior of #= or #hash are not obvious in some cases.
>> > But I think we should change Collection>>hash to set the initial value
>> > to 0 instead of 'self species hash', and that would fix two of the
>> > issues above. What do you think? Other ideas?
>> I just pushed fixes to most of them. For Semaphore and RunArray it is a
>> matter of implementing and honoring #species. For Set, it was making
>> aDictionary is: #Set to answer false. For the others it was adding a new
>> #hash or #= methods. I don't expect much breakeage.
>> I'll run now a tweaked (hopefully faster) version of your script.
>> Juan Vuletich
> Juan Vuletichwww.cuis-smalltalk.orghttps://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Devhttps://github.com/jvuletichhttps://www.linkedin.com/in/juan-vuletich-75611b3
> Cuis-dev mailing list
> Cuis-dev at lists.cuis.st
*Hernán WilkinsonAgile Software Development, Teaching & Coaching*
*site: http://www.10Pines.com <http://www.10pines.com/>*
Address: Alem 896, Floor 6, Buenos Aires, Argentina
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Cuis-dev