conversion operators for UNO

Michael Stahl mstahl at redhat.com
Thu Apr 25 03:18:54 PDT 2013


On 25/04/13 12:08, Noel Grandin wrote:
> On 2013-04-25 11:59, Michael Stahl wrote:
>> e.g. this problem here caused a 3 % or so slowdown in ODF file load
>> and/or save (i forgot which), mainly due to 2 additional queryInterface
>> calls in a critical place:
>> https://issues.apache.org/ooo/show_bug.cgi?id=108161
>>
>> with your proposal it would be possible to write code like:
>>
>> 	Reference<B> b = ...
>> 	methodFooThatTakesA( b );
>> 	methodBarThatTakesA( b );
>> 	methodBazThatTakesA( b );
>>
>> ... and get 3 queryInterface calls instead of 1.
>>
>> or let me reformulate that: is it possible to implement your
>> hypothetical operator such that it does not call queryInterface (i don't
>> know).
>>
>>
> Yes, I agree, it does hide the cost somewhat.
> I would expect that the compilers CSE pass (common subexpression 
> elimination) would reduce that to one call.

i don't believe CSE can do anything here: when the temporary Reference
is created it will call the virtual acquire() and release() methods
which are not inline so the compiler has to assume they have arbitrary
side effects which prevents it from applying CSE.  (btw this would not
necessarily be the case for a JIT compiler)

> My desire is to make the UNO code less "noisy".
> And it matches the natural semantics of C++, which is that it's possible 
> to pass a subtype of the expected parameter's type.

hmmm... looking at the amount of boilerplate involved one gets the
impression that UNO somehow appears more natural in languages that
aren't C++ :)




More information about the LibreOffice mailing list