Continuations, here I come
Attila Szegedi
szegedia at gmail.com
Sat Aug 8 00:56:42 PDT 2009
On 2009.08.08., at 0:03, Hiroshi Yamauchi wrote:
> Hi all,
>
> I'm also curious to see/try the latest update/patch as I'd like to
> experiment with the continuation feature in the JVM.
>
> I have looked at this file (which I think is an old file) so far:
>
> http://hg.openjdk.java.net/mlvm/mlvm/hotspot/file/2c1323e05f9a/callcc.patch
>
> I patched it to openjdk6 (Hotspot 11) and the test appears to work,
> though the monitor support seemed unfinished.
>
> BTW, here are two comments that I personally had about the API from
> the perspective of using continuations from the Java language
> (referring to the old patch):
>
> 1. I think that we don't want to run the finally clauses twice (once
> when the exception is thrown on 'copyStack' and again after the stack
> is resumed).
The thing is, the semantics of the finally block become application-
specific when you throw in continuations in the mix. Some finally
blocks are meant to clean up high-level application state (and thus
need to only be executed on the very last time). Some finally blocks
are meant to clean up transient state (i.e. a database connection) and
should execute every time, plus need some mechanism for
reestablishment of their state on resume; you yourself mention one
typical example, which is locking of monitors.
A good continuations mechanism should support both, and add language
construct for distinguishing between the two. Now, this is not as
daunting as it might sound. Since - as I said - the nature of the
finally block becomes application-specific, you can just have an
application-specific mechanism for checking whether it is a capture or
the real exit, so you can do:
try {
...
}
finally {
if(isCapturingContinuation()) {
... capturing cleanup (usually unused) ...
}
else {
... final cleanup ...
}
... transient cleanup ...
}
Those finally blocks that don't have this will be considered to have
purely transient cleanup, of course. However, a support for
reinitialization of transient state is naturally required.
> 2. I think we want to unlock all the monitors on a stack save and
> relock them on a stack resume. (though I'm not sure what the intention
> of the unfinished code was.)
Sure, that makes sense. Locks are typical transient state. You get
unlocking for free if you decide to run the finally clauses on both
continuation capture and final exit.
Attila.
--
twitter: http://twitter.com/szegedi
weblog: http://constc.blogspot.com
More information about the mlvm-dev
mailing list