[foreign-memaccess] RFR 8228444: Add common value layout constants

Jorn Vernee jbvernee at xs4all.nl
Fri Jul 19 17:52:22 UTC 2019


On 2019-07-19 19:37, Maurizio Cimadamore wrote:
> On 19/07/2019 18:22, Jorn Vernee wrote:
>> I'm not sure I love the names either... 'BYTE_X_BE' seems to 
>> reminiscent of a Java (or C) byte. How about `V8_BE`, `V16_LE`, etc... 
>> ('V' standing for 'Value')?
> 
> I agree that BYTE is problematic here - I originally came up with
> 
> OCTET
> HWORD
> WORD
> DWORD
> 
> but wasn't sure of that either.

Well, DWORD is also a Windows API type which is 32 bits, a WORD is 16. 
HWORD here stands for 'half word' I guess, so 8? And then OCTET is 64?

Not super clear, since a 'word' can also have a machine specific 
meaning.

> Another option is to go "bitty":
> 
> BITS_8
> BITS_16
> BITS_32
> BITS_64
> 
> Which looks more agnostic.

This would work imho.

Any ways, I'm thinking that probably, in all but the ad-hoc use cases, a 
user will declare a static final ValueLayout with a name that makes more 
sense for that specific use case.

>> 
>> About the JAVA_XXX constant; maybe it's good to put these in a nested 
>> class as well, that way users can use a static import to import just 
>> the Java constants, they will be grouped together, and after all 
>> `JAVA_BYTE` is almost the same as `Java.BYTE`. (what do you think?)
> We could go there - don't feel too strongly either way - but I don't
> like too much nesting.

Yeah, it's a bike shed comment on my part. In the end it probably 
doesn't really matter.

Jorn

>> 
>> Also, it seems that TestMemoryAccess could use the Java constants 
>> instead of calling the factories, what gives?
> 
> Yeah - I will/can consolidate after I remove also the factories (see
> other patch)
> 
> Maurizio
> 
>> 
>> Jorn
>> 
>> On 2019-07-19 18:49, Maurizio Cimadamore wrote:
>>> Hi,
>>> this is a first stab at implementing a set of layout constants along
>>> the guidelines described in [1].
>>> 
>>> http://cr.openjdk.java.net/~mcimadamore/panama/8228444/
>>> 
>>> More specifically, the Layouts class introduces layouts constants to
>>> be used for language agnostic serialization, with explicit 
>>> endianness:
>>> 
>>> BYTE_LE, BYTE_BE, BYTE_2_LE, BYTE_2_BE, ...
>>> 
>>> And some Java-friendly constants whose endianness defaults to BE 
>>> (same
>>> as ByteBuffer):
>>> 
>>> JAVA_BYTE, JAVA_SHORT, ...
>>> 
>>> In the future, we will create nested interfaces here, one per
>>> supported ABI, with ABI-specific layout constants - e.g.
>>> 
>>> SysVABI.C_INT, SysVABI.C_LONG_DOUBLE, ...
>>> 
>>> This patch also removes endianness implicit constructors from
>>> ValueLayout - now endianness is always explicit (but if you use
>>> constants, you can ignore it, up to a point).
>>> 
>>> Overall this seems like the right mix of decisions - different
>>> constants, different users, different requirements. Not sure I 
>>> totally
>>> love the names, the challenge here is to find something that is
>>> relative semantics-neutral (since we plan to 'free' layouts from
>>> semantics considerations such as signed/unsigned int/float).
>>> 
>>> 
>>> [1] - 
>>> https://mail.openjdk.java.net/pipermail/panama-dev/2019-July/006001.html


More information about the panama-dev mailing list