Since the C functions can't access anything from D code save for what is passed through as parameters, can it be called pure?

Probably not since it might not be pure and eg. mutate global variables.

Does purity do anything in terms of speed/safety here?
A pure function is expected to give the same result given the same parameters. Similar calls to a pure function (same parameters) can be optimized out by the compiler.

I noticed that in Deimos and Derelict that most(if not all) C function declarations are marked as nothrow. What are the speed/safety benefits of including this?

No speed or safety benefit, but it allows to call these C functions in functions marked nothrow themselves. As a rule of thumb you can put nothrow systematically when binding C code.

And likewise as with the pure aspect, does the compiler know how to distinguish C and D and make it inherently nothrow?

No.

C's name mangling doesn't allow function overloading, but as far as I know you can overload extern(C) functions in D. Does adding final help with speed improvements in the D side of things if added to an extern(C) function declaration?

No.

Reply via email to