Date: Thu, 3 Nov 2016 07:58:49 -0700
   From: Matt Birkholz <m...@birchwood-abbey.net>
   
   > From: Taylor R Campbell <campb...@mumble.net>
   > Date: Thu, 3 Nov 2016 00:16:21 +0000
   > 
   > Why are you deleting expansions in SF that are already deleted from
   > the source code?
   
   I delete SF expansions in the host.  Deleting them from the source
   code only removes them from the cross-compiler.
   
   I delete them in the host so that it will generate a cross compiler
   compatible with the new runtime (in which VALUES is a procedure).
   
So I see.  See follow-up, message-id
<20161103004239.1598a60...@jupiter.mumble.net>.
   
   > One possibility is that the integrations you removed for
   > 
   > (receive (x y z) (values a b c)
   >   ...)
   > 
   > caused some hot spot to go from moving variables around on the stack
   > to allocating objects in the heap.
   
   The old implementation of values creates a closure, on the heap.  What
   variables move around on the stack?
   
   I didn't think LIAR knew anything about whacky continuations.  Even if
   it did, it wouldn't know the arity of the current continuation until
   runtime, so it couldn't be generating code to magic the stack.

LIAR didn't, but SF did.  It would transform

(receive (x y z) (values a b c)
  ...)

into

(let ((x a) (y b) (z c))
  ...)

and thereby avoid the closure altogether.  That's what the integration
you're deleting did.

_______________________________________________
MIT-Scheme-devel mailing list
MIT-Scheme-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/mit-scheme-devel

Reply via email to