[stack] Re: Barebone implementation of concatenative language in c or c++

"pml060912" <[email protected]> Fri, 23 Jul 2010 09:56:10 -0000
Newsgroups gmane.comp.lang.concatenative
Message-ID <[email protected]>
--- In [email protected], Don Groves <dgroves@...> wrote:
>
> >
> > .
> >>>> In a call-by-value environment, It seems to me that encapsulating
> >>>> all data in functions yields the same effect as call-by- 
> >>>> reference. If
> >>>> a parameter is not needed, its evaluating function will not be
> >>>> called.
> >>>
> >>> This gets confusing to me, so hold on tight... :-)
> >>>
> >>> In order to pass a function to a procedure, the function has to be
> >>> available as data. If it's not, you can't pass it.
> >>
> >> I don't understand this -- I do it all the time in my C code by using
> >> the
> >> address operator, &, and the same is easily done in Forth, et al.
> >
> > That's pretty much the same indirection approach I use in Furphy  
> > (see http://users.beagle.com.au/peterl/furphy.html), to achieve the  
> > same effect with a workaround even when what actually happens is  
> > done eagerly. I even describe it there with an analogy to what you  
> > are thinking of in C:-
> >
> > Conditional code is mostly achieved by IF and a complementary pair  
> > of things, freezing and thawing. This is a bit like using  
> > indirection in C to pass parameters by name instead of the default  
> > by value. The analogy here is that IF does eager evaluation, and  
> > freezing and thawing change the behaviour to lazy evaluation. IF has  
> > this behaviour, using Forth documenting standards: (  true/ 
> > false_flag  true_option  false_option  ---  result  ).
> >
> > FREEZE and THAW behave like an anonymous label (if that isn't a  
> > contradiction in terms - it really returns early and pushes a re- 
> > entry address to the stack) and a dynamic subroutine call, different  
> > from the Forth keyword EXECUTE that it resembles. Typically, you  
> > would put FREEZE at the beginning of each keyword that you might  
> > want to select with IF and then you would use THAW on whichever one  
> > got chosen, like this:-
> >
> > FREEZE TRUE_STUFF TRUE_OPTION
> >
> > FREEZE FALSE_STUFF FALSE_OPTION
> >
> > GET_FLAG TRUE_OPTION FALSE_OPTION IF THAW DEMO
> >
> > Later on I describe some syntactic sugar to make coding and using  
> > the indirection easier, too. P.M.Lawrence.
> 
> Thanks. Do you feel your approach is equivalent to lazy evaluation?

We had that discussion earlier, I think actually on this thread. I feel it works out like this:-

- From the program's point of view, it is equivalent to lazy evaluation, because the behaviour it delivers is the same.

- From the programmer's point of view, it is not, because he or she has to do something explicit to achieve it. Before the syntactic sugar, quite a bit is needed to get things like recursion and loops, but even though that cuts it down it still doesn't eliminate it.

Taking all in all, I decided to document it as "change the behaviour to lazy evaluation", not to call it lazy evaluation as such. P.M.Lawrence.