Saxon 12.0 is released
January 14, 2023
Submitted by Norm Tovey-Walsh.
12.0 is a new major release of SaxonJ, SaxonCS, and SaxonC, all built from the same code base. It is the first time we have released simultaneously for all three platforms, which we have been able to achieve thanks to progress on build and test automation and continuous integration.
SaxonC is a library with APIs for C, C++, PHP, and Python. This version is reengineered to use GraalVM, replacing the defunct ExcelsiorJET technology. The main benefit of the change is that we are now running on a supported platform, greatly reducing the risk of security vulnerabilities. In addition GraalVM is showing excellent performance results. SaxonC-HE ships with GraalVM Community Edition; SaxonC-PE and SaxonC-EE use GraalVM Enterprise Edition which gives a further performance boost. For Python users (versions 3.8 - 3.10), the SaxonC API for Python can be installed using pip from the standard PyPi repository.
SaxonCS is built by transpiling the source code of SaxonJ to C#. As well as new features inherited from SaxonJ, it now targets .NET 6, and plugs some gaps in the C# API.
SaxonJ is the flagship Java product and remains available in three editions, Home (HE), Professional (PE), and Enterprise (EE). SaxonJ 12.0 is built and tested using Java 11.
A significant development for performance optimization is a move towards use of learning strategies. Influenced by trends with JIT optimization technology, rather than relying entirely on static analysis to make optimization decisions, we are increasingly making decisions based on run-time monitoring. For example, it is hard to decide purely from static analysis what evaluation strategy to use for function parameters (lazy, eager, or incremental). By monitoring how the supplied parameter is actually used at run-time, we can make a more informed choice.
Most of the new functionality in 12.0 consists of experimental implementation of new features being developed for XSLT 4.0, XQuery 4.0, and XPath 4.0, a W3C Community initiative in which Saxonica is playing a leading role. This provides a wide range of handy new functions and operators. One of the most signfiicant features is that user-defined functions can now define optional parameters with a default value; they can also be called using keyword arguments as well as positional arguments. These new features cannot yet be considered stable, and must be explicitly enabled if they are to be used. They generally require Saxon-PE or Saxon-EE.
One of the new features is a parse-html() function for processing HTML5 documents. Saxon previously offered a saxon:parse-html() extension, but it was not well tested, and was not conformant with HTML5. The new function provides welcome new capability for applications that need to consume HTML5 data. The SaxonJ implementation uses validator.nu, while SaxonCS uses AngleSharp.
For more details about the release, including how to download it for your platform, see https://www.saxonica.com/