I understand that this is a concurrent binding. I’m just not sure what the difference is in practice between “async let
is a concurrent binding” and “async let
transfers the async
effect from the call to the variable”.
Either way, this feature only makes sense to me as designed if it can be understood as the effects being transferred to the declaration. That’s a mental model I can grok, and something that I think is teachable. That suggests that the declaration should be async let
for non-throwing functions and async throws let
for throwing functions. (And it also suggests the existence of a throws let
which executes a throwing function but delays the throwing, and requires try
when used, i.e. a sugared Result
with the same semantics as this.)
If that mental model is wrong, then this feature is probably misnamed, and should be named something else, like future let
.