rfc:jsond
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
rfc:jsond [2015/01/04 17:06] – bukka | rfc:jsond [2015/04/09 17:01] – Status update ajf | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: Replacing current json extension with jsond ====== | ====== PHP RFC: Replacing current json extension with jsond ====== | ||
- | * Version: 0.1 | + | * Version: 0.2 |
* Date: 2015-01-01 | * Date: 2015-01-01 | ||
* Author: Jakub Zelenka, bukka@php.net | * Author: Jakub Zelenka, bukka@php.net | ||
- | * Status: | + | * Status: |
===== Introduction ===== | ===== Introduction ===== | ||
- | The current Json Parser in the json extension does not have a free license which is a problem for many Linux distros. The extension code is also very old which makes it difficult for further improvements. There also are some implementation decisions that makes the performance worse than it should be | + | The current Json Parser in the json extension does not have a free license which is a problem for many Linux distros. |
+ | |||
+ | The extension code is very old and without a maintainer | ||
===== Proposal ===== | ===== Proposal ===== | ||
- | The proposal is to replace current json extension with code that is based on the PECL jsond extension (it's not exactly the same code as there are some modification | + | The proposal is to replace |
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== | ||
Line 16: | Line 18: | ||
* top level (PHP json_decode check): 07, 0xff, .1, -.1 | * top level (PHP json_decode check): 07, 0xff, .1, -.1 | ||
* all (JSON_Parser): | * all (JSON_Parser): | ||
+ | |||
+ | The first part (top level) is caused by different handling of integer and double because it's not handled by JSON_Parser. This is clearly a bug. | ||
+ | |||
+ | The second part is happening for all numbers. However it's not valid by the RFC 7159 as it says in https:// | ||
+ | |||
+ | < | ||
+ | number = [ minus ] int [ frac ] [ exp ] | ||
+ | decimal-point = %x2E ; . | ||
+ | digit1-9 = %x31-39 | ||
+ | e = %x65 / %x45 ; e E | ||
+ | exp = e [ minus / plus ] 1*DIGIT | ||
+ | frac = decimal-point 1*DIGIT | ||
+ | int = zero / ( digit1-9 *DIGIT ) | ||
+ | minus = %x2D ; - | ||
+ | plus = %x2B ; + | ||
+ | zero = %x30 ; 0 | ||
+ | </ | ||
+ | |||
+ | Please note the definition of frac that specifies that at least one digit after decimal point is required. | ||
===== Proposed PHP Version(s) ===== | ===== Proposed PHP Version(s) ===== | ||
Line 25: | Line 46: | ||
==== To Existing Extensions ==== | ==== To Existing Extensions ==== | ||
+ | In addition to the backward incompatible changes for float number format the following internal changes have been done: | ||
* removed JSON_parser.h header | * removed JSON_parser.h header | ||
* removed utf8_decode.h header | * removed utf8_decode.h header | ||
Line 39: | Line 61: | ||
===== Open Issues ===== | ===== Open Issues ===== | ||
- | Not yet | ||
- | |||
- | ===== Unaffected PHP Functionality ===== | ||
None | None | ||
===== Future Scope ===== | ===== Future Scope ===== | ||
- | * Performance | + | |
- | * Better error reporting (location of the error) | + | * Better error reporting (location of the error) |
- | ===== Proposed Voting Choices | + | ===== Vote ===== |
- | 50%+1 majority | + | 50%+1 majority. The vote is a straight Yes/No vote. |
+ | |||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
+ | |||
+ | The vote started on 2015-01-26 at 17:00 UTC and ended on 2015-02-01 at 17:00 UTC. | ||
===== Patches and Tests ===== | ===== Patches and Tests ===== | ||
- | The current patch for master | + | Pull request |
- | Benchmarks will be soon available | + | The summary of the benchmarks is at https:// |
===== Implementation ===== | ===== Implementation ===== | ||
- | After the project is implemented, | + | After the project is implemented, |
- | - the version(s) it was merged to | + | - Merged |
- | - a link to the git commit(s) | + | |
- | - a link to the PHP manual entry for the feature | + | |
===== References ===== | ===== References ===== | ||
- | ... | + | There is an old RFC for [[https:// |
+ | |||
+ | Executed code showing the current non-conformant number parsing: http:// | ||
rfc/jsond.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1