rfc:fibers
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Next revisionBoth sides next revision | ||
rfc:fibers [2021/03/08 17:08] – Update stubs trowski | rfc:fibers [2021/03/08 18:09] – Update intro kelunik | ||
---|---|---|---|
Line 8: | Line 8: | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | For most of PHP’s history, people have written PHP code only as synchronous code. They have code that runs synchronously and in turn, only calls functions | + | For most of PHP’s history, people have written PHP code only as synchronous code. Execution of functions |
- | More recently, there have been multiple projects that have allowed people to write asynchronous PHP code. Asynchronous functions accept a callback or return a placeholder for a future value (such as a promise) to run code at a future time once the result is available. Execution continues without waiting for a result. Examples of these projects are [[https:// | + | More recently, there have been multiple projects that have allowed people to write asynchronous PHP code to allow for concurrent I/O operations. Asynchronous functions accept a callback or return a placeholder for a future value (such as a promise) to run code at a future time once the result is available. Execution continues without waiting for a result. Examples of these projects are [[https:// |
The problem this RFC seeks to address is a difficult one to explain, but can be referred to as the [[https:// | The problem this RFC seeks to address is a difficult one to explain, but can be referred to as the [[https:// | ||
Line 18: | Line 18: | ||
* Asynchronous functions change the way the function must be called. | * Asynchronous functions change the way the function must be called. | ||
* Synchronous functions may not call an asynchronous function (though asynchronous functions may call synchronous functions). | * Synchronous functions may not call an asynchronous function (though asynchronous functions may call synchronous functions). | ||
- | * Calling an asynchronous function requires the entire | + | * Calling an asynchronous function requires the entire |
- | For people who are familiar with using promises and await/yield to achieve writing asynchronous code, the problem can be expressed as: “Once one function returns a promise somewhere in your call stack, the entire call stack needs to return a promise because the result of the call cannot be known until the promise is resolved.” | + | For people who are familiar with using promises and/or await/yield to achieve writing asynchronous code, the problem can be expressed as: “Once one function returns a promise somewhere in your call stack, the entire call stack needs to return a promise because the result of the call cannot be known until the promise is resolved.” |
This RFC seeks to eliminate the distinction between synchronous and asynchronous functions by allowing functions to be interruptible without polluting the entire call stack. This would be achieved by: | This RFC seeks to eliminate the distinction between synchronous and asynchronous functions by allowing functions to be interruptible without polluting the entire call stack. This would be achieved by: |
rfc/fibers.txt · Last modified: 2021/07/12 21:30 by kelunik