Skip to content

Conversation

@dsnet
Copy link
Member

@dsnet dsnet commented Nov 15, 2023

Standardizer wraps an io.Reader that reads from a HuJSON stream and implements an io.Reader that reads back standard JSON.

Unlike the Standardize helper function, it does not validate HuJSON. It only guarantees that it produces valid JSON if and only if the input is valid HuJSON. It relies on a downstream JSON parser to detect various forms of syntactic errors.

Since it does not validate JSON, it is faster and more memory efficient. The Standardize helper operates by producing an AST, and then modifying the AST to produce standardized JSON. Standardizer uses a finite state machine to identify sections of comments and trailing commas and elides them when reading. In the common case, it requires no additional memory.

Performance:

name            old time/op    new time/op    delta
Standardizer    1.22µs ± 2%    0.15µs ± 4%   -87.86%

name            old alloc/op   new alloc/op   delta
Standardizer      848B ± 0%        0B       -100.00%

name            old allocs/op  new allocs/op  delta
Standardizer      15.0 ± 0%       0.0       -100.00%

Standardizer wraps an io.Reader that reads from a HuJSON stream and
implements an io.Reader that reads back standard JSON.

Unlike the Standardize helper function, it does not validate HuJSON.
It only guarantees that it produces valid JSON if and only if
the input is valid HuJSON. It relies on a downstream JSON parser
to detect various forms of syntactic errors.

Since it does not validate JSON, it is faster and more memory efficient.
The Standardize helper operates by producing an AST,
and then modifying the AST to produce standardized JSON.
Standardizer uses a finite state machine to identify
sections of comments and trailing commas and elides them when reading.
In the common case, it requires no additional memory.

Performance:

	name            old time/op    new time/op    delta
	Standardizer    1.22µs ± 2%    0.15µs ± 4%   -87.86%

	name            old alloc/op   new alloc/op   delta
	Standardizer      848B ± 0%        0B       -100.00%

	name            old allocs/op  new allocs/op  delta
	Standardizer      15.0 ± 0%       0.0       -100.00%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant