CHANGES:
This release includes minor bug fixes, improvements, and a breaking change regarding the syntax of handlers.
Queries mixing set and bag semantics
Links now provides experimental support for SQL queries with grouping and
aggregation. These require the mixing normaliser (mixing_norm=on
in the
configuration file).
The result of grouping over a relation is represented as a finite map, which in
Links is treated as a list of (grouping key, associated subrelation) pairs.
Aggregation can then be applied groupwise to a finite map to obtain again a
relation. Such Links queries are translated to SQL queries using group by
and
aggregates.
Further information on this feature is provided in the Links GitHub
wiki.
New syntax for handlers
The syntax for handlers has changed. Instead of
handle (...) {
case Op(params, resumption) -> ...
case Return(x) -> x
}
we write
handle (...) {
case <Op(params) => resumption> -> ...
case x -> x
}
We can also write case <Op(params) -> resumption> -> ...
.
For now, the semantics for ->
and =>
are the same.
Control-flow linearity
Links now tracks control-flow linearity when the flag --control-flow-linearity
is enabled. This extension fixes a long-standing soundness bug (see issue
#544) with the interaction
between exceptions, multi-shot effect handlers and session-typed channels. More
details about this extension can be found in the wiki
page.
Other changes and fixes
- The package
links-mysql
now relies on themysql8
package as its underlying
database driver. - Links now supports OCaml 5.
- The
SessionFail
effect can now be supressed by disabling the
expose_session_fail
setting. When doing so, theSessionFail
effect
is included in thewild
effect instead. - The (incomplete) support for distributed session delegation has been removed.
- The standard library now provides functions for issuing SPARQL queries.