Re: PHP True Async RFC Stage 4

From: Date: Tue, 21 Oct 2025 15:08:55 +0000
Subject: Re: PHP True Async RFC Stage 4
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-128883@lists.php.net to get a copy of this message
> On Oct 21, 2025, at 9:56 AM, Edmond Dantes <edmond.ht@gmail.com> wrote:
> 
>> This seems a bit contradictory and confuses things. When I await(), do I need to do it in a
>> loop, or just once?
>> It might be a good idea to make a couple subtypes: Signal and Future. Coroutines become
>> Future that only await once, while Signal is something that can be awaited many times.
> 
> I made a mistake in my previous response, and it requires clarification.
> Classes that can be awaited multiple times are indeed possible.
> These include TimeInterval, Channel, FileSystemEvent, as
> well as
> I/O triggers.
> 
> All of these classes can be Awaitable.
> This is done to allow bulk waiting on objects, regardless of how they
> work internally.
> So this is meant for functions like awaitXX, although such behavior
> is also possible for the await() function itself:
> 
> ```php
> $timeInterval = new Async\TimeInterval(1000);
> while(true) {
>    await($timeInterval);
> }
> ```
> 
> As for objects of type Future, it’s clear that in future RFCs there
> will be a FutureInterface, which will be implemented by coroutines.

Hi Edmond,

I've been meaning to review your RFC and implementation for some time, but for various reasons,
I still haven't been able to give it a thorough read and review.

I noticed this portion of the discussion and wanted to drop a note now, rather than waiting until I
was able to read the entire RFC.

Awaitables should always represent a single value. Awaiting multiple times should never result in a
different value.

Async sets of values should use a different abstraction to represent a set. rxjs Observables
(rxjs.dev) are on example. AMPHP has a pipeline library, https://github.com/amphp/pipeline, which defines a
ConcurrentIterator interface. The latter IMO is more appropriate for PHP + fibers. I recommend
having a look at how Future and ConcurrentIterator are used within AMPHP libraries.

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.

Cheers,
Aaron Piotrowski


Thread (104 messages)

« previous php.internals (#128883) next »