>
> I can give you several examples where such logic is used in Amphp
libraries, and it will break if they are invoked within an async block.
>
Got it, it looks like I misunderstood the post due to my focus. So,
essentially, you're talking not so much about wait_all itself, but rather
about the parent-child vs. free model.
This question is what concerns me the most right now.
If you have real examples of how this can cause problems, I would really
appreciate it if you could share them. Code is the best criterion of truth.
>
> You misunderstand:
>
Yes, I misunderstood. It would be interesting to see the code with the
destructor to analyze this approach better.
*Let me summarize the current state for today:*
1.
I am abandoning startScheduler and the idea of preserving backward
compatibility with await_all or anything else in that category. The
scheduler will be initialized implicitly, and this does not concern
user-land. Consequently, the spawn function() code will work everywhere
and always.
2.
I will not base the implementation on Fiber (perhaps only on the
low-level part). Instead of Fiber, there will be a separate class. There
will be no changes to Fiber at all. This decision follows the principle
of Win32 COM/DCOM: old interfaces should never be changed. If an old
interface needs modification, it should be given a new name. This should
have been done from the start.
3.
I am abandoning low-level objects in PHP-land (FiberHandle, SocketHandle
etc). Over time, no one has voted for them, which means they are
unnecessary. There might be a low-level interface for compatibility with
Revolt.
4.
It might be worth restricting microtasks in PHP-land and keeping them
only for C code. This would simplify the interface, but we need to ensure
that it doesn’t cause any issues.
The remaining question on the agenda: deciding which model to choose —
*parent-child* or the *Go-style model*.
Thanks
---
Ed