or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing
xxxxxxxxxx
Goal planning for 2024
Attendance: TC, tmandry, eholk, Vincenzo, CE
Minutes: TC
Roadmap pre-planning
poll_next
vsasync fn next
AsyncFnOnce
,AsyncFnMut
,AsyncFn
, etc.impl IntoFuture for {Vec, Array, Tuple}
Project board:
https://github.com/orgs/rust-lang/projects/28
Recent blog post from boats:
https://without.boats/blog/a-four-year-plan/
High-level goals
Big questions
AsyncIterator
orasync Iterator
"Discussion
tmandry: The main priorities, to me, are:
There are probably open questions around those.
Async closures
eholk: What are the questions on async closures?
CE: We need first class support to handle lifetime issues so the futures can borrow from the state of the closure.
eholk: Remind me, where is this most needed?
CE: Anytime that you want to use something like an
AsyncFnMut
, you can't really express that.tmandry: The main motivation for me is that
AsyncFn
allows us to iterate on new async APIs.tmandry: In
moro
, e.g., we box everything since we don't have async closures.eholk: In terms of effect generics, there has been skepticism that we can sprinkle
async
in all of the places that work with sync code. Having the ability to iterate on this would help build confidence.TC: What are the next steps to getting this done. Is it implementation, an RFC, etc.?
CE: It's mostly implementation. We'll write an RFC that articulates what the implementation does.
CE: There is semantic ambiguity on e.g.
impl Fn() -> impl Trait
. We shouldn't block on this.CE: There are some places where we accept variations here, but they're wrong, because in argument position these should be higher ranked.
TC: Where do we think this falls in terms of timeline?
CE: I'm hoping for something early next year. But we'll see. Niko is interested in this as well. It may even become part of my day job goals.
Asynchronous
for
syntaxTC: We might want to discuss the syntax here. People have already raised concerns about switching
await
to a prefix keyword for this case.CE:
I don't think postfix
.await
is compelling for the same reasons.await
makes sense and is compelling in expression position. Consider:I don't think this is well-formed:
VP: This idea was discussed before? Or we discussed why it is not possible to do this?:
eholk: In Rust, there is the intro form and the elimination form.
TC: The point about adding and removing in patterns seems compelling. Followintg that logic, we would have, e.g.:
CE: The async case is a bit different because of the arbitrary control flow.
TC: Deref patterns raise this same concern. We talked about these a bit yesterday with respect to changes to match ergonomics.
eholk:
async
in match patterns seems absurd… where do the side effects go?CE: Matching needs to be pure. We shouldn't block on this question though. It's straightforward to change the syntax later during the experiment.
eholk: Consider:
TC: So even if we never did
async
in patterns for all of these good reasons, what do we think aboutfor async
vsfor await
on the strength of the conceptual parallel that eholk raised?eholk: All suspend points have an
await
keyword currently.for await
preserves this, butfor await
does not.TC: The nice thing, aside from the analogies that we discussed above, about
for async
is that we would preserve the prefixedness ofasync
and the postfixedness ofawait
.Consensus: This needs further discussion and experimentation.
poll_progress
TC: What do we think about
poll_progress
?tmandry: We have to solve this problem somehow. I'm concerned about it complicating the desugaring though.
CE: Who cares if the desugaring is complicated?
tmandry: I care about it for code size reasons.
CE: It's not significant. The
IntoFuture
question has larger concerns there.TC: There may in fact be value in pushing
poll_progress
all the way back toFuture
. The actual problem here is withFuturesUnordered
and other pseudo-executors rather than withBuffered
. Any time you take an element from theFuturesUnordered
stream and do something with it you starve all of the remaining futures inFuturesUnordered
and there's no way to not starve them unless you're ready to take another element.TC: If you were willing to have an arbitrary sized buffer, you could "solve" this, but then you would remove all backpressure. This is that tension between liveness and backpressure again.
TC: While this could be handled at the level of each of the pseudo-executors, pushing this all the way back to
Future
makes this more composable. Then you can put aBufferedFuture
into the pseudo-executor. I have a prototype almost done of this.TC: One thing I noticed in the prototype is that you do end up duplicating a lot of logic between
poll_next
andpoll_progress
.CE: Right, because, you can't expect that when
poll_progress
returnsReady
that you can callpoll_next
andunwrap
the result.TC: Exactly. So we should think about the semantics of
poll_progress
and whether stronger guarantees might make more sense.tmandry: We almost want something like
spawn_local
, but that doesn't work on embedded. Is there a way to have a stack-local mini-executor?eholk: It doesn't change the syntax or main semantics. Maybe we could handle this later.
CE: I wouldn't want to stabilize
AsyncIterator
/for await
without fully considerting this question. While we could have a default implementation, people would start to rely on the behavior.CE: We should at least actively consent to deferring it, if we did that, rather than passively doing it.
TC: There are two open issues that are pending on us:
"Tracking Issue for
Ready::into_inner()
" rust#101196Link: https://github.com/rust-lang/rust/issues/101196
tmandry: It would be the only
into_inner
method that should panic.TC: This gets into the name. Maybe it should be named
unwrap
.eholk: My concern with this overall is that this breaks the futures abstraction.
CE: There are a lot of methods that poke through the thing when you know what the thing is.
CE: The argument maybe is whether it's a useful API.
eholk: That makes sense. And it is useful, as people pointed out in the thread.
TC: What about the name?
CE: dtolnay did address this in his comment. His point was that panicking is a property of the future.
TC: I'd probably just ask the question the other way around. If we had called this
unwrap
, what would be the argument against that?Consensus: We need to discuss this further.
"Add LocalWaker support" libs-team#191
Link: https://github.com/rust-lang/libs-team/issues/191
Zulip thread: https://rust-lang.zulipchat.com/#narrow/stream/187312-wg-async/topic/API-Change-Proposal.3A.20Local.20wakers
(Discussion…)
Consensus: We have no concerns about experimentation here, but we want to ask that this be nominated for us as it approaches stabilization.
Tracking Issue for
task::Waker::noop
- #98286Link: https://github.com/rust-lang/rust/issues/98286
TC: It looks like I nominated this in the context of #101196.
eholk: I really want this for tests. But there's some danger of people misusing it.
TC: People could misuse it today. It's easy enough to write. E.g.:
(The meeting ended here.)