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