Announcing Scala.js 1.7.1
Oct 7, 2021.
We are pleased to announce the release of Scala.js 1.7.1!
This is mostly a bugfix release. It also updates the version of the Scala standard library to 2.12.15 for 2.12.x versions.
Read on for more details.
If you are new to Scala.js, head over to the tutorial.
Bug reports can be filed on GitHub.
If upgrading from Scala.js 0.6.x, make sure to read the release notes of Scala.js 1.0.0 first, as they contain a host of important information, including breaking changes.
This is a patch release:
- It is backward binary compatible with all earlier versions in the 1.x series: libraries compiled with 1.0.x through 1.7.0 can be used with 1.7.1 without change.
- It is forward binary compatible with 1.7.0: libraries compiled with 1.7.1 can be used with 1.7.0 without change.
- It is backward source compatible with 1.7.0: source code that used to compile with 1.7.0 should compile as is when upgrading to 1.7.1.
In addition, like Scala.js 1.7.0:
- It is not forward binary compatible with 1.6.x: libraries compiled with 1.7.1 cannot be used with 1.6.x or earlier.
- It is not entirely backward source compatible with 1.6.x: it is not guaranteed that a codebase will compile as is when upgrading from 1.6.x or earlier (in particular in the presence of
As a reminder, libraries compiled with 0.6.x cannot be used with Scala.js 1.x; they must be republished with 1.x first.
Fixes with compatibility concerns
Default parameter values of
@js.native defs are now ignored
In native JS types, default parameters of methods are only meaningful by their presence, but not by their actual values.
This notably allows to use the pseudo-value
When calling that method from Scala.js as
it is translated as
y === undefined that is used.
This behavior applies regardless of the value used in the facade.
If we pretend in the facade that the default value is
2, as follows:
it will have no impact on the behavior of the code.
1 as the actual default value.
Issue in previous versions
The above behavior has always been specified as is.
It was however previously incorrectly implemented for
For example, if
bar was a top-level function, we could have defined is as
In that case, until Scala.js 1.7.0, calling
Foo.bar(5) was erroneously compiled to
This is inconsistent with other native JS methods.
That also prevented such definitions to use
= js.native, since it would report that
js.native cannot be compiled to actual code for run-time execution.
Fix in Scala.js 1.7.1
In Scala.js 1.7.1, the behavior of default parameters in
@js.native defs has been aligned with other native JS methods.
Now, the call
Foo.bar(5) is correctly compiled to
bar(5), and therefore uses the JS-defined default value of
This change may break some code when compiling the call site
bar(5) with Scala.js 1.7.1, if the code relied on the buggy previous behavior.
The fix also allows
= js.native to be used in the default parameters of
Among others, the following bugs have been fixed in 1.7.1:
- #4542 Many
FewestModulescauses the Linker to GC itself to death
- #4545 JDK 12+ bug: Referring to non-existent class
- #4548 Referencing only the class data of an imported native JS class causes a GCC error
js.nativeas default arg doesn’t compile for top-level method facades
- #4554 Default values for params of
@js.native defs are actually used, instead of being replaced by
You can find the full list on GitHub.