Before it's too late: delegate calling convention

Burton Radons burton-radons at smocky.com
Wed Nov 1 15:14:45 PST 2006


Gregor Richards wrote:
> It's also DMD-with-D-calling-convention-specific X_X
> 
> (eg: won't work with GDC, won't work with C functions)

It could easily be done, just have the thunks bounce into a function the 
Thunk template builds that reorder the arguments (this function can 
gratefully be written in D), and add a post-call patch to fix the stack.

I'm not trying to argue that this is the way it should be, obviously the 
compiler should be handling this magic. But while I've never heard 
Walter say anything about thunking, I can predict with great accuracy 
that he'll be against it because it's a hidden allocation [of great 
utility]. It seems like it would be better to have SOMETHING to do the 
task than to keep crashing against the barricade and getting more and 
more frustrated.

Anyway, thunking D to C would generally be pretty hazardous because as 
soon as you pass it to the C library it'll be collectable, and since the 
allocation IS hidden it would be easy to miss. Manually thunking C 
function pointers isn't difficult with any correctly-written C library 
and doesn't happen often enough in my experience (once per wrapper, to 
be exact) to bother with.

What happens more often is the need to cast from function pointers to 
delegates (or SOME common function pointer), constrained to the D 
calling convention. Since that can be done without allocations, I think 
that and only that should be made part of the language. The rest can 
follow with time, or not.



More information about the Digitalmars-d mailing list