Re: PHP True Async RFC Stage 4
| From: | Edmond Dantes | Date: | Tue, 21 Oct 2025 17:11:42 +0000 |
| Subject: | Re: PHP True Async RFC Stage 4 | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-128886@lists.php.net to get a copy of this message | ||
Hi
> Awaitables should always represent a single value. Awaiting multiple times should never result
> in a different value.
Where did this rule come from?
In programming languages (except Rust), there is no explicit
restriction on the behavior of the await operation, nor a specific
requirement that it must always return the same value. However, from a
usability perspective, such a rule would make the code simpler. But...
On the other hand, if we restrict the behavior of await, we fail to
cover the full range of possible cases — and that’s also bad.
> AMPHP has a pipeline library,
> https://github.com/amphp/pipeline,
That’s not quite the same.
The general case of interacting with Awaitable objects looks like this:
```php
// Waiting for the first event from any object in the set.
// The objects in the set are of different types.
awaitAny(obj1, obj2, obj3); // or All ...
```
But, programming languages don’t always implement this **general
case**, and sometimes even try to avoid it altogether.
And working with a data stream is implemented differently through
await foreach.
There is another way to solve this problem (all Futures only) —
through a method that always returns a new Future. For example:
```php
// $queue->whenReady() returns Future object
awaitAll($future, $queue->whenReady());
```
Downside: each time we create a new object in memory, while the loop
still remains.
At the moment, I don’t see any compelling reason to impose artificial
restrictions on behavior.
* Future objects are a special case of Awaitable objects,
* while Awaitable objects represent the general case.
> I think you should consider additional time beyond only two more weeks for discussion of this
> RFC before bringing it to a vote.
> PHP 8.6 or 9 is some time away. This is definitely not an RFC to rush to voting.
I have no objections.
Thank you, Ed