digitalmars.D - Continuations in D?
- Ian Clarke (8/8) Feb 19 2006 Does D support continuations? I anticipate that continuations will beco...
- nick (4/15) Feb 19 2006 I think the response you are going to hear is "look for it in D2.0". At
- nick (4/15) Feb 19 2006 Sorry, getting late. I should clarify that a bit. The aim is to release
- ian locut.us (4/7) Feb 21 2006 I understand, can this suggestion be added to the to-do list for D2.0? ...
- Unknown W. Brackets (4/15) Feb 20 2006 Please forgive my ignorance; what is a continuation or where can I read
- David Medlock (40/58) Feb 20 2006 To my knowledge of them, they are an alternate form of writing code.
- David Medlock (6/7) Feb 20 2006 As a quick follow up, the D foreach syntax is a CPS construct. The code...
- Remy Moueza (3/3) Feb 20 2006 I thought it was possible to simulate continuations with a smart use of ...
- David Medlock (6/11) Feb 20 2006 http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
- David Medlock (2/17) Feb 20 2006 Oops jumped ahead of myself. Disreguard, no setjmp in that link.
- ian locut.us (32/34) Feb 21 2006 Continuations can be quite confusing, depending on how they are explaine...
- Brad Anderson (13/16) Feb 22 2006 I would have to agree. I'd been hoping Walter would see the thread on
- Brad Anderson (5/6) Feb 22 2006 and following one of the links from the above page, this was great for C...
- pragma (18/24) Feb 22 2006 I'd love to see something like that get off the ground, especially for
Does D support continuations? I anticipate that continuations will become increasingly important as people seek ways to retain the simplicity of a threaded architecture while avoiding the overhead of actual threads. If D could support this language feature, I think it would make D very appealing for a whole variety of applications. Ian.
Feb 19 2006
Ian Clarke wrote:Does D support continuations? I anticipate that continuations will become increasingly important as people seek ways to retain the simplicity of a threaded architecture while avoiding the overhead of actual threads. If D could support this language feature, I think it would make D very appealing for a whole variety of applications. Ian.I think the response you are going to hear is "look for it in D2.0". At this point the concentration is on creating a D1.0. Nick.
Feb 19 2006
Ian Clarke wrote:Does D support continuations? I anticipate that continuations will become increasingly important as people seek ways to retain the simplicity of a threaded architecture while avoiding the overhead of actual threads. If D could support this language feature, I think it would make D very appealing for a whole variety of applications. Ian.Sorry, getting late. I should clarify that a bit. The aim is to release D1.0 sometime in the foreseeable future, so most feature suggestions are being targeted at D2.0.
Feb 19 2006
In article <dtbs79$15en$1 digitaldaemon.com>, nick says...Sorry, getting late. I should clarify that a bit. The aim is to release D1.0 sometime in the foreseeable future, so most feature suggestions are being targeted at D2.0.I understand, can this suggestion be added to the to-do list for D2.0? I think it would be a valuable addition to the language. Ian.
Feb 21 2006
Please forgive my ignorance; what is a continuation or where can I read about it? Thanks, -[Unknown]Does D support continuations? I anticipate that continuations will become increasingly important as people seek ways to retain the simplicity of a threaded architecture while avoiding the overhead of actual threads. If D could support this language feature, I think it would make D very appealing for a whole variety of applications. Ian.
Feb 20 2006
Unknown W. Brackets wrote:Please forgive my ignorance; what is a continuation or where can I read about it? Thanks, -[Unknown]To my knowledge of them, they are an alternate form of writing code. Consider a function which returns an integer: int foo() { return 1; } Now suppose you wanted to return multiple integers: int foo() { return 2; return 3; return 4; } // doesnt work to do this requires an inversion of control, the called function will call you back with the values: void foo( void delegate( int ) yield ) { yield( 2 ); yield( 3 ); yield( 4 ); } This is commonly known as continuation passing style or CPS. In this style the function passed to a function represents the 'rest of the program'. In this way the function can complete the program more than one, hence a continuation of the current program. Converting the code to this form allows you to use pieces of code in various ways. Consider try/catch. try { calc1(); calc2(); } catch( ... ) { ..various fail code... } Using this you can see the conversion of this to CPS form: void failure_code() { ..various fail code... } void try_function( void delegate() failure ) { if ( calc1 == FAIL ) failure(); else if ( calc2 == FAIL ) failure(); } try_function( &failure_code ) Inner functions in D make this style of code very workable. PS. Note that with an appropriate return value from failure() you can signify that the failed calculation be retried! This is a simplification but if you google there are several good papers on them. -DavidMDoes D support continuations? I anticipate that continuations will become increasingly important as people seek ways to retain the simplicity of a threaded architecture while avoiding the overhead of actual threads. If D could support this language feature, I think it would make D very appealing for a whole variety of applications. Ian.
Feb 20 2006
David Medlock wrote: <snip>-DavidMAs a quick follow up, the D foreach syntax is a CPS construct. The code within the braces below the foreach *is* a continuation. That is why the opApply accepts a delegate. -DavidM
Feb 20 2006
I thought it was possible to simulate continuations with a smart use of C's setjump and longjump though I never tried to implement any. Has anyone had a similar idea ?
Feb 20 2006
Remy Moueza wrote:I thought it was possible to simulate continuations with a smart use of C's setjump and longjump though I never tried to implement any. Has anyone had a similar idea ?http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html This method seems much less flexible than true continuations, which depict differing branches of the program which can be executed multiple times. -DavidM
Feb 20 2006
David Medlock wrote:Remy Moueza wrote:Oops jumped ahead of myself. Disreguard, no setjmp in that link.I thought it was possible to simulate continuations with a smart use of C's setjump and longjump though I never tried to implement any. Has anyone had a similar idea ?http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html This method seems much less flexible than true continuations, which depict differing branches of the program which can be executed multiple times. -DavidM
Feb 20 2006
In article <dtclr2$1vgq$1 digitaldaemon.com>, Unknown W. Brackets says...Please forgive my ignorance; what is a continuation or where can I read about it?Continuations can be quite confusing, depending on how they are explained. The "correct" explanation is quite difficult to understand. A simpler way is to think of a continuation as a frozen thread, although typically they use far fewer resources than an actual frozen thread. It allows you to program in a very "thread heavy" way, but without the overhead that would typically imply. Continuations are useful in situations where you might otherwise use a lot of threads, but where those threads spend most of their time waiting for things to happen. Many networked applications fall into this category, indeed, what initially got me interested in continuations was my work on P2P architectures. The alternative to continuations is to use an event-based, or callback-based architecture, but this can quickly degenerate into spaghetti code (been there, done that). Continuations are present in some of the more academic languages, including Scheme, and some dialects of ML. Ruby also has them, as does Stackless Python. They can also be simulated in C using some rather scary low-level hacking (someone else alluded to this in this thread), but that isn't for the faint of heart, nor is it cross-platform. There are also some kludges to achieve continuations in Java, but they aren't very pretty or efficient. Support for continuations in D would make it a prime candidate for anyone interested in implementing network-based stuff in an efficient language, especially P2P stuff. Ian.
Feb 21 2006
ian locut.us wrote:Support for continuations in D would make it a prime candidate for anyone interested in implementing network-based stuff in an efficient language, especially P2P stuff.I would have to agree. I'd been hoping Walter would see the thread on true closures and see the tie-in with continuations. Good stuff here: http://en.wikipedia.org/wiki/Continuation I see gracefully handling the "back" button and maintaining appropriate state in web-based applications as a big use of continuations in the future, so I'm hoping Walter can help and/or Pragma can hack something for DSP. There's a ton of applications for appropriately representing data along a workflow with continuations. So, the closures / first-class functions discussions interest me very much, and continuations is a prime example of uses for those features in the language. BA
Feb 22 2006
Brad Anderson wrote:Good stuff here: http://en.wikipedia.org/wiki/Continuationand following one of the links from the above page, this was great for C programmers: http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons BA
Feb 22 2006
In article <dthuue$297c$1 digitaldaemon.com>, Brad Anderson says...Brad Anderson wrote:I'd love to see something like that get off the ground, especially for web-programming. From what I understand, a true continuation needs to be context-switchable which is to say it can save/restore register and stack info. Win32 Fibers already provide nuts and bolts for this capability, and I think unix/linux has an analgoue of the same. So a wrapper using what the OS provides, for something like this, could be hashed up without too much fuss. It might also be possible to concoct something in D, that uses some ASM to handle saving and restoring the stack state. You'd almost want this solution as it would invariably involve less kernel time and could lend itself to tighter resource management (key for scalable web apps that could have more than one such continuation per user session). With all of the above approaches, you still won't have a syntax as elegant as what Python has. D would need a 'yield' statement and/or something that flags a function/delegate as having its own discrete stack space. As for hacking it into DSP, it's more a factor of "when we get there" than anything else. :) - Eric Anderton at yahooGood stuff here: http://en.wikipedia.org/wiki/Continuationand following one of the links from the above page, this was great for C programmers: http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons BA
Feb 22 2006