janino-3.1.20 #175
stefan-zobel
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
JANINO-3.1.20
Fourteen fixes in the compiler, from the 3.1.x maintenance line (see "Release lines" in Compatibility), and JAR files
without the dummy signature. Upgrade if your code declares two local classes with the same name in one class, or
uses
super.m()for aprivateorstaticmethod of the superclass: such code compiled, but used the wrongclass or failed at run time.
Fixed
Code that compiled, but did not run as written:
local class and a member class with the same name, got the same binary name, and only one class file was kept:
the code used the wrong class, or failed with a
NoSuchMethodError. Now such a local class gets a number, likewith
javac(P$2L, orP$1Lnext to a member classL); the names of all other local classes are unchanged.super.m()for aprivatemethod of the superclassP, in a subclass ofPdeclared inP, failed at run time with aNoSuchMethodError.super.s()for astaticmethod of the superclassfailed at run time with an
IncompatibleClassChangeError;Outer.super.s()was an internal compiler error.super.a(o, v)for a variable arity method that thesuperclass implements from an interface compiled into a class that the JVM rejected (
VerifyErroron Java 25,IncompatibleClassChangeErroron older JVMs).Code that was rejected or crashed the compiler, and now compiles like with
javac:argument of a parameter
Object..., e.g.f(1, new int[] { 1, 2 })withf(Integer i, Object... a).with a
nullargument (internal compiler error).parameter types are the leading parameter types of another (internal compiler error; now reported as ambiguous).
Invocations of variable arity methods, one of which is more specific, e.g.
g(1, 2, 3)withg(int...)andg(double...), were rejected as ambiguous.super.f("a", "b")for a variable arity methodf(String...)was rejected,super.f()was an internal compiler error.List<Object>[], as the type of some local variables, of a cast or a type argument.when it was invoked).
if (b) {}with a condition of typeBoolean.publicorprotectedmember of a class that is notaccessible, inherited through an accessible subclass, e.g.
p.B.m()withpublic class B extends Aand apackage-private class
A.Unsigned JAR files
The JAR files are no longer signed with the dummy certificate that Janino has used since 2.5.7
(
META-INF/DUMMY.SF,META-INF/DUMMY.DSA). Its key is public, so the signature proved nothing. Fat JARs no longerneed to exclude these files. The classes, the OSGi headers and the automatic module names are unchanged; the
artifacts on Maven Central are signed with PGP as before, and the GitHub release has
SHA256SUMS.Performance
Measured interleaved on JDK 25 (
janino-benchmarks, with and without JIT, each with an A/A control):that Apache Spark generates for TPC-DS queries, and so is the memory that a compilation allocates (without JIT,
where it is deterministic: +0.0 to +0.1 %). The generated class files are byte-identical for all workloads.
and with 14 to 16 % less memory; the code that Spark generates compiles equally fast with JIT, and without JIT
1.2 % faster and with 4.5 % less memory. Code with many nested
try/finallystatements needs 20 to 26 % moretime and 16 to 17 % more memory, because the code that Janino generates for it since 3.1.14 is correct, but
larger.
See the benchmark README for the method.
Compatibility notes
classes whose binary names collided (Two local classes with the same name in one class get the same binary name #143). For all workloads of the benchmarks, including Janino's own sources
and the code that Apache Spark generates for TPC-DS queries, the class files are the same as with 3.1.19, byte for
byte (see "Performance" above).
and about 4800 tests of the execution engine of Apache Drill, pass with this release as with the Janino that the
projects declare.
Assets
The artifacts on Maven Central are signed with the PGP key
D7FA DB51 D921 93FC A6BA 204D C0D2 FF51 226A 8B8B. Thisrelease additionally contains the same files as the previous releases:
janino,commons-compiler,commons-compiler-jdk(each with sources and Javadoc),
commons-compiler-tests, and the POMs, includingjanino-parent.Verify the downloads with:
This discussion was created from the release janino-3.1.20.
All reactions