* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
@ 2007-10-09 5:59 ` Barb Knox
2007-10-09 6:07 ` Bakul Shah
` (15 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: Barb Knox @ 2007-10-09 5:59 UTC (permalink / raw)
To: help-gnu-emacs
In article <1191906949.179197.217470@57g2000hsv.googlegroups.com>,
gnuist006@gmail.com wrote:
> Again I am depressed to encounter a fundamentally new concept that I
> was all along unheard of.
Don't be depressed about that. There are countless concepts out there
they you haven't yet heard of.
> Its not even in paul graham's book where i
> learnt part of Lisp. Its in Marc Feeley's video.
>
> Can anyone explain:
>
> (1) its origin
Lambda calculus. Instead of function A returning to its caller, the
caller provides an additional argument (the "continuation") which is a
function B to be called by A with A's result(s). In pure "continuation
style" coding, nothing ever "returns" a result.
It is easy to mechanically transform normal function-style lambda
calculus into continuation-style, but the reverse is not so.
> (2) its syntax and semantics in emacs lisp, common lisp, scheme
> (3) Is it present in python and java ?
Java, sort of. For example, the Run interface.
Python, I don't know.
> (4) Its implementation in assembly. for example in the manner that
> pointer fundamentally arises from indirect addressing and nothing new.
> So how do you juggle PC to do it.
You can have a "spaghetti stack", or keep continuation data-structures
in the heap.
> (5) how does it compare to and superior to a function or subroutine
> call. how does it differ.
This sounds like homework. What do you have so far?
> Thanks a lot.
>
> (6) any good readable references that explain it lucidly ?
Google?
--
---------------------------
| BBB b \ Barbara at LivingHistory stop co stop uk
| B B aa rrr b |
| BBB a a r bbb | Quidquid latine dictum sit,
| B B a a r b b | altum viditur.
| BBB aa a r bbb |
-----------------------------
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
2007-10-09 5:59 ` The fundamental concept of continuations Barb Knox
@ 2007-10-09 6:07 ` Bakul Shah
2007-10-09 6:09 ` .
` (14 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: Bakul Shah @ 2007-10-09 6:07 UTC (permalink / raw)
To: help-gnu-emacs
gnuist006@gmail.com wrote:
> Again I am depressed to encounter a fundamentally new concept that I
> was all along unheard of.
The concept is 37 years old. Wadsworth in his "Continuation
Revisited" paper says he & Strachey were struggling with
extending the technique of denotational semantics to describe
jumps and not finding a satisfactory answer. Then, in his
words:
in October 1970 Strachey showed me a paper "Proving
algorithms by tail functions" by Mazurkiewicz [2] which he
had obtained from an IFIP WG2.2 meeting. Just the phrase
"tail functions" in the title was enough -- given the
experience of our earlier struggles -- for the ideas to
click into place! The (meaning of the) "rest of the program"
was needed as an argument to the semantic functions -- just
so those constructs that did not use it, like jumps, could
throw it anyway. The term "continuation" was coined as
capturing the essence of this extra argument (though I
often wished to have a shorter word!) and the rest, as they
say, is history.
> Its not even in paul graham's book where i
> learnt part of Lisp. Its in Marc Feeley's video.
>
> Can anyone explain:
>
> (1) its origin
> (2) its syntax and semantics in emacs lisp, common lisp, scheme
> (3) Is it present in python and java ?
> (4) Its implementation in assembly. for example in the manner that
> pointer fundamentally arises from indirect addressing and nothing new.
> So how do you juggle PC to do it.
> (5) how does it compare to and superior to a function or subroutine
> call. how does it differ.
>
> Thanks a lot.
>
> (6) any good readable references that explain it lucidly ?
You might like this one:
http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
2007-10-09 5:59 ` The fundamental concept of continuations Barb Knox
2007-10-09 6:07 ` Bakul Shah
@ 2007-10-09 6:09 ` .
[not found] ` <470b1aa6$0$79886$742ec2ed@news.sonic.net>
` (13 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: . @ 2007-10-09 6:09 UTC (permalink / raw)
To: help-gnu-emacs
On Tue, 09 Oct 2007 05:15:49 +0000, gnuist006 wrote:
> Again I am depressed to encounter a fundamentally new concept that I
> was all along unheard of. Its not even in paul graham's book where i
> learnt part of Lisp. Its in Marc Feeley's video.
>
> Can anyone explain:
>
> (1) its origin
One of the lambda papers, I think. I don't remember which.
> (2) its syntax and semantics in emacs lisp, common lisp, scheme
elisp and Common Lisp don't have them (although sbcl and maybe others user
continuations internally). In scheme CALL-WITH-CURRENT-CONTINUATION takes
a function of one argument, which is bound to the current continuation.
Calling the continuation on some value behaves like
CALL-WITH-CURRENT-CONTINUATION returning that value. So
(call/cc (lambda (k) (k 42))) => 42
You can think of it as turning the whatever would happen after call/cc
was called into a function. The most practical use for continuations in
implementing control structures, though there are some other neat tricks
you can play with them.
> (3) Is it present in python and java ?
Certainly not Java, I dunno about Python. I've never seen someone use
them in Python, but the pythonistas seem to want to add everything but a
decent lambda to their language so I wouldn't be surprised if someone had
added a call/cc. Ruby has it.
> (4) Its implementation in assembly. for example in the manner that
> pointer fundamentally arises from indirect addressing and nothing new.
> So how do you juggle PC to do it.
You have Lisp in Small Pieces. Read Lisp in Small Pieces.
> (5) how does it compare to and superior to a function or subroutine
> call. how does it differ.
You use them like a function call. You can also use them like
setjmp/longjmp in C. You can implement coroutines with them, or
events, or simulate non-determinism or write things like ((call/cc call/cc)
(call/cc call/cc)) and make your head explode, use it like goto's inbred
second cousin or in general whatever perverse things you might like to do
with the flow of control in your program.
>
> Thanks a lot.
>
> (6) any good readable references that explain it lucidly ?
Lisp in Small Pieces for implementation details, the Scheme Programming
Language for examples.
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <470b1aa6$0$79886$742ec2ed@news.sonic.net>]
* Re: The fundamental concept of continuations
[not found] ` <470b1aa6$0$79886$742ec2ed@news.sonic.net>
@ 2007-10-09 6:33 ` gnuist006
[not found] ` <1191911604.169846.244430@r29g2000hsg.googlegroups.com>
1 sibling, 0 replies; 35+ messages in thread
From: gnuist006 @ 2007-10-09 6:33 UTC (permalink / raw)
To: help-gnu-emacs
On Oct 8, 11:07 pm, Bakul Shah <use...@bitblocks.com> wrote:
> gnuist...@gmail.com wrote:
>
> > Again I am depressed to encounter a fundamentally new concept that I
> > was all along unheard of.
>
> The concept is 37 years old. Wadsworth in his "Continuation
> Revisited" paper says he & Strachey were struggling with
> extending the technique of denotational semantics to describe
> jumps and not finding a satisfactory answer. Then, in his
> words:
>
> in October 1970 Strachey showed me a paper "Proving
> algorithms by tail functions" by Mazurkiewicz [2] which he
> had obtained from an IFIP WG2.2 meeting. Just the phrase
> "tail functions" in the title was enough -- given the
> experience of our earlier struggles -- for the ideas to
> click into place! The (meaning of the) "rest of the program"
> was needed as an argument to the semantic functions -- just
> so those constructs that did not use it, like jumps, could
> throw it anyway. The term "continuation" was coined as
> capturing the essence of this extra argument (though I
> often wished to have a shorter word!) and the rest, as they
> say, is history.
>
> > Its not even in paul graham's book where i
> > learnt part of Lisp. Its in Marc Feeley's video.
> >
> > Can anyone explain:
> >
> > (1) its origin
> > (2) its syntax and semantics in emacs lisp, common lisp, scheme
> > (3) Is it present in python and java ?
> > (4) Its implementation in assembly. for example in the manner that
> > pointer fundamentally arises from indirect addressing and nothing new.
> > So how do you juggle PC to do it.
> > (5) how does it compare to and superior to a function or subroutine
> > call. how does it differ.
> >
> > Thanks a lot.
> >
> > (6) any good readable references that explain it lucidly ?
>
> You might like this one:
>
> http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudg...
thanks for the link but can you plz upload the paper so we can also
get it.
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <1191911604.169846.244430@r29g2000hsg.googlegroups.com>]
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
` (3 preceding siblings ...)
[not found] ` <470b1aa6$0$79886$742ec2ed@news.sonic.net>
@ 2007-10-09 7:11 ` Peter Danenberg
2007-10-09 12:05 ` Matthias Benkard
` (11 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: Peter Danenberg @ 2007-10-09 7:11 UTC (permalink / raw)
To: help-gnu-emacs
> (3) Is it present in python and java ?
The YIELD statement in Python's generators, I understand, is
continuation-like.
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
` (4 preceding siblings ...)
2007-10-09 7:11 ` Peter Danenberg
@ 2007-10-09 12:05 ` Matthias Benkard
2007-10-09 18:18 ` George Neuner
` (10 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: Matthias Benkard @ 2007-10-09 12:05 UTC (permalink / raw)
To: help-gnu-emacs
> (3) Is it present in python ...?
I don't keep up to date with the recent developments in Python land,
but the last time I used Python, it certainly didn't have first-class
continuations. There used to be a project called Stackless Python
that tried to add continuations to Python, but as far as I know, it
has always been separate from the official Python interpreter. I
don't know whether it's still alive. You may want to check http://stackless.com/
for details.
> (6) any good readable references that explain it lucidly ?
If you are familiar with Python syntax, there's
http://www.ps.uni-sb.de/~duchier/python/continuations.html -- and even
if you aren't, you may want to have a look at it, as simple Python
code is ridiculously easy to read.
~ Matthias
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
` (5 preceding siblings ...)
2007-10-09 12:05 ` Matthias Benkard
@ 2007-10-09 18:18 ` George Neuner
[not found] ` <470b1b30$0$11022$4c368faf@roadrunner.com>
` (9 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: George Neuner @ 2007-10-09 18:18 UTC (permalink / raw)
To: help-gnu-emacs
On Tue, 09 Oct 2007 05:15:49 -0000, gnuist006@gmail.com wrote:
>Again I am depressed to encounter a fundamentally new concept that I
>was all along unheard of. Its not even in paul graham's book where i
>learnt part of Lisp. Its in Marc Feeley's video.
>
>Can anyone explain:
>
>(1) its origin
Lambda calculus. Continuation is just a formal term for "what the
code does next". It manifests, literally, as the next instruction(s)
to be executed.
>(2) its syntax and semantics in emacs lisp, common lisp, scheme
Lisp does not have explicit continuations so there is no syntax for
them. Continuations in Lisp mainly take the form of function calls,
function returns, exceptions, conditions, etc. Sometimes code is
written in "continuation passing style" (CPS) in which each function
has one or more additional function parameters (the continuations) -
the function terminates by passing its result as an argument to one of
those continuation functions.
Scheme has explicit continuations based on closures. Closure
continuations are created using CALL-WITH-CURRENT-CONTINUATION
(usually abbreviated as CALL/CC). Some Schemes also recognize a
LET/CC form used mainly for escape continuations (exceptions).
Scheme's closure continuations can be stored in data structures and
used for complex control forms such as multitasking. Like Lisp,
Scheme code also is sometimes written using CPS.
>(3) Is it present in python and java ?
It is present in all languages. It generally takes the form of
procedure or function calls, returns, exceptions, etc.
>(4) Its implementation in assembly. for example in the manner that
>pointer fundamentally arises from indirect addressing and nothing new.
>So how do you juggle PC to do it.
As I stated above, every function call or return _is_ a continuation
... their implementation is obvious.
For the closure form used in Scheme, the implementation is to create a
closure, a data structure containing the function address and some
method of accessing the function's free variables, and to call the
function. How you do this depends greatly on the instruction set.
>(5) how does it compare to and superior to a function or subroutine
>call. how does it differ.
Calling closure continuations is a little more complicated and a bit
slower than calling a normal function. Creating the closure in the
first place may be simple or complicated depending on the complexity
of the source code and the processor's instruction set.
>Thanks a lot.
>
>(6) any good readable references that explain it lucidly ?
Get yourself a good textbook on compilers. Most of the techniques are
applicable to all languages - even for seemingly very different
languages, the differences in their compilers are simply in how the
basic compilation techniques are combined.
My favorite intermediate-level books are
Aho, Sethi & Ullman. "Compilers: Principles, Techniques and Tools".
2nd Ed. 2006. ISBN 0-321-48681-1.
The first edition from 1986, ISBN 0-201-10088-6, is also worth having
if you can still find it. The 1st edition is mainly about procedural
languages, the 2nd gives more time to functional languages and modern
runtime issues like GC and virtual machines.
Cooper & Torczon, "Engineering a Compiler", 2004.
ISBN 1-55860-698-X (hardcover), 1-55860-699-8 (paperback).
Also available as a restricted 90-day ebook from
http://rapidshare.com/files/24382311/155860698X.Morgan_20Kaufmann.Engineering_20a_20Compiler.pdf
There are also some decent intro books available online. They don't
go into excruciating detail but they do cover the basics of code
shaping which is what you are interested in.
Torben Mogensen. "Basics of Compiler Design"
http://www.diku.dk/~torbenm/Basics/
"Engineering a Compiler". I don't have this author's name, nor can
Google find it at the moment. I have a copy though (~2MB) - if you
are interested, contact me by email and I'll send it to you.
Also Google for free CS books. Many older books (including some
classics) that have gone out of print have been released
electronically for free download.
George
--
for email reply remove "/" from address
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <470b1b30$0$11022$4c368faf@roadrunner.com>]
* Re: The fundamental concept of continuations
[not found] ` <470b1b30$0$11022$4c368faf@roadrunner.com>
@ 2007-10-09 6:34 ` gnuist006
[not found] ` <1191911662.983658.79540@g4g2000hsf.googlegroups.com>
` (5 subsequent siblings)
6 siblings, 0 replies; 35+ messages in thread
From: gnuist006 @ 2007-10-09 6:34 UTC (permalink / raw)
To: help-gnu-emacs
On Oct 8, 11:09 pm, "." <f...@bar.biz> wrote:
> On Tue, 09 Oct 2007 05:15:49 +0000, gnuist006 wrote:
> > Again I am depressed to encounter a fundamentally new concept that I
> > was all along unheard of. Its not even in paul graham's book where i
> > learnt part of Lisp. Its in Marc Feeley's video.
>
> > Can anyone explain:
>
> > (1) its origin
>
> One of the lambda papers, I think. I don't remember which.
>
> > (2) its syntax and semantics in emacs lisp, common lisp, scheme
>
> elisp and Common Lisp don't have them (although sbcl and maybe others user
> continuations internally). In scheme CALL-WITH-CURRENT-CONTINUATION takes
> a function of one argument, which is bound to the current continuation.
> Calling the continuation on some value behaves like
> CALL-WITH-CURRENT-CONTINUATION returning that value. So
> (call/cc (lambda (k) (k 42))) => 42
> You can think of it as turning the whatever would happen after call/cc
> was called into a function. The most practical use for continuations in
> implementing control structures, though there are some other neat tricks
> you can play with them.
>
> > (3) Is it present in python and java ?
>
> Certainly not Java, I dunno about Python. I've never seen someone use
> them in Python, but the pythonistas seem to want to add everything but a
> decent lambda to their language so I wouldn't be surprised if someone had
> added a call/cc. Ruby has it.
>
> > (4) Its implementation in assembly. for example in the manner that
> > pointer fundamentally arises from indirect addressing and nothing new.
> > So how do you juggle PC to do it.
>
> You have Lisp in Small Pieces. Read Lisp in Small Pieces.
>
> > (5) how does it compare to and superior to a function or subroutine
> > call. how does it differ.
>
> You use them like a function call. You can also use them like
> setjmp/longjmp in C. You can implement coroutines with them, or
> events, or simulate non-determinism or write things like ((call/cc call/cc)
> (call/cc call/cc)) and make your head explode, use it like goto's inbred
> second cousin or in general whatever perverse things you might like to do
> with the flow of control in your program.
>
>
>
> > Thanks a lot.
>
> > (6) any good readable references that explain it lucidly ?
>
> Lisp in Small Pieces for implementation details, the Scheme Programming
> Language for examples.
which lambda paper ?
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <1191911662.983658.79540@g4g2000hsf.googlegroups.com>]
* Re: The fundamental concept of continuations
[not found] ` <470b1b30$0$11022$4c368faf@roadrunner.com>
2007-10-09 6:34 ` gnuist006
[not found] ` <1191911662.983658.79540@g4g2000hsf.googlegroups.com>
@ 2007-10-09 12:50 ` Matthias Blume
2007-10-09 13:50 ` josephoswald+gg@gmail.com
` (3 subsequent siblings)
6 siblings, 0 replies; 35+ messages in thread
From: Matthias Blume @ 2007-10-09 12:50 UTC (permalink / raw)
To: help-gnu-emacs
"." <foo@bar.biz> writes:
> On Tue, 09 Oct 2007 05:15:49 +0000, gnuist006 wrote:
>
>> Again I am depressed to encounter a fundamentally new concept that I
>> was all along unheard of. Its not even in paul graham's book where i
>> learnt part of Lisp. Its in Marc Feeley's video.
>>
>> Can anyone explain:
>>
>> (1) its origin
> One of the lambda papers, I think. I don't remember which.
This is a common misconception. There is very little that
originated from the "lambda" papers. But they did a marvelous job at
promoting some of the ideas that existed in the PL community for
years.
As for the concept of continuations, there is Scott and Strachey's
work on denotational semantics, and there is Landin's J operator.
(There's probably more that I am forgetting right now.)
>> (6) any good readable references that explain it lucidly ?
>
One of the most lucid explanations of definitional interpreters --
including those that are based on continuation-passing -- are
explained in J. Reynolds' famous 1971 "Definitional Interpreters for
Higher-Order Functions" paper. (It has been re-published in 1998 in
HOSC.) The paper also explains how to perform defunctionalization,
which can be seen as a way to compile (and even hand-compile)
higher-order programs.
Matthias
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] ` <470b1b30$0$11022$4c368faf@roadrunner.com>
` (2 preceding siblings ...)
2007-10-09 12:50 ` Matthias Blume
@ 2007-10-09 13:50 ` josephoswald+gg@gmail.com
2007-10-09 19:20 ` gnuist006
` (2 subsequent siblings)
6 siblings, 0 replies; 35+ messages in thread
From: josephoswald+gg@gmail.com @ 2007-10-09 13:50 UTC (permalink / raw)
To: help-gnu-emacs
On Oct 9, 2:09 am, "." <f...@bar.biz> wrote:
> On Tue, 09 Oct 2007 05:15:49 +0000, gnuist006 wrote:
> > (3) Is it present in python and java ?
>
> Certainly not Java, I dunno about Python. I've never seen someone use
> them in Python, but the pythonistas seem to want to add everything but a
> decent lambda to their language so I wouldn't be surprised if someone had
> added a call/cc. Ruby has it.
>
Continuations exist in all computer languages---actually, in anything
that executes code. The continuation is simply "what will happen for
the rest of the program execution." What might or might not exist is
an explicit linguistic mechanism to examine it, refer to the
continuation as a function, or to save it for later use.
> > (4) Its implementation in assembly. for example in the manner that
> > pointer fundamentally arises from indirect addressing and nothing new.
> > So how do you juggle PC to do it.
>
The continuation is typically present in the stack, which contains all
the control-flow information needed to continue program execution from
this point. (I.e., the function call mechanism includes a step saving
the location of the instruction to execute when the function call is
complete, and any registers that it will restore after the function
returns because the function call might destroy them.)
How you save that continuation for later, possibly repeated, use from
a different location in the program is a different question.
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] ` <470b1b30$0$11022$4c368faf@roadrunner.com>
` (3 preceding siblings ...)
2007-10-09 13:50 ` josephoswald+gg@gmail.com
@ 2007-10-09 19:20 ` gnuist006
[not found] ` <m2641g1mgn.fsf@my.address.elsewhere>
[not found] ` <1191957606.187050.272820@v3g2000hsg.googlegroups.com>
6 siblings, 0 replies; 35+ messages in thread
From: gnuist006 @ 2007-10-09 19:20 UTC (permalink / raw)
To: help-gnu-emacs
On Oct 8, 11:09 pm, "." <f...@bar.biz> wrote:
> On Tue, 09 Oct 2007 05:15:49 +0000, gnuist006 wrote:
>
> > Can anyone explain:
>
> > (1) its origin
>
> One of the lambda papers, I think. I don't remember which.
Hey no-name "dot" you are the only one who says its origin is in
one of the old lambda papers. Give me a reference or someone
give me a reference. I dont have access to any ACM journals or
other conferences. So
step 1
reference and the idea in it
step 2
if you can upload it
This is for historical and conceptual development at the same
time as learning the ideas to use them.
Thanks a lot.
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <m2641g1mgn.fsf@my.address.elsewhere>]
* Re: The fundamental concept of continuations
[not found] ` <m2641g1mgn.fsf@my.address.elsewhere>
@ 2007-10-09 19:37 ` gnuist006
2007-10-09 20:41 ` Chung-chieh Shan
` (2 more replies)
0 siblings, 3 replies; 35+ messages in thread
From: gnuist006 @ 2007-10-09 19:37 UTC (permalink / raw)
To: help-gnu-emacs
On Oct 9, 5:50 am, Matthias Blume <f...@my.address.elsewhere> wrote:
> "." <f...@bar.biz> writes:
> > On Tue, 09 Oct 2007 05:15:49 +0000, gnuist006 wrote:
>
> >> Again I am depressed to encounter a fundamentally new concept that I
> >> was all along unheard of. Its not even in paul graham's book where i
> >> learnt part of Lisp. Its in Marc Feeley's video.
>
> >> Can anyone explain:
>
> >> (1) its origin
> > One of the lambda papers, I think. I don't remember which.
>
> This is a common misconception. There is very little that
> originated from the "lambda" papers. But they did a marvelous job at
> promoting some of the ideas that existed in the PL community for
> years.
>
> As for the concept of continuations, there is Scott and Strachey's
> work on denotational semantics, and there is Landin's J operator.
> (There's probably more that I am forgetting right now.)
>
> >> (6) any good readable references that explain it lucidly ?
>
> One of the most lucid explanations of definitional interpreters --
> including those that are based on continuation-passing -- are
> explained in J. Reynolds' famous 1971 "Definitional Interpreters for
> Higher-Order Functions" paper. (It has been re-published in 1998 in
> HOSC.) The paper also explains how to perform defunctionalization,
> which can be seen as a way to compile (and even hand-compile)
> higher-order programs.
>
> Matthias
Matthias, thanks for the reference, but I dont have access to an
engineering library. I would appreciate, if you have access to paper/
scanner or electronic copy to help many of us out, you are
not just helping me but many will thank you.
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
2007-10-09 19:37 ` gnuist006
@ 2007-10-09 20:41 ` Chung-chieh Shan
2007-10-10 0:47 ` Matthias Blume
[not found] ` <ok5tt4-2ij.ln1@mantle.rutgers.edu>
2 siblings, 0 replies; 35+ messages in thread
From: Chung-chieh Shan @ 2007-10-09 20:41 UTC (permalink / raw)
To: help-gnu-emacs
gnuist006@gmail.com wrote in article <1191958673.182295.207190@22g2000hsm.googlegroups.com> in comp.lang.functional:
> > One of the most lucid explanations of definitional interpreters --
> > including those that are based on continuation-passing -- are
> > explained in J. Reynolds' famous 1971 "Definitional Interpreters for
> > Higher-Order Functions" paper. (It has been re-published in 1998 in
> > HOSC.) The paper also explains how to perform defunctionalization,
> > which can be seen as a way to compile (and even hand-compile)
> > higher-order programs.
>
> Matthias, thanks for the reference, but I dont have access to an
> engineering library. I would appreciate, if you have access to paper/
> scanner or electronic copy to help many of us out, you are
> not just helping me but many will thank you.
If nothing else, please use Google. Many will thank you.
http://www.google.com/search?hl=en&q=Definitional+Interpreters+for+Higher-Order+Functions&btnG=Search
--
Edit this signature at http://www.digitas.harvard.edu/cgi-bin/ken/sig
If monads encapsulate effects and lists form a monad, do lists correspond to
some effect? Indeed they do, and the effect they correspond to is choice.
Wadler 1995, Monads for fn'l programming
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
2007-10-09 19:37 ` gnuist006
2007-10-09 20:41 ` Chung-chieh Shan
@ 2007-10-10 0:47 ` Matthias Blume
[not found] ` <ok5tt4-2ij.ln1@mantle.rutgers.edu>
2 siblings, 0 replies; 35+ messages in thread
From: Matthias Blume @ 2007-10-10 0:47 UTC (permalink / raw)
To: help-gnu-emacs
gnuist006@gmail.com writes:
> Matthias, thanks for the reference, but I dont have access to an
> engineering library. I would appreciate, if you have access to paper/
> scanner or electronic copy to help many of us out, you are
> not just helping me but many will thank you.
Given that you seem to be hanging out at the internets, I expect you
do know how to use the google...
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <ok5tt4-2ij.ln1@mantle.rutgers.edu>]
[parent not found: <1191957606.187050.272820@v3g2000hsg.googlegroups.com>]
* Re: The fundamental concept of continuations
[not found] ` <1191957606.187050.272820@v3g2000hsg.googlegroups.com>
@ 2007-10-09 20:32 ` .
0 siblings, 0 replies; 35+ messages in thread
From: . @ 2007-10-09 20:32 UTC (permalink / raw)
To: help-gnu-emacs
On Tue, 09 Oct 2007 19:20:06 +0000, gnuist006 wrote:
> On Oct 8, 11:09 pm, "." <f...@bar.biz> wrote:
>> On Tue, 09 Oct 2007 05:15:49 +0000, gnuist006 wrote:
>
>>
>> > Can anyone explain:
>>
>> > (1) its origin
>>
>> One of the lambda papers, I think. I don't remember which.
>
> Hey no-name "dot" you are the only one who says its origin is in
> one of the old lambda papers. Give me a reference or someone
> give me a reference. I dont have access to any ACM journals or
> other conferences. So
I said "I think." Matthias corrected me. They're all on readscheme.org
( http://library.readscheme.org/page1.html ) though, and well worth
reading.
I note that I'm being mocked for not using my real name by someone not
using his/her real name. Thank you, no-name gnuist006, you make me laugh.
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <m5ang3h11oorvsrkit4q1moi6mirofbdbr@4ax.com>]
* Re: The fundamental concept of continuations
[not found] ` <m5ang3h11oorvsrkit4q1moi6mirofbdbr@4ax.com>
@ 2007-10-09 19:24 ` gnuist006
0 siblings, 0 replies; 35+ messages in thread
From: gnuist006 @ 2007-10-09 19:24 UTC (permalink / raw)
To: help-gnu-emacs
Special thanks to many of you for your very decent replies.
On Oct 9, 11:18 am, George Neuner <gneuner2/@/comcast.net> wrote:
> On Tue, 09 Oct 2007 05:15:49 -0000, gnuist...@gmail.com wrote:
> >Again I am depressed to encounter a fundamentally new concept that I
> >was all along unheard of. Its not even in paul graham's book where i
> >learnt part of Lisp. Its in Marc Feeley's video.
>
> >Can anyone explain:
>
> >(1) its origin
>
> Lambda calculus. Continuation is just a formal term for "what the
> code does next". It manifests, literally, as the next instruction(s)
> to be executed.
>
> >(2) its syntax and semantics in emacs lisp, common lisp, scheme
>
> Lisp does not have explicit continuations so there is no syntax for
> them. Continuations in Lisp mainly take the form of function calls,
> function returns, exceptions, conditions, etc. Sometimes code is
> written in "continuation passing style" (CPS) in which each function
> has one or more additional function parameters (the continuations) -
> the function terminates by passing its result as an argument to one of
> those continuation functions.
>
> Scheme has explicit continuations based on closures. Closure
> continuations are created using CALL-WITH-CURRENT-CONTINUATION
> (usually abbreviated as CALL/CC). Some Schemes also recognize a
> LET/CC form used mainly for escape continuations (exceptions).
> Scheme's closure continuations can be stored in data structures and
> used for complex control forms such as multitasking. Like Lisp,
> Scheme code also is sometimes written using CPS.
>
> >(3) Is it present in python and java ?
>
> It is present in all languages. It generally takes the form of
> procedure or function calls, returns, exceptions, etc.
>
> >(4) Its implementation in assembly. for example in the manner that
> >pointer fundamentally arises from indirect addressing and nothing new.
> >So how do you juggle PC to do it.
>
> As I stated above, every function call or return _is_ a continuation
> ... their implementation is obvious.
>
> For the closure form used in Scheme, the implementation is to create a
> closure, a data structure containing the function address and some
> method of accessing the function's free variables, and to call the
> function. How you do this depends greatly on the instruction set.
>
> >(5) how does it compare to and superior to a function or subroutine
> >call. how does it differ.
>
> Calling closure continuations is a little more complicated and a bit
> slower than calling a normal function. Creating the closure in the
> first place may be simple or complicated depending on the complexity
> of the source code and the processor's instruction set.
>
> >Thanks a lot.
>
> >(6) any good readable references that explain it lucidly ?
>
> Get yourself a good textbook on compilers. Most of the techniques are
> applicable to all languages - even for seemingly very different
> languages, the differences in their compilers are simply in how the
> basic compilation techniques are combined.
>
> My favorite intermediate-level books are
>
> Aho, Sethi & Ullman. "Compilers: Principles, Techniques and Tools".
> 2nd Ed. 2006. ISBN 0-321-48681-1.
> The first edition from 1986, ISBN 0-201-10088-6, is also worth having
> if you can still find it. The 1st edition is mainly about procedural
> languages, the 2nd gives more time to functional languages and modern
> runtime issues like GC and virtual machines.
>
> Cooper & Torczon, "Engineering a Compiler", 2004.
> ISBN 1-55860-698-X (hardcover), 1-55860-699-8 (paperback).
> Also available as a restricted 90-day ebook fromhttp://rapidshare.com/files/24382311/155860698X.Morgan_20Kaufmann.Eng...
>
> There are also some decent intro books available online. They don't
> go into excruciating detail but they do cover the basics of code
> shaping which is what you are interested in.
>
> Torben Mogensen. "Basics of Compiler Design"http://www.diku.dk/~torbenm/Basics/
>
> "Engineering a Compiler". I don't have this author's name, nor can
> Google find it at the moment. I have a copy though (~2MB) - if you
> are interested, contact me by email and I'll send it to you.
>
> Also Google for free CS books. Many older books (including some
> classics) that have gone out of print have been released
> electronically for free download.
>
> George
> --
> for email reply remove "/" from address
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
` (8 preceding siblings ...)
[not found] ` <m5ang3h11oorvsrkit4q1moi6mirofbdbr@4ax.com>
@ 2007-10-09 19:27 ` Jeff M.
2007-10-10 4:39 ` Marlene Miller
` (6 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: Jeff M. @ 2007-10-09 19:27 UTC (permalink / raw)
To: help-gnu-emacs
> (6) any good readable references that explain it lucidly ?
This was something that has been very interesting to me for a while
now, and I'm actually still having a difficult time wrapping my head
around it completely.
The best written explanation that I've come across was in "The Scheme
Programming Language" (http://mitpress.mit.edu/catalog/item/
default.asp?ttype=2&tid=9946). But perhaps others have better
references.
I'll attempt my own little explanation of call/cc. I'll butcher some
of it, I'm sure, but hopefully those more knowledgeable will politely
correct me. I will start with a loose analogy and point out a couple
examples I came across that did make a lot of sense.
First, the bad analogy I have (if you are coming from C programming
like me) is setjmp and longjmp. This is a bad analogy in that you're
talking about hardware and stack states as opposed to functions, but a
good analogy in that it saves the current state of execution, and
returns to that same state at a later time with a piece of data
attached to it.
My first example of using this would be to create a return function in
Scheme. I hope I don't get this wrong, but the example would be
something like this:
(define (my-test x)
(call/cc (lambda (return)
(return x))))
Now, here's my understanding of what is happening under-the-hood:
1. call/cc stores the current execution state and creates a function
to restore to that state.
2. call/cc then calls its own argument with the function it created.
The key here is that "return" is a function (created by call/cc)
taking 1 argument, and it restores execution at the same state it was
when the call/cc began (or immediately after it?). This line:
(return x)
is really just calling the function created by call/cc, which will
restore the execution state to what it was just prior to the call/cc,
along with a parameter (in this case, the value of x).
My next example I don't follow 100%, and I won't attempt to reproduce
it here, but it generates a continuation that modifies itself (bad?)
to define a list iterator.
http://blog.plt-scheme.org/2007/07/callcc-and-self-modifying-code.html
I recommend putting that code into a Scheme interpreter and running
it. You'll get it.
Hope this helps, and I look forward to better explanations than mine
that will help me along as well. :)
Jeff M.
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
` (9 preceding siblings ...)
2007-10-09 19:27 ` Jeff M.
@ 2007-10-10 4:39 ` Marlene Miller
[not found] ` <8IYOi.658994$p47.379449@bgtnsc04-news.ops.worldnet.att.net>
` (5 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: Marlene Miller @ 2007-10-10 4:39 UTC (permalink / raw)
To: help-gnu-emacs
> Can anyone explain:
>
> (1) its origin
From the Bibliographic Notes of Chapter 12 Continuations in a Functional
Language, Theories of Programming Languages by John C. Reynolds, page 370:
"A history of the repeated discoveries of continuations (occurring largely
in the context of functional languages) is given in Reynolds [1993];
relevant original papers include those by van Wijngaarden [1996], F. L.
Morris [1993], Strachey and Wadsworth [1974], J. H. Morris [1972], Fischer
[1972; 1993], and Abdali [1976]. The operations callcc and throw first
appeared in Scheme, but are descendents of Landin's [1965b] "J-operator".
Both the continuation-passing transformation from direct to continuation
semantics and defunctionalization were described, in the setting of programs
for interpreting eager-evaluation functional languages, by Reynolds
[1972a]."
"Beginning with the implementation of Scheme [Sussman and Steele Jr., 1975]
continuations and the continuation-passing transformation have played a
major role in the design of compilers. More recently, this topic has been
explored at book length by Appel [1992]."
Reynolds [1993] The Discoveries of Continuations.
van Wijngaarden [1996] Recursive Definition of Syntax and Semantics
F. L. Morris [1993] The Next 700 Formal Language Descriptions
Strachey and Wadsworth [1974] Continuations, A Mathematical Semantics for
Handling Full Jumps.
J. H. Morris [1972] A Bonus from van Wijngarden's Device
Fischer [1972, 1993] Lambda Calculus Schemata
Abdali [1976] A Lambda Calculus Model of Programming Languages - I. Simple
Constructs, II. Jumps and Procedures
Sussman and Steele Jr. [1975] SCHEME: An Interpreter for Extended Lambda
Calculus
Compiling With Continuations, Andrew W. Appel, 2007
- - - - - - - - - -
> (2) its syntax and semantics in emacs lisp, common lisp, scheme
The Scheme Programming Language, R. Kent Dybvig
3.3 Continuations
5.5 Continuations
http://www.scheme.com/tspl3/
Scheme and the Art of Programming, Springer and Friedman
Chapter 16 Introduction to Continuations
Chapter 17 Using Continuations
- - - - - - - - - - - - -
> (6) any good readable references that explain it lucidly ?
1. Programming Languages: Application and Interpretation, Shriram
Krishnamurthi
Part VII Continuations
http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/plai-2007-04-26.pdf
2. Essentials of Programming Languages, Friedman, Wand and Haynes
Chapter 7 Continuation-Passing Interpreters
Chapter 8 Continuation-Passing Style
http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/plai-2007-04-26.pdf
3. Theories of Programming Languages, John C. Reynolds
5.7 Continuation Semantics [of imperative languages]
Chapter 12 Continuations in a Functional Language
http://www.cs.indiana.edu/eopl/
From the Bibliographic Notes of Chapter 5 Failure, Input-Output and
Continuations, Theories of Programming Languages, John C. Reynolds
"Most of the literature on continuations discusses the concept in the
setting of functional languages (where we will return to continuations in
Section 12.1). However, the properties of continuation semantics for
imperative languages are described, perhaps to excess, by Reynolds [1977]."
Reynolds [1977] Semantics of the Domain of Flow Diagrams
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <8IYOi.658994$p47.379449@bgtnsc04-news.ops.worldnet.att.net>]
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
` (11 preceding siblings ...)
[not found] ` <8IYOi.658994$p47.379449@bgtnsc04-news.ops.worldnet.att.net>
@ 2007-10-10 7:11 ` Dmitri Minaev
2007-10-10 10:49 ` David Kastrup
` (3 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: Dmitri Minaev @ 2007-10-10 7:11 UTC (permalink / raw)
To: gnuist006@gmail.com; +Cc: help-gnu-emacs
On 10/9/07, gnuist006@gmail.com <gnuist006@gmail.com> wrote:
> (6) any good readable references that explain it lucidly ?
One of my favourite is the 13th chapter of Teach Yourself Scheme in
Fixnum Days by Dorai Sitaram:
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
--
With best regards,
Dmitri Minaev
Russian history blog: http://minaev.blogspot.com
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
` (12 preceding siblings ...)
2007-10-10 7:11 ` Dmitri Minaev
@ 2007-10-10 10:49 ` David Kastrup
[not found] ` <85zlyrutux.fsf@lola.goethe.zz>
` (2 subsequent siblings)
16 siblings, 0 replies; 35+ messages in thread
From: David Kastrup @ 2007-10-10 10:49 UTC (permalink / raw)
To: help-gnu-emacs
gnuist006@gmail.com writes:
> Again I am depressed to encounter a fundamentally new concept that I
> was all along unheard of. Its not even in paul graham's book where i
> learnt part of Lisp. Its in Marc Feeley's video.
>
> Can anyone explain:
>
> (1) its origin
> (2) its syntax and semantics in emacs lisp, common lisp, scheme
> (3) Is it present in python and java ?
> (4) Its implementation in assembly. for example in the manner that
> pointer fundamentally arises from indirect addressing and nothing new.
> So how do you juggle PC to do it.
> (5) how does it compare to and superior to a function or subroutine
> call. how does it differ.
Basically, there is no difference to function/subroutine call. The
difference is just that there is no "call stack": the dynamic context
for a call is created on the heap and is garbage-collected when it is
no longer accessible. A continuation is just a reference to the state
of the current dynamic context. As long as a continuation remains
accessible, you can return to it as often as you like.
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <85zlyrutux.fsf@lola.goethe.zz>]
* Re: The fundamental concept of continuations
[not found] ` <85zlyrutux.fsf@lola.goethe.zz>
@ 2007-10-11 7:18 ` George Neuner
[not found] ` <rqhrg3d2thcqaip790k1eb6t8cdk2g8d8v@4ax.com>
1 sibling, 0 replies; 35+ messages in thread
From: George Neuner @ 2007-10-11 7:18 UTC (permalink / raw)
To: help-gnu-emacs
On Wed, 10 Oct 2007 12:49:58 +0200, David Kastrup <dak@gnu.org> wrote:
>gnuist006@gmail.com writes:
>
>> Again I am depressed to encounter a fundamentally new concept that I
>> was all along unheard of. Its not even in paul graham's book where i
>> learnt part of Lisp. Its in Marc Feeley's video.
>>
>> Can anyone explain:
>>
>> (1) its origin
>> (2) its syntax and semantics in emacs lisp, common lisp, scheme
>> (3) Is it present in python and java ?
>> (4) Its implementation in assembly. for example in the manner that
>> pointer fundamentally arises from indirect addressing and nothing new.
>> So how do you juggle PC to do it.
>> (5) how does it compare to and superior to a function or subroutine
>> call. how does it differ.
>
>Basically, there is no difference to function/subroutine call. The
>difference is just that there is no "call stack": the dynamic context
>for a call is created on the heap and is garbage-collected when it is
>no longer accessible. A continuation is just a reference to the state
>of the current dynamic context. As long as a continuation remains
>accessible, you can return to it as often as you like.
Yes and no. General continuations, as you describe, are not the only
form continuations take. Nor are they the most common form used. The
most common continuations are function calls and returns. Upward
one-shot continuations (exceptions or non-local returns) are the next
most common form used, even in Scheme.
Upward continuations can be stack implemented. On many CPU's, using
the hardware stack (where possible) is faster than using heap
allocated structures. For performance, some Scheme compilers go to
great lengths to identify upward continuations and nested functions
that can be stack implemented.
George
--
for email reply remove "/" from address
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <rqhrg3d2thcqaip790k1eb6t8cdk2g8d8v@4ax.com>]
* Re: The fundamental concept of continuations
[not found] ` <rqhrg3d2thcqaip790k1eb6t8cdk2g8d8v@4ax.com>
@ 2007-10-12 19:17 ` David Kastrup
[not found] ` <85lka8p2h4.fsf@lola.goethe.zz>
1 sibling, 0 replies; 35+ messages in thread
From: David Kastrup @ 2007-10-12 19:17 UTC (permalink / raw)
To: help-gnu-emacs
George Neuner <gneuner2/@/comcast.net> writes:
> Yes and no. General continuations, as you describe, are not the
> only form continuations take. Nor are they the most common form
> used. The most common continuations are function calls and returns.
> Upward one-shot continuations (exceptions or non-local returns) are
> the next most common form used, even in Scheme.
>
> Upward continuations can be stack implemented. On many CPU's, using
> the hardware stack (where possible) is faster than using heap
> allocated structures. For performance, some Scheme compilers go to
> great lengths to identify upward continuations and nested functions
> that can be stack implemented.
There is a Scheme implementation (I keep forgetting the name) which
actually does both: it actually uses the call stack but never returns,
and the garbage collection includes the stack.
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <85lka8p2h4.fsf@lola.goethe.zz>]
* Re: The fundamental concept of continuations
[not found] ` <85lka8p2h4.fsf@lola.goethe.zz>
@ 2007-10-13 3:11 ` Rob Warnock
2007-10-13 3:13 ` Paul Rubin
1 sibling, 0 replies; 35+ messages in thread
From: Rob Warnock @ 2007-10-13 3:11 UTC (permalink / raw)
To: help-gnu-emacs
David Kastrup <dak@gnu.org> wrote:
+---------------
| George Neuner <gneuner2/@/comcast.net> writes:
| > Upward continuations can be stack implemented. On many CPU's, using
| > the hardware stack (where possible) is faster than using heap
| > allocated structures. For performance, some Scheme compilers go to
| > great lengths to identify upward continuations and nested functions
| > that can be stack implemented.
|
| There is a Scheme implementation (I keep forgetting the name) which
| actually does both: it actually uses the call stack but never returns,
| and the garbage collection includes the stack.
+---------------
You're thinking of "Chicken Scheme":
http://www.call-with-current-continuation.org/
Chicken Scheme is actually using the C call stack *as* the heap[1],
and thus all its continuations are *heap*-allocated, and thus
not actually "stack-allocated" at all.
But that's not what George Neuner is talking about, as I read it,
but rather probably about such things as Kent Dybvig's PhD thesis:
http://www.cs.indiana.edu/~dyb/papers/3imp.pdf
"Three Implementation Models for Scheme"
R. Kent Dybvig, UNC Chapel Hill, 1987 (thesis) (190pp)
...
Chapter 4: The Stack-Based Model
...
Early Scheme implementors believed that because of the need to
support first class functions, the standard techniques used for
block-structured languages were not suitable for Scheme. The
need to optimize tail calls and support continuations further
convinced early implementors that the standard stack techniques
were unsuitable. However, as this chapter will show, these
techniques can be made to work for Scheme with a few modications.
The resulting implementation model allows most function calls to
be performed with little or no allocation, and allows variable
references to be performed in one or two memory references.
Heap allocation remains necessary to support closures, assigned
variables, and continuations. Since function calls and variable
references are faster and heap allocation is limited, the running
time for most programs is greatly decreased.
...
-Rob
[1] As suggested in:
http://home.pipeline.com/~hbaker1/CheneyMTA.html
"CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A"
Henry G. Baker (1994)
-----
Rob Warnock <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] ` <85lka8p2h4.fsf@lola.goethe.zz>
2007-10-13 3:11 ` Rob Warnock
@ 2007-10-13 3:13 ` Paul Rubin
1 sibling, 0 replies; 35+ messages in thread
From: Paul Rubin @ 2007-10-13 3:13 UTC (permalink / raw)
To: help-gnu-emacs
David Kastrup <dak@gnu.org> writes:
> There is a Scheme implementation (I keep forgetting the name) which
> actually does both: it actually uses the call stack but never returns,
> and the garbage collection includes the stack.
That would be Chicken Scheme.
http://en.wikipedia.org/wiki/Chicken_(Scheme_implementation)
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <1191931524.047907.98040@v3g2000hsg.googlegroups.com>]
[parent not found: <see-36543E.18592809102007@lust.ihug.co.nz>]
* Re: The fundamental concept of continuations
[not found] ` <see-36543E.18592809102007@lust.ihug.co.nz>
@ 2007-10-09 6:24 ` gnuist006
[not found] ` <1191911045.604596.50110@19g2000hsx.googlegroups.com>
2007-10-14 22:56 ` Lawrence D'Oliveiro
2 siblings, 0 replies; 35+ messages in thread
From: gnuist006 @ 2007-10-09 6:24 UTC (permalink / raw)
To: help-gnu-emacs
On Oct 8, 10:59 pm, Barb Knox <s...@sig.below> wrote:
>
> Lambda calculus. Instead of function A returning to its caller, the
> caller provides an additional argument (the "continuation") which is a
> function B to be called by A with A's result(s). In pure "continuation
> style" coding, nothing ever "returns" a result.
>
> It is easy to mechanically transform normal function-style lambda
> calculus into continuation-style, but the reverse is not so.
>
Explanation and reference please
>
> You can have a "spaghetti stack", or keep continuation data-structures
> in the heap.
A picture, diagram? a picture is worth a thousand words
^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <1191911045.604596.50110@19g2000hsx.googlegroups.com>]
* Re: The fundamental concept of continuations
[not found] ` <1191911045.604596.50110@19g2000hsx.googlegroups.com>
@ 2007-10-09 13:21 ` Joel J. Adamson
0 siblings, 0 replies; 35+ messages in thread
From: Joel J. Adamson @ 2007-10-09 13:21 UTC (permalink / raw)
To: help-gnu-emacs
gnuist006@gmail.com writes:
> On Oct 8, 10:59 pm, Barb Knox <s...@sig.below> wrote:
>
>>
>> Lambda calculus. Instead of function A returning to its caller, the
>> caller provides an additional argument (the "continuation") which is a
>> function B to be called by A with A's result(s). In pure "continuation
>> style" coding, nothing ever "returns" a result.
>>
>> It is easy to mechanically transform normal function-style lambda
>> calculus into continuation-style, but the reverse is not so.
>>
>
> Explanation and reference please
Read R5RS or R6RS, the passage on call-with-current-continuation is similar in both
texts ( http://www.r6rs.org/final/html/r6rs/r6rs.html ).
For lambda calculus, look it up on Wikipedia. Alonzo Church is the
name you're looking for.
Joel
--
Joel J. Adamson
Biostatistician
Pediatric Psychopharmacology Research Unit
Massachusetts General Hospital
Boston, MA 02114
(617) 643-1432
(303) 880-3109
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
[not found] ` <see-36543E.18592809102007@lust.ihug.co.nz>
2007-10-09 6:24 ` gnuist006
[not found] ` <1191911045.604596.50110@19g2000hsx.googlegroups.com>
@ 2007-10-14 22:56 ` Lawrence D'Oliveiro
2007-10-15 4:17 ` George Neuner
2 siblings, 1 reply; 35+ messages in thread
From: Lawrence D'Oliveiro @ 2007-10-14 22:56 UTC (permalink / raw)
To: help-gnu-emacs
In message <see-36543E.18592809102007@lust.ihug.co.nz>, Barb Knox wrote:
> Instead of function A returning to its caller, the
> caller provides an additional argument (the "continuation") which is a
> function B to be called by A with A's result(s).
That's just a callback. I've been doing that in C code (and other
similar-level languages) for years.
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: The fundamental concept of continuations
2007-10-14 22:56 ` Lawrence D'Oliveiro
@ 2007-10-15 4:17 ` George Neuner
0 siblings, 0 replies; 35+ messages in thread
From: George Neuner @ 2007-10-15 4:17 UTC (permalink / raw)
To: help-gnu-emacs
On Mon, 15 Oct 2007 11:56:39 +1300, Lawrence D'Oliveiro
<ldo@geek-central.gen.new_zealand> wrote:
>In message <see-36543E.18592809102007@lust.ihug.co.nz>, Barb Knox wrote:
>
>> Instead of function A returning to its caller, the
>> caller provides an additional argument (the "continuation") which is a
>> function B to be called by A with A's result(s).
>
>That's just a callback. I've been doing that in C code (and other
>similar-level languages) for years.
Callbacks are a form of continuation. However, general continuations
such as those in Scheme, carry with them their execution context.
This allows them to used directly for things like user-space
threading.
George
--
for email reply remove "/" from address
^ permalink raw reply [flat|nested] 35+ messages in thread