Skip to content

0.9.8

Latest
Compare
Choose a tag to compare
@frank-emrich frank-emrich released this 16 Nov 13:45
· 7 commits to master since this release
a53a36f

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 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.