janino-3.1.19 #121
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.19
Five fixes in the compiler, from the 3.1.x maintenance line (see "Release lines" in Compatibility). Upgrade if you
use qualified superclass method invocations (
Outer.super.m()) in inner classes: since 3.1.16, such an invocationin an inner class that extends
Outerinvoked the method on the wrong instance.Fixed
Outer.super.m()in an inner class that itself extendsOuter(also in a class nested in it, and in an anonymousor local subclass of
Outer) invoked the superclass method on the instance of the inner class instead of the enclosinginstance. Since 3.1.16.
class R extends Qwithclass Q extends PinP, compiled into a class that the JVM rejected (VerifyError).protectedmember type could not be used from a subclass of the enclosingtype in another package (
IllegalAccessError); its class file now has the flagACC_PUBLIC, like withjavac.static finalfield,e.g.
static final int K = DEBUG ? 1 : 2;, was an internal compiler error; as an annotation element value,@A(true ? 1 : 2), it was rejected, and so was@B(X || Y).09.5,07e1or07f, were rejected. They compile now, exceptwith an underscore directly before the first digit
8or9, e.g.0_9.5. Invalid octal literals such as09are reportedwith the same messages as before.
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.1 to +0.1 %). The generated class files are byte-identical for all workloads.
without) and with 14 to 16 % less memory; the code that Spark generates compiles equally fast with JIT, and without
JIT 1.8 % faster and with 4.6 % less memory. Code with many nested
try/finallystatements needs 24 to 27 % moretime and 15 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
protectedmember types (one flag, A protected member type is not public in its class file: IllegalAccessError when it is used from another package #87), for the constructors of the VerifyError for an inner class whose superclass is an inner class that extends the outer class #97 cases,which the JVM rejected before, and for the invocations of
Outer.super.m()in an inner class that extendsOuterinvokes the method on the inner instance #110. For all workloads of the benchmarks, includingJanino's own sources and the code that Apache Spark generates for TPC-DS queries, the class files are the same
as with 3.1.18, byte for byte (see "Performance" above).
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.19.
All reactions