A new major version of the Jasmin compiler has just been released. In addition to the various bug fixes and improvements whose details can be found in the CHANGELOG, it features a few important changes, summarized below.

Sub-arrays at non-constant offsets

Array slices (also known as subarrays) are now allowed to have a dynamic start position, in particular an offset computed from a while loop counter.

Word-Sized Integers

New data types have been introduced: word-sized integers. They are represented as machine-words of known size, but behave as unbounded mathematical integers but are known to stay within a given bounded range (known at compile-time, tied to their type). They are meant to make the verification effort related to integer overflows a standalone task: prove first the safety of word-sized integer operations, and then (soundly) pretend that the programs computes with mathematical (unbounded) integers.

More details can be found in the relevant documentation.

New syntax in array and memory accesses

When reading from or writing to the external memory or an array, the type of the transmitted value is now written inside the square brackets and prefixed by a colon. For instance, to read sixteen bits from memory at address p, one may write: x = [:u16 p];, and to write into the second cell of an array t seen as an array of sixteen bits elements, one may write t[:u16 1] = 42;.

New website for the documentation

The Jasmin documentation has been overhauled and is now available at https://jasmin-lang.readthedocs.io/.

Linter library

New warnings can be enabled in the compiler using the -wall command-line argument. They warn when variables are used before being initialized and when some assignments are dead.