Standalone Nashorn is coming for Java 15+

Attila Szegedi szegedia at gmail.com
Sun Nov 15 17:25:55 UTC 2020


Hi y’all,

openjdk/nashorn repo is up and its main branch is populated with the initial copy of Nashorn as it existed in JDK 14. I added a fix for wrong/missing licenses for two files (agreed with Oracle) and an initial project README on top of it.

An even better news is that I have the initial standalone Nashorn 15.0.0 PR up ready for review. It is at:

<https://github.com/openjdk/nashorn/pull/3>


The PR describes the steps to build the artifacts. I’d like to encourage everyone here to try it out and report back with your experiences, and to also give an earnest review of the PR. If it works out okay, we could merge this into main in the next few days and then I can get the artifacts published into Maven Central!

Attila.

> On 2020. Oct 25., at 18:07, Attila Szegedi <szegedia at gmail.com> wrote:
> 
> Hi y’all,
> 
> trying to get into the habit of making these weekly updates until I have something else to show.
> 
> * With Remi’s, Sundar’s and Mandy’s help I fixed anonymous code loading. We’ll be using the sun.misc.Unsafe for now, with hope to transition to Lookup.defineHiddenClass somewhere down the line.
> 
> * I started using Ivy as the dependency manager in our build.xml, and right now I also have an Ant task that builds all the artifacts for Maven publication. 
> 
> The first version of Maven artifacts (jar, javadoc, sources, Maven pom file) is basically ready to go. All we’re waiting for is for Oracle to create the openjdk/nashorn repository and approve its initial contents. I started the relevant conversation about it 12 days ago… it is going slower than I hoped for.
> 
> What do you all think of the version number? Nashorn never had its own separate version number, but I’m thinking we could start the standalone version at 15. I don’t expect we’ll remain in lockstep with OpenJDK (so it’ll remain at 15 significantly longer), but it might be a good strategy to at least retroactively be able to talk about it without confusion, e.g. “Nashorn 11” is Nashorn-as-in-Java-11 and “Nashorn 14” is Nashorn-as-in-Java-14. And “Nashorn 15” is then quite naturally the first standalone version.
> 
> Attila.
> 
>> On 2020. Oct 19., at 17:16, Attila Szegedi <szegedia at gmail.com> wrote:
>> 
>> Hi y’all,
>> 
>> a quick update with regard of what’s been happening since the last post.
>> 
>> * I’m talking with folks at Oracle about setting up the openjdk/nashorn repo. We’re hashing out what the initial content of the repo should be.
>> 
>> * The licensing for the standalone Nashorn is confirmed to be GPLv2+Classpath exception.
>> 
>> * In anticipation of getting a public repo, I’ve been not sitting idle, but rather I’m working in a private repo to get ahead with the necessary adaptations. I have a version now that passes the internal test suite (with an asterisk) and passes the whole test262[0] suite (no asterisk there, it all passes.)
>> 
>> * I still need to figure out the minimal descriptive pom.xml (dependencies etc., no build information) in order to be able to produce Maven artifacts. Right now, Nashorn’s build and test process is highly customized set of Ant build.xml files, so it can’t just be converted to “vanilla” Maven or Gradle. It’s a long term goal though (to switch it from our custom Ant build.xml to either one of these.) Initially, it might make sense to use Apache Ivy within our Ant build to handle both dependencies and publication.
>> 
>> As for test suite asterisks:
>> 
>> * For now, I moved all the jjs related tests into “currently failing” directory as I did not have time to figure out how to build jjs. We can sort out later if/when/how we want to resurrect jjs.
>> 
>> * sandbox/nashorninternals.js test is moved to “currently failing” too. I’m pretty sure that what it’s been testing is no longer relevant. Tests artificially are restricted from accessing internal Nashorn internal packages and this is validated. Unfortunately, keeping Nashorn internals in the list of access-checked packages causes lots of issues for Nashorn itself in the tests, so I removed internal packages from the access-check list. I separately kept a test package that’s used to assert scripts can’t access such packages, and it works fine.
>> 
>> * for now, I disabled anonymous code loading. It’s a funny one. Nashorn has a feature called “anonymous code loading” that it uses for somewhat lighter-weight loading of code as it compiles JavaScript functions one-by-one into bytecode classes. Unfortunately, it uses Unsafe.defineAnonymousClass for that, and outside of JDK it can’t access Unsafe. So I switched to a new API,  luckily available from Java 15, MethodHandles.Lookup.defineHiddenClass. It seems to work as it should, except with it, eval’d expressions no longer report “<eval>” as their script name and anonymous functions no longer report “<anonymous>” but rather their callers names, script names, and line numbers are reported. It’s quite maddening, and if I can’t get to the bottom of it in reasonable amount of time, I’ll just keep anonymous code loading switched off for initial release. There’s not many drawbacks to it, maybe a bit higher memory utilization if you don’t use optimistic types. With optimistic types, it would preclude obsolete code versions from clearing up from memory when functions are repeatedly recompiled until the whole script gets unloaded.
>> 
>> Attila.
>> 
>> [0] https://github.com/tc39/test262/tree/es5-tests
>> 
>>> On 2020. Oct 11., at 9:28, Attila Szegedi <szegedia at gmail.com> wrote:
>>> 
>>> Folks,
>>> 
>>> some good news for y'all (presumably you're on this mailing list because you are interested in Nashorn.)
>>> 
>>> Since Nashorn's removal from JDK starting with Java 15, numerous people have realized that they, in fact, rely on it. To remedy the situation, Nashorn will continue as a standalone project within the OpenJDK organization.
>>> 
>>> You might ask, "But isn't Nashorn officially dead?", to which the answer is: no, it isn’t. The project’s product is merely no longer shipped as part of the JDK project. The Nashorn project in OpenJDK organization is still live[1], along with all of its resources including the mailing list this message is posted on. It was merely not active for a while, until now.
>>> 
>>> What does this mean in practical terms? The following will happen or are happening:
>>> 
>>> * Project communication will continue on this mailing list (<nashorn-dev at openjdk.java.net>).
>>> 
>>> * A GitHub project openjdk/nashorn will be set up. It will be populated by a clone of the openjdk/jdk14u repo that has been filtered for  Nashorn-only commits. (Thanks, git-filter-repo[2], you are awesome!) There will be no synchronization back to jdk14u afterwards, it won't act as an upstream. openjdk/nashorn proceeds independently from that point on.
>>> 
>>> * The project will change the module and package names as it can't keep living within the top-level "jdk." package. In accordance with other independently-developed OpenJDK projects, it will transition to module and package names within the "org.openjdk." package. Fortunately for Nashorn, it is mostly used through the "javax.script.*" APIs so people that use it through those APIs won't have to adapt their code. Creating the engine by name as described in Nashorn’s last (JDK 14) API docs[3] will continue to work. People that used to use the Nashorn-specific API (typically, AbstractJSObject and ScriptObjectMirror) will need to adapt their code for new package names, though.
>>> 
>>> * Project artifacts (in plain English: JAR file to be used with Maven etc.) will be published on SonaType under the "org.openjdk" organization, again similar to other independently-developed OpenJDK projects.
>>> 
>>> The goal for the initial release is to ship a standalone Nashorn with identical functionality to that in JDK 14, with the only changes being:
>>> 
>>> * reversing of deprecation and “scheduled for removal” notices,
>>> * enacting the package and module name changes,
>>> * replacing or removing dependencies on various jdk.internal.* packages since those are no longer exported from JDK modules to the Nashorn module.
>>> 
>>> It is possible for expediency that we will decide to ship Nashorn as a library first, and separately ship the initial version of the jjs shell sometime later.
>>> 
>>> I’m personally undertaking these initial tasks. I will let you know here on the list about the progress, and once the repo is set up the work will also start appearing on a branch.
>>> 
>>> There are some other aspects of the project that need to be worked out: contribution and review guidelines, publication location of the accompanying documentation (that will no longer be part of the JDK documentation) and so on. I will post discussion-initiating e-mails for these as well as time comes and will absolutely welcome feedback on them, just as I welcome feedback on this plan too.
>>> 
>>> Attila.
>>> 
>>> --
>>> [1] https://openjdk.java.net/projects/nashorn/
>>> [2] https://github.com/newren/git-filter-repo
>>> [3] https://docs.oracle.com/en/java/javase/14/docs/api/jdk.scripting.nashorn/module-summary.html
>> 
> 



More information about the nashorn-dev mailing list