Skip to content

Commit a34b825

Browse files
committed
updated the issue overview with some notes
1 parent 7077079 commit a34b825

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ifeq ($(UNAME),Darwin)
1010
endif
1111
BUILD = $(BUILDDIR)/$(PRESET)
1212

13-
default: doc
13+
default: compile
1414

1515
doc:
1616
cd docs; $(MAKE)

docs/issues-overview.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ the respective issue):
1717
- fix: `initial_suspend() -> suspend_always` and constraint start
1818
- commment: rephrase to clarify it is resumed later
1919

20+
=> say it always suspend (steal wording from suspend_always) but don't nail down suspend_always + change op_state.start(): calls handle.resume() on an execution agent associated with SCHED(prom)
21+
22+
- we may want to require that the awaiter operations are not potentially throwing/noexcept
23+
2024
## Initial resume shouldn't reschedule
2125

2226
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#task-should-not-unconditionally-reschedule-when-control-enters-the-coroutine)
@@ -27,6 +31,13 @@ the respective issue):
2731
- fix: constrain `start(rcvr)` to be called on `get_scheduler(get_env(rcvr))` instead
2832
- comment: the description from `initial_suspend()` merely lays out what needs to hold => that's OK
2933

34+
=> Change op_state.start() to handle.resume() on the correct execution agent.
35+
36+
- this change isn't really task but could be a different paper
37+
- we are not saying anything about schedule - we just say where we aer executing
38+
- maybe add a recommended practice about task constructed from task
39+
- co_await on a task should never call schedule
40+
3041
## Shouldn't reschedule after `co_await`ing task
3142

3243
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#task-awaiting-another-task-should-not-reschedule-on-resumption)
@@ -35,6 +46,21 @@ the respective issue):
3546
- fix: specify a custom `affine_on` for `task` and arrange for various things
3647
- comment: how can a user tell what exactly happened? the `co_await`ing `task` and the `co_await`ed task are from the implementation
3748

49+
=> define affine_on such that it start on the receiver's get_scheduler
50+
- LB: I'm imagining
51+
- it turns out that task doen't have any default parameters!
52+
- inline_scheduler should have a customization of affine_on and we drop the special case
53+
- affine_on on the task could be specialized via the task's domain: it just returns the task
54+
55+
- get_scheduler is where the operation is started
56+
- affine_on should just take one argument and use get_scheduler but that requires that start is called on get_scheduler's scheduler
57+
58+
[unrelated:
59+
- get_scheduler: where we got started
60+
- get_delegation_scheduler: where to start new work
61+
- get_completion_scheduler: where things complet
62+
]
63+
3864
## No symmetric transfer
3965

4066
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#task-coroutine-awaiting-another-task-does-not-use-symmetric-transfer)
@@ -62,6 +88,8 @@ the respective issue):
6288
- fix: say something specific
6389
- comment: we don't have the tools to say what implementations can do for known senders
6490

91+
=> get a continues_on p5-like paragraph which calls continues_on
92+
6593
## `affine_on` semantics unclear
6694

6795
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#affine_on-semantics-are-not-clear)
@@ -70,13 +98,18 @@ the respective issue):
7098
- fix: two versions
7199
- comment: I think I had the 2nd in mind
72100

101+
=> allow affine_on to complete inline regardless that's the difference to continues_on
102+
in addition it can be customized separately
103+
73104
## `affine_on` shape
74105

75106
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#affine_on-might-not-have-the-right-shape)
76107

77108
- `affine_on` should just depend on the receiver's `get_scheduler()`.
78109
- comment: agreed; that is design, though
79110

111+
=> starts on get_scheduler, complete on the passed scheduler (which may get dropped)
112+
80113
## `affine_on` schedule vs. stop token
81114

82115
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#affine_on-should-probably-not-forward-stop-requests-to-reschedule-operation)
@@ -86,6 +119,11 @@ the respective issue):
86119
- comment: in case of `set_stopped()` the coroutine doesn't resume; for `set_error(e)` other reasons may exist
87120
- comment: however, I don't object to this direction
88121

122+
=> this requirement needs to align with what continues_on does
123+
- the actual conclusion is: affine_on may need to do what continues_on does
124+
- unless continues_on's schedule operation should also not be cancelable
125+
- alternatively we could call continues_on with an adapted scheduler
126+
89127
## `affine_on` vs. other algorithms
90128

91129
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#we-should-probably-define-customsiations-for-affine_on-for-some-other-senders)
@@ -118,6 +156,10 @@ the respective issue):
118156
- fix: use type-erased allocator in that case like generator
119157
- comment: that's an oversight; I didn't realize generator does that
120158

159+
=> write up the pros and cons
160+
- we could construct environment with the allocator so the user can choose which allocator to use
161+
- use the coroutine_traits to determine the promise_type based on the allocator?
162+
121163
## allocator_arg more permissive
122164

123165
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#handling-of-allocator_arg-is-more-permissive-than-for-stdgenerator)
@@ -127,6 +169,8 @@ the respective issue):
127169
- fix: should generator be generalized?
128170
- comment: yes but not for C++26
129171

172+
=> coroutines can forward - write design discussion
173+
130174
## hiding parent's allocator
131175

132176
[LB](https://github.com/lewissbaker/papers/blob/master/isocpp/task-issues.org#minor-task-environments-allocator_type-overrides-the-parent-environments-get_allocator)

examples/issue-frame-allocator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ template <typename Env>
1313
ex::task<int, Env> test(int i, auto&&...) {
1414
co_return co_await ex::just(i);
1515
}
16-
17-
int main() {
1816
struct default_env {};
1917
struct allocator_env {
2018
using allocator_type = std::pmr::polymorphic_allocator<>;
2119
};
20+
21+
int main() {
2222
ex::sync_wait(test<default_env>(17)); // OK: no allocator
2323
ex::sync_wait(test<default_env>(17, std::allocator_arg, std::allocator<int>())); // OK: allocator is convertible
2424
// ex::sync_wait(test<default_env>(17, std::allocator_arg, std::pmr::polymorphic_allocator<>())); // error

examples/issue-symmetric-transfer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ int main() {
2020
struct inline_env {
2121
using scheduler_type = ex::inline_scheduler;
2222
};
23+
[[maybe_unused]] inline_env ev{};
2324
ex::sync_wait(test<affine_env>()); // OK
2425
// ex::sync_wait(test<inline_env>()); // error: stack overflow
2526
}

0 commit comments

Comments
 (0)