all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* The fundamental concept of continuations
@ 2007-10-09  5:15 gnuist006
  0 siblings, 0 replies; 35+ messages in thread
From: gnuist006 @ 2007-10-09  5:15 UTC (permalink / raw)
  To: help-gnu-emacs

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.

Thanks a lot.

(6) any good readable references that explain it lucidly ?

^ 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 ` 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] ` <see-36543E.18592809102007@lust.ihug.co.nz>
                   ` (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

* 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

* 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

* 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

* Re: The fundamental concept of continuations
       [not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
                   ` (5 preceding siblings ...)
       [not found] ` <470b1b30$0$11022$4c368faf@roadrunner.com>
@ 2007-10-09  7:11 ` Peter Danenberg
  2007-10-09 12:05 ` Matthias Benkard
                   ` (9 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]   ` <1191911604.169846.244430@r29g2000hsg.googlegroups.com>
@ 2007-10-09  7:15     ` Bakul Shah
  0 siblings, 0 replies; 35+ messages in thread
From: Bakul Shah @ 2007-10-09  7:15 UTC (permalink / raw)
  To: help-gnu-emacs

gnuist006@gmail.com wrote:
> On Oct 8, 11:07 pm, Bakul Shah <use...@bitblocks.com> wrote:
	...
>> 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.

You will have to get it yourself or explain why this is an
impossibility for you.

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: The fundamental concept of continuations
       [not found]   ` <1191911662.983658.79540@g4g2000hsf.googlegroups.com>
@ 2007-10-09 10:00     ` Tim Bradshaw
       [not found]     ` <1191924032.449463.13290@22g2000hsm.googlegroups.com>
  1 sibling, 0 replies; 35+ messages in thread
From: Tim Bradshaw @ 2007-10-09 10:00 UTC (permalink / raw)
  To: help-gnu-emacs

On Oct 9, 7:34 am, gnuist...@gmail.com wrote:

> which lambda paper ?

Are you Ilias?  I think you probably are.

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: The fundamental concept of continuations
       [not found]     ` <1191924032.449463.13290@22g2000hsm.googlegroups.com>
