rfc:pcre2-migration
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:pcre2-migration [2017/10/16 16:27] – ab | rfc:pcre2-migration [2018/03/01 23:09] (current) – pcre2-migration was implemented in PHP 7.3 carusogabriel | ||
---|---|---|---|
Line 3: | Line 3: | ||
* Date: 2017-10-16 | * Date: 2017-10-16 | ||
* Author: Anatol Belski, ab@php.net | * Author: Anatol Belski, ab@php.net | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 9: | Line 9: | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | PCRE is the base for many core functionalities in PHP. Currently it is based on 8.x series which a legacy library version today. It is supported by the mainstream, however no new feature implementations flow in there, it is a bugfix version only. | + | PCRE is the base for many core functionalities in PHP. Currently it is based on 8.x series which is a legacy library version today. It is supported by the mainstream, however no new feature implementations flow in there, it is a bugfix version only. |
Still, as ext/pcre is the core functionality for PHP, and it is essential to keep it rolling. The up-to-date version is called PCRE2 and it pertains as currently actively supported, also it is where the new features are implemented. However, the API has certain differencies. As the original [[https:// | Still, as ext/pcre is the core functionality for PHP, and it is essential to keep it rolling. The up-to-date version is called PCRE2 and it pertains as currently actively supported, also it is where the new features are implemented. However, the API has certain differencies. As the original [[https:// | ||
Line 24: | Line 24: | ||
* The ' | * The ' | ||
* Some behavior change due to the newer Unicode engine was sighted. It's Unicode 10 in PCRE2 vs Unicode 7 in PCRE. | * Some behavior change due to the newer Unicode engine was sighted. It's Unicode 10 in PCRE2 vs Unicode 7 in PCRE. | ||
+ | * Some behavior change can be sighted with invalid patterns. | ||
Line 41: | Line 42: | ||
==== New Regex Syntax ==== | ==== New Regex Syntax ==== | ||
+ | These and more are available with the upgrade to PCRE2 10.x, almost nothing to be done on the PHP side. | ||
* Forward relative back-references, | * Forward relative back-references, | ||
Line 57: | Line 59: | ||
===== Open Issues ===== | ===== Open Issues ===== | ||
- | Make sure there are no open issues when the vote starts! | + | None. |
===== Unaffected PHP Functionality ===== | ===== Unaffected PHP Functionality ===== | ||
- | The userland code is unaffected, whereby the pattern checking is done more precise in PCRE2. Invalid patterns are more likely to fail the compilation. The behavior of ' | + | The userland code is unaffected, whereby the pattern checking is done more precise in PCRE2. Invalid patterns are more likely to fail the compilation. The behavior of ' |
The current test suite passes with PCRE2 with almost no change to the tests. One test ext/ | The current test suite passes with PCRE2 with almost no change to the tests. One test ext/ | ||
Line 68: | Line 70: | ||
* New pcre2_substitute() API | * New pcre2_substitute() API | ||
- | * Serialization of JIT compiled | + | * Serialization of compiled |
* New compilation options that can be turned into modifiers or used in any way otherwise, such as | * New compilation options that can be turned into modifiers or used in any way otherwise, such as | ||
* PCRE2_LITERAL | * PCRE2_LITERAL | ||
Line 80: | Line 82: | ||
* PCRE2 is context based. The current patch only uses global contexts for all the compiled patterns. This can be changed depending on the future needs to create separate contexts per pattern, or to reuse contexts, etc. | * PCRE2 is context based. The current patch only uses global contexts for all the compiled patterns. This can be changed depending on the future needs to create separate contexts per pattern, or to reuse contexts, etc. | ||
- | PCRE2 also has better Unicode support and a new error reporting API, we might check whether our current UTF-8 sanity checks are still required. | + | PCRE2 also has better Unicode support and a new error reporting API, we might check whether our current UTF-8 sanity checks are still required. Beyond features coming in the new PCRE2 versions are also to take into account. |
- | ===== Proposed Voting Choices | + | ===== Vote ===== |
- | This is admittedly not a language change, though it's an important | + | Migrate the PHP core to the most current PCRE2 version. |
+ | |||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
+ | |||
+ | 2/3 majority | ||
===== Patches and Tests ===== | ===== Patches and Tests ===== | ||
Line 91: | Line 101: | ||
===== Implementation ===== | ===== Implementation ===== | ||
- | After the project is implemented, | + | Merged into 7.3 http:// |
- | | + | |
- | - a link to the git commit(s) | + | |
- | - a link to the PHP manual entry for the feature | + | |
- | - a link to the language specification section (if any) | + | |
===== References ===== | ===== References ===== | ||
Line 105: | Line 111: | ||
* http:// | * http:// | ||
- | ===== Rejected Features ===== | ||
- | Keep this updated with features that were discussed on the mail lists. |
rfc/pcre2-migration.1508171272.txt.gz · Last modified: 2017/10/16 16:27 by ab