I think the point of 'begin0' is that it handles multiple values efficiently (ie, more so than a heap-allocated list). The expansion of 'begin0' would have to be something like

(call-with-values (lambda () e1)
  (lambda result (begin e2 (apply values result))))

since in general the number of values produced by e1 is not known at expansion time.

Ryan


On 04/29/2012 03:54 PM, Sam Tobin-Hochstadt wrote:
Presumably we could remove it from fully-expanded code and then the
compiler could re-transform this:

(let ([x e]) e0 ... x)

into some bytecode that uses begin0, which would simplify the job of
tools that process expanded code without changing performance.

On Sun, Apr 29, 2012 at 5:07 PM, Robby Findler
<[email protected]>  wrote:
We debated this long ago and I think the conclusion was that we could
get a little more performance by including it at the bytecode level
that seemed worth having (the precise details (like if we had a
program where that mattered) escape me).

Robby

On Sun, Apr 29, 2012 at 1:03 PM, Danny Yoo<[email protected]>  wrote:
One question that I had stowed away a long time ago: why is begin0
part of the language?  It seems redundant in the face of having 'let'
to capture a value that we want to return at the end of some sequence.
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

____________________
  Racket Users list:
  http://lists.racket-lang.org/users




____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to