[Rd] readBin() arg check has unnecessary overhead (patch included)
Martin Maechler
maechler at stat.math.ethz.ch
Wed Aug 12 16:05:46 CEST 2009
>>>>> "JC" == Jon Clayden <jon.clayden at gmail.com>
>>>>> on Wed, 12 Aug 2009 14:57:10 +0100 writes:
>> > Dear all,
>> > The version of readBin() in R-devel includes a use of match(), through
>> > `%in%`, which can affect its performance significantly. By using
>> > primitives instead of the rather expensive call to match(), I reduce
>> > the time spent inside readBin() by more than 30% in some of my code
>> > (part of the tractor.base package). A simple patch that does this is
>> > given below. This passes "make check-devel" fine, and I don't see that
>> > it could produce unexpected behaviour -- though I may, of course, be
>> > wrong.
>>
>> actually, %in% is liked by programmeRs for its inherent
>> robustness combined with "expressiveness" (<-> readability)
>> inspite of its potential efficiency loss wrt to '=='
JC> Oh, absolutely. I like it and use it widely. But my feeling was that
JC> in core code, a small loss in expressiveness for a significant
JC> performance improvement is a trade worth making.
Yes, I agree, and hence the following ...
>> and indeed, your patch fails in one case where the original code works:
>>
>> readBin(., NA_character_, ...)
>>
>> However that case can also be checked explicitly,
>> and I will implement the corresponding patch.
now in R-devel, revision 49187.
JC> Many thanks.
JC> Regards,
JC> Jon
Thank *you* ! {I forgot to say the first time ..}
Martin
More information about the R-devel
mailing list