On Jun 14, 7:40 pm, Fabrizio Giudici <fabrizio.giud...@tidalwave.it>
wrote:
> On 06/14/2011 02:11 PM, Kevin Wright wrote:
>
> > The current approach taken by Scala/C# is therefore reification of
> > *delimited* continuations to stop you blowing the stack.  This isn't
> > exactly an easy thing to get right, hence the fact that it's a fairly
> > recent arrival (the growing popularity of asynchronous designs, and
> > the usefulness of continuations for these have also helped spur adoption)
>
> Is this the part related to CPS and tail recursion, right? Not related
> to my post, but since I'm here, perhaps I can start understanding
> something around.
>
> So, if in my post I refer to my example as a very simple CPS, I sholdn't
> be bashed. By Kevin at least :-)

Hi Fabrizio :) I'm no expert in functional programming, but
nevertheless I have some understanding of continuations.
Code written in CPS has only function calls without return statements:
"returning" a value means calling a function (called a continuation).
So, in a naive implementation, the progress of the computation
eventually blows the stack. Tail call optimization or TCO (a
generalization of tail recursion) is a way to perform certain function
calls without consuming stack space, translating them into jumps.
Since luckily in code written in CPS all calls to continuations are
"in tail position" and thus eligible for TCO, that is a way to
implement CPS without using too much stack space.
Note however, to add some confusion ;), that user code is rarely
written in CPS in general; transformation to CPS is a technique used
in certain compilers, not necessarily to implement continuations (that
can be implemented with other techniques as well).

To return to your original example, I have not clear the effect of
calling doRetrieve() since it doesn't return anything and it doesn't
take any argument. Does it make the service invoke notifyDatum()? In
that case, yes, I'd say it's a form of CPS :) although I believe CPS
can hardly be called a pattern since it doesn't solve a specific
problem, it's too generic, in my opinion.

Cheers,
Alessio

-- 
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com.
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to