# New Ticket Created by  Sam S. 
# Please include the string:  [perl #124016]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=124016 >


In current Rakudo, the 'is cached' trait for routines compares incoming 
argument lists by their .gist representation. This was probably done as a 
temporary work-around, and is not a satisfactory solution because:

* .gist elides information (e.g. cutting off lists/arrays after the first few 
elements), thus causing false positives.

* .gist is explicitly meant as a summary for human consumption, and not for 
hashing/comparing objects.

IRC discussion of the problem:

 masak:  'is cached' does some "snapshotting" of the incoming maybe-reference
         value, and it's that thing that's being eqv-compared with what's in
         the cache. (though right now it's being .gist-compared, which may or
         may not be goodenuf)
 smls:   well, seeing how gist truncates lists/arrays, it seems a little unsafe
 masak:  yes, that's a *bug*
 masak:  actually, knowing that, using .gist in the first place is *wrong*,
         because the story for .gist is "string summary for human/screen
         consumption", not "exact eqv-like value for things like hashing"

IRC discussion about what a proper solution might look like:

 TimToady:  I think each immutable type should have a hash function of some
            sort, and mutable types a way to snapshot to eqv semantics
 masak:     that sounds good so far, but I think we need more than that.
 TimToady:  well, and a well-defined stragegy for combining hashes
 masak:     also, some things (like filehandles) probably don't have a good
            immutable/eqv representation.
 TimToady:  for filehandles and VAR($x) hashing the WHICH is probably as good
            as we can do
 masak:     right. that has to be an allowable fallback.

Reply via email to