[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MIT-Scheme-devel] R7RS and values.
From: |
Taylor R Campbell |
Subject: |
Re: [MIT-Scheme-devel] R7RS and values. |
Date: |
Thu, 3 Nov 2016 18:36:24 +0000 |
Date: Thu, 3 Nov 2016 11:28:18 -0700
From: Matt Birkholz <address@hidden>
> From: Taylor R Campbell <address@hidden>
> 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)))
address@hidden example
+
+With the above definitions, a form like
+
address@hidden
+(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) ...)).
- Re: [MIT-Scheme-devel] R7RS and values., Matt Birkholz, 2016/11/02
- Re: [MIT-Scheme-devel] R7RS and values., Taylor R Campbell, 2016/11/02
- Re: [MIT-Scheme-devel] R7RS and values., Taylor R Campbell, 2016/11/02
- Re: [MIT-Scheme-devel] R7RS and values., Matt Birkholz, 2016/11/03
- Re: [MIT-Scheme-devel] R7RS and values., Taylor R Campbell, 2016/11/03
- Re: [MIT-Scheme-devel] R7RS and values., Matt Birkholz, 2016/11/03
- Re: [MIT-Scheme-devel] R7RS and values.,
Taylor R Campbell <=
- Re: [MIT-Scheme-devel] R7RS and values., Matt Birkholz, 2016/11/03
- Re: [MIT-Scheme-devel] R7RS and values., Taylor R Campbell, 2016/11/03
- Re: [MIT-Scheme-devel] R7RS and values., Matt Birkholz, 2016/11/03
- Re: [MIT-Scheme-devel] R7RS and values., Taylor R Campbell, 2016/11/03