Slobodan Blazeski <slobodan.blazeski@gmail.com> wrote:
+---------------
| rpw3@rpw3.org (Rob Warnock) wrote:
| > ... such as the "linear Lisp" Henry Baker has written about at
| > great length, see: ...[examples]...
| > and several others. See his archive page:
| > http://home.pipeline.com/~hbaker1/
|
| Could linear lisp support continuations?
+---------------
I'm not an expert in either linear logic or linear Lisp, but
from a brief look at Baker's papers, I'd have to say probably
"yes, sort of", but not usefully in the ways Scheme programmers
would normally expect. Consider this excerpt [with apologies if
I've in any way distorted the meaning by eliding]:
http://home.pipeline.com/~hbaker1/Use1Var.html
'Use-Once' Variables and Linear Objects -- Storage Management,
Reflection and Multi-Threading
Henry G. Baker (1994)
...
A 'use-once' variable must be dynamically referenced exactly
once within its scope. Unreferenced use-once variables must be
explicitly killed, and multiply-referenced use-once variables
must be explicitly copied; this duplication and deletion is
subject to the constraint that some linear datatypes do not
support duplication and deletion methods.
...
For example, use-once variables allow for the safe/controlled
use of reified language implementation objects like single-use
continuations.
...
Continuations can be linear (enabling an efficient implementation,
unlike [Lincoln92]), since they normally return only once ("one-shot"
[Haynes87]), even when doing co-routining and time-sharing [Wand80].
(Prolog-like backtracking [Haynes87] requires expensive copying--if
allowed--or (non-linear) sharing of continuations.) Of course, a
linear call/cc can have no implicit continuation--the only way to
return from a linear call/cc is to invoke the passed continuation,
so a function which does not escape via a passed continuation must
return it for its caller's use. Escaping via a continuation kills
an implicit continuation thereby causing intermediate linear variables
to be finalized a la Common Lisp unwind-protect.
...
So, yes, you can have linear continuations, but they won't behave
like default (non-linear) Scheme multi-use continuations.
-Rob
p.s. In the presence of linear variables, non-linear (Scheme-style)
continuations also violate the "one-use" guarantee of linear variables,
since invoking a continuation captured between the definition of a
linear variable and its single use (single reference) would cause
the variable to be referenced again. Oops.
-----
Rob Warnock <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607