Handle a couple of TODOs
This commit is contained in:
parent
6fa0dde8f4
commit
f9497d64c5
|
@ -324,11 +324,9 @@ Numeric data follow the
|
||||||
[JSON grammar](https://tools.ietf.org/html/rfc8259#section-6), with
|
[JSON grammar](https://tools.ietf.org/html/rfc8259#section-6), with
|
||||||
the addition of a trailing "f" distinguishing `Float` from `Double`
|
the addition of a trailing "f" distinguishing `Float` from `Double`
|
||||||
values. `Float`s and `Double`s always have either a fractional part or
|
values. `Float`s and `Double`s always have either a fractional part or
|
||||||
an exponent part, where `SignedInteger`s never have either.
|
an exponent part, where `SignedInteger`s never have
|
||||||
|
either.[^reading-and-writing-floats-accurately]
|
||||||
TODO: talk about precise reading of floats, and the need for arbitrary
|
[^arbitrary-precision-signedinteger]
|
||||||
precision. Your language will often have a good floating-point reading
|
|
||||||
library.
|
|
||||||
|
|
||||||
Float = flt %i"f"
|
Float = flt %i"f"
|
||||||
Double = flt
|
Double = flt
|
||||||
|
@ -341,12 +339,36 @@ library.
|
||||||
exp = %i"e" ["-"/"+"] 1*DIGIT
|
exp = %i"e" ["-"/"+"] 1*DIGIT
|
||||||
flt = int (frac exp / frac / exp)
|
flt = int (frac exp / frac / exp)
|
||||||
|
|
||||||
|
[^reading-and-writing-floats-accurately]: **Implementation note.**
|
||||||
|
Your language's standard library likely has a good routine for
|
||||||
|
converting between decimal notation and IEEE 754 floating-point.
|
||||||
|
However, if not, or if you are interested in the challenges of
|
||||||
|
accurately reading and writing floating point numbers, see the
|
||||||
|
excellent matched pair of 1990 papers by Clinger and Steele &
|
||||||
|
White, and a recent follow-up by Jaffer:
|
||||||
|
|
||||||
|
Clinger, William D. ‘How to Read Floating Point Numbers
|
||||||
|
Accurately’. In Proc. PLDI. White Plains, New York, 1990.
|
||||||
|
<https://doi.org/10.1145/93542.93557>.
|
||||||
|
|
||||||
|
Steele, Guy L., Jr., and Jon L. White. ‘How to Print
|
||||||
|
Floating-Point Numbers Accurately’. In Proc. PLDI. White Plains,
|
||||||
|
New York, 1990. <https://doi.org/10.1145/93542.93559>.
|
||||||
|
|
||||||
|
Jaffer, Aubrey. ‘Easy Accurate Reading and Writing of
|
||||||
|
Floating-Point Numbers’. ArXiv:1310.8121 [Cs], 27 October 2013.
|
||||||
|
<http://arxiv.org/abs/1310.8121>.
|
||||||
|
|
||||||
|
[^arbitrary-precision-signedinteger]: **Implementation note.** Be
|
||||||
|
aware when implementing reading and writing of `SignedInteger`s
|
||||||
|
that the data model *requires* arbitrary-precision integers. Your
|
||||||
|
I/O routines must not truncate precision either when reading or
|
||||||
|
writing a `SignedInteger`.
|
||||||
|
|
||||||
`String`s are,
|
`String`s are,
|
||||||
[as in JSON](https://tools.ietf.org/html/rfc8259#section-7), possibly
|
[as in JSON](https://tools.ietf.org/html/rfc8259#section-7), possibly
|
||||||
escaped text surrounded by double quotes. The escaping rules are the
|
escaped text surrounded by double quotes. The escaping rules are the
|
||||||
same as for JSON.[^string-json-correspondence]
|
same as for JSON.[^string-json-correspondence] [^escaping-surrogate-pairs]
|
||||||
|
|
||||||
TODO: discuss surrogate pairs in \uXXXX form
|
|
||||||
|
|
||||||
String = %x22 *char %x22
|
String = %x22 *char %x22
|
||||||
char = unescaped / %x7C / escape (escaped / %x22 / %s"u" 4HEXDIG)
|
char = unescaped / %x7C / escape (escaped / %x22 / %s"u" 4HEXDIG)
|
||||||
|
@ -366,6 +388,12 @@ TODO: discuss surrogate pairs in \uXXXX form
|
||||||
`string`. Some auxiliary definitions (e.g. `escaped`) are lifted
|
`string`. Some auxiliary definitions (e.g. `escaped`) are lifted
|
||||||
largely unmodified from the text of RFC 8259.
|
largely unmodified from the text of RFC 8259.
|
||||||
|
|
||||||
|
[^escaping-surrogate-pairs]: In particular, note JSON's rules around
|
||||||
|
the use of surrogate pairs for code points not in the Basic
|
||||||
|
Multilingual Plane. We encourage implementations to avoid escaping
|
||||||
|
such characters when producing output, and instead to rely on the
|
||||||
|
UTF-8 encoding of the entire document to handle them correctly.
|
||||||
|
|
||||||
A `ByteString` may be written in any of three different forms.
|
A `ByteString` may be written in any of three different forms.
|
||||||
|
|
||||||
The first is similar to a `String`, but prepended with a hash sign
|
The first is similar to a `String`, but prepended with a hash sign
|
||||||
|
@ -411,7 +439,8 @@ TODO: More unicode in unescaped symbols?
|
||||||
|
|
||||||
### Printing
|
### Printing
|
||||||
|
|
||||||
Recommend a JSON-compatible print mode. Recommend a submode with trailing commas.
|
TODO: Recommend a JSON-compatible print mode. Recommend a submode with
|
||||||
|
trailing commas.
|
||||||
|
|
||||||
## Compact Binary Syntax
|
## Compact Binary Syntax
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue