On 21/11/2022 01:02, Ethan McCue wrote:
There are some modules like jdk.internal.le which contain no publicly exported packages. In some of the experimentation we are doing, We want to use the jdk.internal.org.jline.utils.Levenshtien class from jdk.compiler.

Mechanically, we can do this without creating any new modules by adding a qualified export of the utils package to jdk.compiler. We could also make a brand new, tiny pointless module called jdk.internal.levenshtien. That would be the "cleanest" approach, but only if we didn't consider the existence of the internal modules to be public API.

So that's my general question - what is the bar for making a new internal module, and is the set of internal modules subject to backwards compatibility concerns?

There aren't many compatibility constraints on jdk.internal modules. Assume they can change or be removed in any release. It's important they don't export any packages to all modules, otherwise they cease to be "internal".  Also if they provide services then the name of the module may be something that users of jlink may become dependent on, so we have to be careful there.

A general point is that we don't want the JDK to backslide to a big ball of mud. We put a lot of effort several years ago to de-tangle the libraries so it would be disappointing see jdk.compiler, with no interest in line editing, add a dependency on jdk.internal.le so that it can make use of one of utility classes. So I don't think we should do that.

Can you say a bit more about what you are doing? Is this just a method to compute the Levenshtein distance between two strings? I assume you can just implement that in jdk.compiler without touching the module graph. It might be useful to get some sense on how common fuzzy matching is in the eco system to see if there is any merit to exposing APIs for this.

-Alan

Reply via email to