Jeffrey,

Your interpretation is that the original poster wanted to read or write 
dictionary entries that had already been found via previous hashing and 
searching without again hashing the key (presumably in order to attain 
higher performance).  That was also my guess.  I am interested in this 
issue because Julia currently has a mechanism to refer to a specific object 
inside a container: the Ref{T} type.  My understanding is that this type 
was mainly created in order to build safer Julia/C interfaces, but one 
could imagine using it more generally.  Unfortunately (last time I checked) 
there is a performance problem with Ref{T}: these objects are 
heap-allocated and so shouldn't be created in inner loops.  In addition, as 
far as I know, the implementation has not yet been extended to elements of 
Dict{K,V}.  The sorted containers in DataStructures.jl have a 
token/semitoken type associated with them for the purpose of 
high-performance access and iteration, but the approach taken in 
DataStructures.jl does not generalize to other Julia containers such as the 
standard Dict{K,V}.

The C++ standard containers all have 'iterators' for this purpose.  Maybe 
some thought could be given to extending the Ref{T} framework to 
across-the-board high-performance references to objects inside containers 
in some future version of Julia.

-- Steve

On Monday, January 18, 2016 at 1:22:09 PM UTC-5, Jeffrey Sarnoff wrote:
>
> Steve, 
> afaik, depending upon the hash implementation, the only advantage might be 
> moderately faster lookup but the cost in generality often would outweigh 
> that.
>
> On Thursday, January 14, 2016 at 10:44:01 PM UTC-5, vav...@uwaterloo.ca 
> wrote:
>>
>> Could I ask what would be an application of this capability (if it were 
>> possible)?  -- Steve Vavasis
>>
>> On Wednesday, January 13, 2016 at 3:59:57 PM UTC-5, Ritchie Lee wrote:
>>>
>>> As I understand it, Julia dicts use Base.hash when storing custom types 
>>> as keys.  Is there a way to look up based on the hash alone?
>>>
>>> e.g.,
>>>
>>> type MyType
>>> a::Int
>>> end
>>>
>>> Base.hash(x::MyType) = hash(x.a, hash(MyType))
>>>
>>> x = MyType(1)
>>> D = Dict{MyType, Bool}()
>>> D[x] = true
>>>
>>> Now, is there a way to lookup using h only? 
>>>
>>> h = hash(x)
>>> D[h]
>>>
>>> Is this be safe to do?
>>>
>>> Thanks!
>>>
>>

Reply via email to