wide function pointer type
Florian Weimer
fweimer@redhat.com
Wed Oct 20 09:10:00 GMT 2021
* Martin Uecker:
> One (of several) use cases is for language interoperability.
>
> A common problem is to pass a function of a high-level
> language as a callback to an C API. This now often
> requires special boiler plate code for each case and
> there is no automatic way to do this. The fundamental
> problem is that the C type can not express that a data
> pointer belongs to a function pointer.
>
> void foo(
> void (cb1)(void* data, int a), void* data1,
> void* other_data);
>
> Here a human (and maybe also a machine) could guess
> that data1 belongs to cb1 but not other_data. But
> it is not clear and in more complicated cases
> even less so.
>
> void foo(void (_Wide cb1)(int a), void* other_data);
>
>
> With the new type that would be unambiguous (and
> wrappers could then often be created automatically).
> At least for the C API one would also expect ABI
> stability.
I don't expect a lot of uptake for this. One problem is the suggested
aggregate representation of wide function pointers. It's not exactly
common for non-C implementations to implement those aspects of the
platform C ABI. For many targets, even C and C++ compilers do not
always agree completely on the finer points. Passing code and data
pointer in separate arguments is much more robust, and safely within the
interoperable ABI subset.
Perhaps a set of standard attributes to describe the explicit closure
argument would be useful, though.
Thanks,
Florian
More information about the Libffi-discuss
mailing list