aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ext_depends/D-YAML/docs/articles/spec_differences.md
blob: 93cf0385017bdaec0a8f4a560c0c2788a2d46f47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Differences between D:YAML and the YAML specification

There are some differences between D:YAML and the YAML 1.1
specification. Some are caused by difficulty of implementation of some
features, such as multiple Unicode encodings within single stream, and
some by unnecessary restrictions or ambiguities in the specification.

Still, D:YAML tries to be as close to the specification as possible. It
should never load documents with different meaning than according to the
specification, and documents that fail to load should be very rare (for
instance, very few files use multiple Unicode encodings).

## List of known differences:

Differences that can cause valid YAML documents not to load:

  - No support for byte order marks and multiple Unicode encodings in a
    stream.

  - Plain scalars in flow context cannot contain `,`, `:` and `?`. This
    might change with `:` in the future. See
    <http://pyyaml.org/wiki/YAMLColonInFlowContext> for details.

  - The specification does not restrict characters for anchors and
    aliases. This may lead to problems, for instance, the document:

        [ *alias, value ]

    can be interpteted in two ways, as:

        [ "value" ]

    and:

        [ *alias , "value" ]

    Therefore we restrict aliases and anchors to ASCII alphanumeric
    characters.

  - The specification is confusing about tabs in plain scalars. We don't
    use tabs in plain scalars at all.

  - There is no support for recursive data structures in DYAML.

Other differences:

  - Indentation is ignored in the flow context, which is less
    restrictive than the specification. This allows code such as:

        key: {
        }

  - Indentation rules for quoted scalars are loosed: They don't need to
    adhere indentation as `"` and `'` clearly mark the beginning and the
    end of them.

  - We allow `_` in tag handles.

  - Right now, two mappings with the same contents but different
    orderings are considered unequal, even if they are unordered
    mappings. This is because all mappings are ordered in the D:YAML
    implementation. This should change in future, once D associative
    arrays work with variant types or a map class or struct appears in
    Phobos.