What is a quasi-linear type system?
Linear type systems distinguish between the type of a value that
can be used just once and the type of a value that can be used many times.
This distinction can be used for improvement of memory management and
in-place update of data structures: if a heap value is statically known to be
used just once, it can be automatically deallocated when it is accessed.
A quasi-linear type system is an extension of linear type systems.
Because usual linear type systems count the access to a value strictly,
they cannot be used for deallocating values that are used more than once.
For example, it is trivial that x can be deallocated after
x+y is evaluated in the following program
let val x = 1.0 in let val y = x+1.0 in x+y end end
but linear type systems cannot do that because x is used twice.
We overcame this kind of problem by extending a linear
type system with information
on the evaluation order and dataflow. See the paper below for more information.