Re: PHP True Async RFC Stage 4

From: Date: Tue, 14 Oct 2025 16:19:32 +0000
Subject: Re: PHP True Async RFC Stage 4
References: 1 2 3 4 5 6 7 8 9 10 11  Groups: php.internals 
Request: Send a blank email to internals+get-128838@lists.php.net to get a copy of this message
> It's vastly improved from the first version back in the spring, but there are still > numerous footguns Which specific footguns? $scope var? > Mainly, we should not be allowing anything but structured If you always follow the “nursery” rules, you always have to define a coroutine just to create a nursery, even when the coroutine itself isn’t actually needed. That’s why we end up with hacks like “Task.detached.” (*Swift*). And *Kotlin* keeps trying to invent workarounds. **TrueAsync RFC** takes a different approach and gives the programmer maximum flexibility while still complying with every principle of structured concurrency. At the same time, the programmer gains two styles of structured concurrency organization, one of which fully matches Trio. > I very much want to see it evolve further in that direction before a vote is called and > we're locked into a system with so many foot guns built in. Such an approach would require more changes to the code, and I don’t see how it would protect the programmer from mistakes any better than this RFC does. Of course, the with-style syntax would allow for maximum safety when working with tasks, but that’s not an issue with this RFC. The **Trio** model is not perfect; Kotlin and other languages do not adopt it (maybe by accident — or maybe not). It’s not suitable for all types of tasks, which is why the criticism is valid. Although Kotlin is criticized for storing Scope inside objects like: “Long-living CoroutineScope stored in objects almost always lead to resource leaks or forgotten jobs.” However, there is no other way to solve the problem when coroutines need to be launched within a Scope gradually rather than all at once. But... Ok... ```python async def background_manager(): async with trio.open_nursery() as nursery: while True: event = await get_next_event() nursery.start_soon(handle_event, event) ``` ^^^ The example of how the pursuit of an “ideal” ends up producing ugly code. My position is this: **TrueAsync** should support the best patterns for specific use cases while still remaining convenient for the majority of tasks. The fact that certain tools require careful handling applies to all programming languages. That doesn’t mean those tools shouldn’t exist.

« previous php.internals (#128838) next »