On 7/18/2024 5:16 AM, Stephan Herrmann wrote:
In thread "[module-imports] Importing java.se" Alex mentioned a
planned update to JEP 261. Now I wonder, if this is a suitable point
in time to ask again about another specification issue in this area.
JEP 261 lists among the new features a compiler option "--release",
which was contributed by JEP 247.
Now, JEP 261 is scope SE, but it "includes" JEP 247 which is declared
as scope JDK.
Similar to the discussion in the other thread, this does not answer,
how a compiler which is not part of a JDK can possibly implement the
"--release" option.
Back at the time, we (Eclipse) had shyly asked for a specification of
the format of file ct.sym. This specification was denied (it's
internal, subject to change), and also the idea to provide an API
instead didn't - to the best of my knowledge - bear any fruit.
As a result the Eclipse compiler had to be based on reverse
engineering of existing ct.sym files, and more than once the resulting
heuristics were broken by changes in the file format.
It seems that by now the file format has stabilized, so the easiest
solution might be to
+ provide a specification of that format, and
+ provide information for which JDK versions this format can be assumed
Please remember, that the Eclipse compiler must as best as possible be
able to work with any released JDK out there, past and future.
Most importantly, moving forward we'd appreciate some assurance that
our implementation will not be broken again by future internal changes
in OpenJDK.
So, to summarize, Eclipse knowingly used a non-documented JDK-internal
interface and then had to be updated when the non-documented
JDK-internal interface evolved.
Presumably if one wanted to work only from specifications, the necessary
Java SE API information could be extracted from the javadoc bundles for
the Java SE platform releases, with some amount of effort.
-Joe