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