looking at clj-tuple a call to (nth some-tuple 0) turns in to a case
dispatch

(case idx
  0 e0
  ...)

or something.

if you have a Tuple protocol with a function like get0 you can avoid the
overhead of the case there, and the jvm has a better change of inlining
the rest away.

for hotspot to optimize the case away is much more challenging (requires
the jit to track the index value, which it may actually do?) than
optimizing a method which is basically just a java getter (very common
code pattern the jvm sees all the time).

the last time I looked in to this was before criterium was available, so
I don't have proper jvm benchmarking for it, but I do believe a Tuple
protocol with something like get0 will be faster than (nth ... 0).

the down side of the get0 approach is you cannot destructuring that way.

On 8/26/13 11:02 AM, Asim Jalis wrote:
> I believe this is what clj-tuple is doing under the hood with macros.
> 
> On Aug 26, 2013, at 10:38 AM, Kevin Downey <redc...@gmail.com> wrote:
> 
>> A Tuple protocol that defines get0 get1 get3 etc for fast element access
>> that doesn't tie you to using field names might be a good idea.
>>
>> On 8/25/13 9:35 AM, Zach Tellman wrote:
>>> I don't think so, even the existence of all the Tuple* types are an 
>>> implementation detail, and you'd need to hint it as the right one to get 
>>> sane performance.  (nth t n) has good performance, you should prefer that.
>>>
>>> On Saturday, August 24, 2013 8:15:40 PM UTC-7, Ben wrote:
>>>>
>>>> Are the element names .e0, .e1 etc. considered part of the public 
>>>> interface of tuple objects?
>>>>
>>>>
>>>> On Sat, Aug 24, 2013 at 7:38 PM, Zach Tellman 
>>>> <ztel...@gmail.com<javascript:>
>>>>> wrote:
>>>>
>>>>> I just pulled some code I wrote while trying to optimize 'memoize' into 
>>>>> its own library: https://github.com/ztellman/clj-tuple.  It only has the 
>>>>> one function, so I assume no one will need too much explanation.  
>>>>> However, 
>>>>> there may still be room for performance improvements, so if anyone wants 
>>>>> to 
>>>>> take a stab, pull requests are welcome.
>>>>>
>>>>> Zach
>>>>>
>>>>> -- 
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clo...@googlegroups.com<javascript:>
>>>>> Note that posts from new members are moderated - please be patient with 
>>>>> your first post.
>>>>> To unsubscribe from this group, send email to
>>>>> clojure+u...@googlegroups.com <javascript:>
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/clojure?hl=en
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google Groups 
>>>>> "Clojure" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>>> email to clojure+u...@googlegroups.com <javascript:>.
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>>
>>>>
>>>> -- 
>>>> Ben Wolfson
>>>> "Human kind has used its intelligence to vary the flavour of drinks, which 
>>>> may be sweet, aromatic, fermented or spirit-based. ... Family and social 
>>>> life also offer numerous other occasions to consume drinks for pleasure." 
>>>> [Larousse, "Drink" entry]
>>
>>
>> -- 
>> And what is good, Phaedrus,
>> And what is not good—
>> Need we ask anyone to tell us these things?
>>
> 


-- 
And what is good, Phaedrus,
And what is not good—
Need we ask anyone to tell us these things?

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to