[new release] links, links-postgresql, links-sqlite3 and links-mysql (0.9.8)
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](https://github.com/links-lang/links/wiki/Grouping-and-aggregation).
## 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
[links-lang/links#544](https://github.com/links-lang/links/issues/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](https://github.com/links-lang/links/wiki/Control-flow-linearity).
## Other changes and fixes
* The package `links-mysql` now relies on the `mysql8` 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, the `SessionFail` effect
is included in the `wild` effect instead.
* The (incomplete) support for distributed session delegation has been removed.
* The standard library now provides functions for issuing SPARQL queries.