Foreign memory access with classes

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Tue Nov 8 10:44:17 UTC 2022


I believe adding Java syntax to model objects backed by memory segments 
might be pushing things a little too far. From a pedagogical perspective 
you would now have to explain to _every_ Java developers that there are 
two different kinds of objects, plain and native, and the rules which 
govern their access would be different (plain objects are 
garbage-collected, native objects are not).

Seems like a nightmare, for a relatively little pay off. Note that, if 
you declare a record class with components X and Y, it is relatively 
easy to construct a function that can read a segment, with given struct 
layout into a record with matching components. I believe JPassport [1] 
does something in this direction. With something like this you get 
basically 90% of what you are aiming for, without the need to change the 
language by adding a new keyword, and making the programming model more 
complex for all the developers out there, including those who do not 
care about off-heap access.

Cheers
Maurizio

[1] - https://github.com/boulder-on/JPassport/


On 08/11/2022 06:52, Red IO wrote:
> I just had a crazy idea on how to make foreign memory access work and 
> feel like java native class member access.
> The idea is that you define special classes maybe with an interface or 
> a special class keyword. This class can then be "constructed" using a 
> MemorySegment being bound by its special and temporal bounds. The 
> object would be either null or every memory access throws an exception 
> when the bounds are breached. The class would be implicitly final and 
> would extend a class Native.
> This could look something like this :
>
> //c struct
> typedef struct {
> int x;
> int y;
> } Point;
>
> //java native class
> public native class Point {
>
> int x;
> int y;
>
> //implicit and forced private constructor
> //normal creation would make things difficult
> }
>
> MemorySegment data =... //native memory
> Point p = data.object(Point.class);
>


More information about the panama-dev mailing list