rfc:jit
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:jit [2019/02/06 09:23] – dmitry | rfc:jit [2020/08/01 23:41] (current) – RFC was implemented in PHP 8.0 carusogabriel | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: JIT ====== | ====== PHP RFC: JIT ====== | ||
- | * Version: | + | * Version: |
* Date: 2019-01-28 | * Date: 2019-01-28 | ||
* Author: Dmitry Stogov < | * Author: Dmitry Stogov < | ||
- | * Status: | + | * Status: |
* First Published at: https:// | * First Published at: https:// | ||
Line 25: | Line 25: | ||
PHP JIT is implemented as an almost independent part of OPcache. It may be enabled/ | PHP JIT is implemented as an almost independent part of OPcache. It may be enabled/ | ||
- | When enabled, native code of PHP files is stored in an additional region of the OPcache shared memory and op_array-> | + | When enabled, native code of PHP files is stored in an additional region of the OPcache shared memory and op_array-> |
- | We use DynAsm (developed for LuaJIT project) for generation of native code. It's a very lightweight and advanced tool, but does assume good, and very low-level development knowledge of target assembler languages. | + | We use DynAsm (developed for LuaJIT project) for generation of native code. It's a very lightweight and advanced tool, but does assume good, and very low-level development knowledge of target assembler languages. |
+ | PHP JIT doesn' | ||
+ | |||
+ | If type of PHP variable is exactly inferred (in SSA) to LONG or DOUBLE, and it can't be accessed indirectly, JIT may store its value directly in CPU registers, avoiding memory stores and loads. PHP JIT liner-scan register allocation algorithm, tat combines high speed with reasonable quality. | ||
The quality of the JIT may be demonstrated on Mandelbrot benchmark published at https:// | The quality of the JIT may be demonstrated on Mandelbrot benchmark published at https:// | ||
Line 261: | Line 264: | ||
jmp .L10 | jmp .L10 | ||
</ | </ | ||
+ | |||
+ | In comparison to V8, HHVM, PyPy and most others modern JIT implementations PHP JIT is extremely simple, but anyway it increases the level of the whole PHP complexity, risk of new kind of bugs and cost of development and maintenance. | ||
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== | ||
Line 396: | Line 401: | ||
</ | </ | ||
- | ===== Open Issues | + | ===== State and compatibility |
- | Make sure there are no open issues when the vote starts! | + | Currently we support x86 and x86_64 on POSIX platforms (tested on Linux with GCC and LVVM) and Windows (both non-ZTS and ZTS builds). We support " |
+ | There are no any restrictions on C compiler and OS any more. | ||
===== Future Scope ===== | ===== Future Scope ===== | ||
Line 403: | Line 409: | ||
===== Proposed Voting Choices ===== | ===== Proposed Voting Choices ===== | ||
- | This project requires a 50%+1 majority. | + | Support for JIT is more a strategic PHP question. JIT definitely requires a lot of work, but it may be actively developed only as a part of PHP, with common effort. |
+ | |||
+ | This project requires a 2/3+1 majority. Voting opened 2019-03-21 and closes 2019-03-28. | ||
<doodle title=" | <doodle title=" | ||
Line 410: | Line 418: | ||
</ | </ | ||
- | As PHP 7.4 is already branched and its engine is not expected to be significantly changed (consequently requiring corresponding changes to the JIT implementation), | + | As PHP 7.4 is already branched and its engine is not expected to be significantly changed (consequently requiring corresponding changes to the JIT implementation), |
+ | |||
+ | In case JIT is not included in PHP-7.4 and PHP-8 introduces language compatibility breaks (it already does), existing applications couldn' | ||
<doodle title=" | <doodle title=" | ||
Line 423: | Line 433: | ||
===== Implementation ===== | ===== Implementation ===== | ||
- | After the project is implemented, | + | Merged |
- | - the version(s) it was merged | + | |
- | | + | |
- | - a link to the PHP manual entry for the feature | + | |
- | - a link to the language specification section (if any) | + | |
===== References ===== | ===== References ===== | ||
- [[https:// | - [[https:// | ||
- [[https:// | - [[https:// | ||
- | |||
- | ===== Rejected Features ===== | ||
- | Keep this updated with features that were discussed on the mail lists. | ||
rfc/jit.1549445032.txt.gz · Last modified: 2019/02/06 09:23 by dmitry