How the TrueAsync RFC evolved over time: The first version proposed a fairly low-level API for controlling the Scheduler, philosophically very close to AMPHP. It quickly became clear that this approach had many drawbacks, including issues with consistent PHP behavior.
The code was completely rewritten. Core changes became more significant. In the second version, the PHP execution flow was changed so that any code could be asynchronous. The second RFC version introduced structured concurrency, close to modern equivalents. At the same time, the garbage collector code was rewritten several times. One version went through code review, after which a simplified variant appeared. Today, Async GC exists in a lightweight form. The implementation code was modified and optimized according to approaches used in Swoole. The next RFC version received fixes and improvements to the description. The RFC was split into several parts and significantly reduced in size. Around this point, the first vote and major discussions took place. Their result was the creation of a working group. Another important outcome was the integration of Fibers as coroutine generators, which removed the problems of previous RFCs. Various experiments were conducted, extended memory models were tested, and Globals isolation was explored. WordPress and Laravel were run as stateful applications under FrankenPHP + TrueAsync. A small MVP was written for a multithreaded PHP memory manager capable of correctly working with PHP objects across different threads. The possibilities of sharing and transferring memory between PHP threads were investigated. Compared to document 1.6, document 1.7 contains one new section: Fiber. Everything else remains without significant changes. Best regards, Ed