@ 2007-10-09 10:13       ` Diez B. Roggisch
  0 siblings, 0 replies; 35+ messages in thread
From: Diez B. Roggisch @ 2007-10-09 10:13 UTC (permalink / raw)
  To: help-gnu-emacs

Tim Bradshaw wrote:

> On Oct 9, 7:34 am, gnuist...@gmail.com wrote:
> 
>> which lambda paper ?
> 
> Are you Ilias?  I think you probably are.

He certainly isn't, but you are right that he smells like he's been living
under a bridge for quite a time...

Diez

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: The fundamental concept of continuations
       [not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
                   ` (6 preceding siblings ...)
  2007-10-09  7:11 ` Peter Danenberg
@ 2007-10-09 12:05 ` Matthias Benkard
  2007-10-09 18:18 ` George Neuner
                   ` (8 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] ` <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]   ` <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] ` <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] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
                   ` (7 preceding siblings ...)
  2007-10-09 12:05 ` Matthias Benkard
@ 2007-10-09 18:18 ` George Neuner
       [not found] ` <m5ang3h11oorvsrkit4q1moi6mirofbdbr@4ax.com>
                   ` (7 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

* 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

* 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>
                   ` (9 preceding siblings ...)
       [not found] ` <m5ang3h11oorvsrkit4q1moi6mirofbdbr@4ax.com>
@ 2007-10-09 19:27 ` Jeff M.
  2007-10-10  4:39 ` Marlene Miller
                   ` (5 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]   ` <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
       [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

* 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

* Re: The fundamental concept of continuations
       [not found] <1191906949.179197.217470@57g2000hsv.googlegroups.com>
                   ` (10 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>
                   ` (4 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

* Re: The fundamental concept of continuations
       [not found] ` <8IYOi.658994$p47.379449@bgtnsc04-news.ops.worldnet.att.net>
@ 2007-10-10  4:46   ` Marlene Miller
  0 siblings, 0 replies; 35+ messages in thread
From: Marlene Miller @ 2007-10-10  4:46 UTC (permalink / raw)
  To: help-gnu-emacs

Corrected the links...

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 (2nd edition)
Friedman, Wand and Haynes
Chapter 7 Continuation-Passing Interpreters
Chapter 8 Continuation-Passing Style
http://www.cs.indiana.edu/eopl/

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.cmu.edu/~jcr/tpl.html

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: The fundamental concept of continuations
       [not found]       ` <ok5tt4-2ij.ln1@mantle.rutgers.edu>
@ 2007-10-10  4:52         ` Marlene Miller
  0 siblings, 0 replies; 35+ messages in thread
From: Marlene Miller @ 2007-10-10  4:52 UTC (permalink / raw)
  To: help-gnu-emacs

> 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

http://www.brics.dk/~hosc/vol11/contents.html

Definitional Interpreters for Higher-Order Programming Languages

Definitional Interpreters Revisited

^ 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 ...)
       [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
                   ` (2 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>
                   ` (13 preceding siblings ...)
  2007-10-10  7:11 ` Dmitri Minaev
@ 2007-10-10 10:49 ` David Kastrup
       [not found] ` <85zlyrutux.fsf@lola.goethe.zz>
       [not found] ` <1191931524.047907.98040@v3g2000hsg.googlegroups.com>
  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

* 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

* 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

* 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

* Re: The fundamental concept of continuations
       [not found] ` <1191931524.047907.98040@v3g2000hsg.googlegroups.com>
@ 2007-10-13 23:14   ` Alex Martelli
  0 siblings, 0 replies; 35+ messages in thread
From: Alex Martelli @ 2007-10-13 23:14 UTC (permalink / raw)
  To: help-gnu-emacs

Matthias Benkard <mulkiatsch@gmail.com> wrote:

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

Alive and well, but it has removed continuations (which were indeed in
early versions, as per the paper at
<http://www.stackless.com/spcpaper.htm>).


Alex

^ 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

end of thread, other threads:[~2007-10-15  4:17 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [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] ` <see-36543E.18592809102007@lust.ihug.co.nz>
2007-10-09  6:24   ` gnuist006
     [not found]   ` <1191911045.604596.50110@19g2000hsx.googlegroups.com>
2007-10-09 13:21     ` Joel J. Adamson
2007-10-14 22:56   ` Lawrence D'Oliveiro
2007-10-15  4:17     ` George Neuner
     [not found] ` <470b1aa6$0$79886$742ec2ed@news.sonic.net>
2007-10-09  6:33   ` gnuist006
     [not found]   ` <1191911604.169846.244430@r29g2000hsg.googlegroups.com>
2007-10-09  7:15     ` Bakul Shah
     [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 10:00     ` Tim Bradshaw
     [not found]     ` <1191924032.449463.13290@22g2000hsm.googlegroups.com>
2007-10-09 10:13       ` Diez B. Roggisch
2007-10-09 12:50   ` Matthias Blume
2007-10-09 13:50   ` josephoswald+gg@gmail.com
2007-10-09 19:20   ` gnuist006
     [not found]   ` <m2641g1mgn.fsf@my.address.elsewhere>
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>
2007-10-10  4:52         ` Marlene Miller
     [not found]   ` <1191957606.187050.272820@v3g2000hsg.googlegroups.com>
2007-10-09 20:32     ` .
2007-10-09  7:11 ` Peter Danenberg
2007-10-09 12:05 ` Matthias Benkard
2007-10-09 18:18 ` George Neuner
     [not found] ` <m5ang3h11oorvsrkit4q1moi6mirofbdbr@4ax.com>
2007-10-09 19:24   ` gnuist006
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>
2007-10-10  4:46   ` Marlene Miller
2007-10-10  7:11 ` Dmitri Minaev
2007-10-10 10:49 ` David Kastrup
     [not found] ` <85zlyrutux.fsf@lola.goethe.zz>
2007-10-11  7:18   ` George Neuner
     [not found]   ` <rqhrg3d2thcqaip790k1eb6t8cdk2g8d8v@4ax.com>
2007-10-12 19:17     ` David Kastrup
     [not found]     ` <85lka8p2h4.fsf@lola.goethe.zz>
2007-10-13  3:11       ` Rob Warnock
2007-10-13  3:13       ` Paul Rubin
     [not found] ` <1191931524.047907.98040@v3g2000hsg.googlegroups.com>
2007-10-13 23:14   ` Alex Martelli
2007-10-09  5:15 gnuist006

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.