JEP 442: Foreign Function & Memory API => why is it again preview API?
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Tue May 16 16:29:36 UTC 2023
On 16/05/2023 16:38, Uwe Schindler wrote:
> It exists now since Java 14, where it first appeared as incubation. I
> know theres still work on the foreign linker, but why aren't the
> stable classes like MemorySegment, ValueLayout not public now?
Hi Uwe,
while I understand the frustration (and I'm grateful for the feedback
you and others provided along the way), I think I disagree on this
assessment. While it's true that layouts and segments have not changed
much, the story about how to reason about the lifetime of a memory
segment has. So, yes, MemorySegment per se has not changed, but the way
in which you obtain segments has changed quite a bit.
Now, we could probably have finalized a subset of FFM which did *not*
support linking of foreign function **and** deterministic deallocation.
But would that have been useful? IIRC, Lucene has two main reasons to
use FFM:
* deterministically unmap memory-mapped memory segments w/o using Unsafe
* mapping files that are bigger than 2GB
While a MemorySegment-only version of FFM would have allowed the latter,
it would not have allowed for the former - meaning that there would be
still part used by Lucene that would be under "preview".
So, while we have considered such a splitting move many times (believe
me!), we always came up with the same conclusion: an FFM API w/o a story
on lifetimes would not be very useful compared to what's already
provided in the Java SE API.
Hopefully the lifetime-centric heavy-lifting is behind us. But I still
think it would have been too risky to finalize the FFM API with a
new-ish lifetime API that was not validated in the wild. As much as we
try to be responsible with API changes, and do code analysis on the code
using FFM code we know about, there's always a chance to miss something.
For this reasons, I'm a strong believer that, when in doubt, the answer
should always be "wait one more release" - at the end of the day that's
why we have 6-month releases to begin with.
Cheers
Maurizio
More information about the core-libs-dev
mailing list