Date: Thu, 3 Nov 2016 11:28:18 -0700
   From: Matt Birkholz <m...@birchwood-abbey.net>
   
   > From: Taylor R Campbell <campb...@mumble.net>
   > Date: Thu, 3 Nov 2016 16:10:34 +0000
   > 
   > and thereby avoid the closure altogether.  That's what the integration
   > you're deleting did.
   
   I see.  You assume values is integrated into the producer and the
   producer into the call-with-values form, an assumption that may often
   hold true in hotspots.  Or are you saying you know this is the case in
   tests/check.scm, thus the poor showing there?

I'm hypothesizing that scenario.  I haven't confirmed it.

It would be worthwhile to confirm what the change in performance comes
from.  20% is a huge change -- bigger, perhaps, than I saw when fixing
the static branch prediction of every procedure body's interrupt
check.  Did anything other than paths involving CALL-WITH-VALUES and
VALUES change?
   
   I might be breaking things (again!).  While I've removed our
   restriction on VALUES (that it and only it return to CALL-WITH-
   VALUES), I have also removed an "extension" that allowed e.g. cleanup-
   noop-nodes to pass along multiple values as if they were one.  It was
   not a documented extension, yet losing it will break unwary code.
   Perhaps just a mention in the release notes?
   
It has long been a bug and it's why I introduced BEGIN0, so that we
could prepare code to do the right thing before making the right thing
the only thing that works.

I would strongly advise that you make multi-value returns to
single-value continuations report an error.  Otherwise, you are
quietly changing the semantics of who knows how many continuations.

   +(define-integrable (apply-values transmitter receiver)
   +  (transmitter receiver))
   +
   +(define-integrable (return-3 v0 v1 v2)
   +  (lambda (receiver)
   +    (receiver v0 v1 v2)))
   +@end example
   +
   +With the above definitions, a form like
   +
   +@example
   +(apply-values (lambda () (return-3 1 2 3))
   +              (lambda (a b c)
   +                (foo a b)
   +                c))

Extra lambda here, or missing parens in APPLY-VALUES.  Either you need

(define-integrable (apply-values transmitter receiver)
  ((transmitter) receiver))

or the example should be

(apply-values (return-3 1 2 3) (lambda (a b c) ...)).

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

Reply via email to