[foreign-memaccess+abi] RFR: 8308293: A linker should expose the layouts it supports
Maurizio Cimadamore
mcimadamore at openjdk.org
Thu Jun 15 14:52:16 UTC 2023
On Thu, 15 Jun 2023 14:12:03 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:
>> This is another stab at https://github.com/openjdk/jdk/pull/14037
>>
>> I believe, after some offline discussion, that we have found a more satisfying solution to the problem of JAVA_CHAR being exposed. Jorn suggested that linkers should also provide mappings for JNI types such as `jint`, `jshort` and such (which are aliases for our layout constants anyway). I think that's a great way to bring `JAVA_CHAR` back into the fold.
>>
>> For now, I decided not to specify support for JNI canonical layouts (but I could do so, if that's preferred). I think the highest priority is to provide some stable mappings for C builtin types (+ `size_t`) as that's what 99% of developers will be struggling with.
>>
>> API-wise, we just expose a map. In the preovious PR there were questions as to whether the map should be split into two methods. In general I see the following options:
>>
>> 1. Just expose a map (that's the primitive, other things can derived from it)
>> 2. Expose a map, plus a method to get a canonical layout from a type name (that's the `Charset` approach, which has both `availableCharsets` *and* `forName`)
>> 3. Expose a method to get canonical layout from name, plus a method that returns the set of supported canonical layout names
>>
>> My (not so strong) preference would be for either (1) or (2).
>
> src/java.base/share/classes/jdk/internal/foreign/abi/AbstractLinker.java line 283:
>
>> 281: private static final Map<String, MemoryLayout> CANONICAL_LAYOUTS_MAP = Map.ofEntries(
>> 282: // specified canonical layouts
>> 283: Map.entry("bool", ValueLayout.JAVA_BOOLEAN),
>
> `bool` is just and alias for `_Bool`, should we define the latter as well?
>
> What about `signed`/`unsiged` variants, or `short int`, `long int`, and `long long int`? (I'm looking at this table on wikipedia: https://en.wikipedia.org/wiki/C_data_types)
My general feeling is not to have aliases. E.g. "signed int" vs "int". Or "_Bool" vs. "bool". As for "unsigned" we want to leave it to when maybe we'll have better support for those.
-------------
PR Review Comment: https://git.openjdk.org/panama-foreign/pull/839#discussion_r1231135444
More information about the panama-dev
mailing list