rfc:jsond
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:jsond [2015/01/11 18:30] – bukka | rfc:jsond [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
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. This has been referenced at [[https:// | + | The current Json Parser in the json extension does not have a free license which is a problem for many Linux distros. This has been referenced at [[https:// |
The extension code is very old and without a maintainer which makes it difficult for further improvements. There also are some implementation decisions that makes the performance worse than it should be (see benchmarks). | The extension code is very old and without a maintainer which makes it difficult for further improvements. There also are some implementation decisions that makes the performance worse than it should be (see benchmarks). | ||
Line 18: | 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 48: | Line 67: | ||
* 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 |
The summary of the benchmarks is at https:// | The summary of the benchmarks is at https:// | ||
Line 58: | Line 84: | ||
===== 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) | + | |
===== References ===== | ===== References ===== | ||
There is an old RFC for [[https:// | There is an old RFC for [[https:// | ||
+ | |||
+ | Executed code showing the current non-conformant number parsing: http:// | ||
rfc/jsond.1421001014.txt.gz · Last modified: 2017/09/22 13:28 (external edit)