[gambit-list] different set! behavior in interpreted and compiled code

vasil vasil.s.d at gmail.com
Sun Aug 30 11:08:32 EDT 2009


Marc Feeley wrote:
> In Scheme "The result of the `set!' expression is unspecified."  In the
> interpreter `set!' returns the #!void object, for which the REPL does
> not produce any output.  The compiler introduced a cell ("box" type) to
> store the value of t, and transformed (let ((t 0))... into (let ((t (box
> 0))... and (set! t q) into (set-box! t q).  And the set-box! procedure
> returns the box that was set, so that's what `set!' returns in compiled
> code.
> 
> I could change the implementation of set-box! so that it returns #!void,
> and then the result of the compiler and interpreter would be the same. 
> This will probably have a (very) small impact on performance.

Thanks for reply!

Do not bother with this, Marc.

I never use results from functions with unspecified result in my code.

Just suddenly found difference in behavior of compiled and interpreted
code, and that is why I asked the question.

Vasil





More information about the Gambit-list mailing list