Thread overview
Overhead when using a C library
Mar 14, 2013
Jeremy DeHaan
Mar 14, 2013
Timon Gehr
Mar 14, 2013
Artur Skawina
Mar 14, 2013
John Colvin
Mar 14, 2013
Andrea Fontana
March 14, 2013
Hey guys!

I am working on a binding for D, and am almost finished! I started to think of some things I might like to work on to improve the binding after I get everything working, and one of the things I thought of was rewriting certain parts to use only D code instead of making calls to the C functions. Is there any kind of performance overhead in using C libraries to interact with your D program? If it isn't going to offer much performance gain then I probably don't need to bother writing extra code.

Thanks as usual!
March 14, 2013
On 03/14/2013 01:48 AM, Jeremy DeHaan wrote:
> Hey guys!
>
> I am working on a binding for D, and am almost finished! I started to
> think of some things I might like to work on to improve the binding
> after I get everything working, and one of the things I thought of was
> rewriting certain parts to use only D code instead of making calls to
> the C functions. Is there any kind of performance overhead in using C
> libraries to interact with your D program? If it isn't going to offer
> much performance gain then I probably don't need to bother writing extra
> code.
>
> Thanks as usual!

There is no additional overhead (though the D compiler will not be able to inline C functions, whereas an identical D function may be inlined.)
March 14, 2013
On Thursday, 14 March 2013 at 00:48:53 UTC, Jeremy DeHaan wrote:
> Hey guys!
>
> I am working on a binding for D, and am almost finished!

Are you going to publish this binding? Which library?
March 14, 2013
On 03/14/13 01:52, Timon Gehr wrote:
> On 03/14/2013 01:48 AM, Jeremy DeHaan wrote:
>>
>> I am working on a binding for D, and am almost finished! I started to think of some things I might like to work on to improve the binding after I get everything working, and one of the things I thought of was rewriting certain parts to use only D code instead of making calls to the C functions. Is there any kind of performance overhead in using C libraries to interact with your D program? If it isn't going to offer much performance gain then I probably don't need to bother writing extra code.
> 
> There is no additional overhead (though the D compiler will not be able to inline C functions, whereas an identical D function may be inlined.)

Like Timon said - there's is zero overhead.
Even the inlining limitation only applies to /some/ compilers. [1]


xlanginline1.d:
   extern extern(C) int c();
   int main() { return 2*c(); }

xlanginline2.c:
   int c() { return 21; };

compiled with GDC + -flto:

08049820 <_Dmain>:
 8049820:       55                      push   %ebp
 8049821:       b8 2a 00 00 00          mov    $0x2a,%eax
 8049826:       89 e5                   mov    %esp,%ebp
 8049828:       5d                      pop    %ebp
 8049829:       c3                      ret

artur

[1] and versions, unfortunately.
March 14, 2013
On Thursday, 14 March 2013 at 00:52:41 UTC, Timon Gehr wrote:
> On 03/14/2013 01:48 AM, Jeremy DeHaan wrote:
>> Hey guys!
>>
>> I am working on a binding for D, and am almost finished! I started to
>> think of some things I might like to work on to improve the binding
>> after I get everything working, and one of the things I thought of was
>> rewriting certain parts to use only D code instead of making calls to
>> the C functions. Is there any kind of performance overhead in using C
>> libraries to interact with your D program? If it isn't going to offer
>> much performance gain then I probably don't need to bother writing extra
>> code.
>>
>> Thanks as usual!
>
> There is no additional overhead (though the D compiler will not be able to inline C functions, whereas an identical D function may be inlined.)

A decent link-time optimiser will be able to do the inlining where appropriate. gdc can be compiled with lto enabled, as Artur shows in his reply.