Files
json/images/roadmap_lanes.svg
T
2026-10-27 12:14:00 +00:00

99 lines
8.8 KiB
XML

<svg class="nj-fig nj-fig--lanes" viewBox="0 0 880 504" role="img" aria-labelledby="nj-int-lanes-title" xmlns="http://www.w3.org/2000/svg">
<title id="nj-int-lanes-title">Two lanes: the 3.x release train, whose minor and patch releases do not break code that uses the public A&#8203;PI, followed by version 4.0, which has no release date yet. Each breaking change is a macro that is available in 3.x today with its 3.x default and becomes the default in 4.0: JSON_USE_IMPLICIT_CONVERSIONS, added in 3.9.0, 3.x default 1, 4.0 value 0; JSON_USE_GLOBAL_UDLS, added in 3.11.0, 3.x default 1, 4.0 value 0; JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON, added in 3.11.0, 3.x default 0, 4.0 value 0, macro removed; JSON_BRACE_INIT_COPY_SEMANTICS, added in 3.13.0, 3.x default 0, 4.0 value 1; JSON_PRECISE_STREAM_POSITION, added in 3.13.0, 3.x default 0, 4.0 value 1; JSON_STRICT_NUL_HANDLING, added in 3.13.0, 3.x default 0, 4.0 value 1; JSON_STRICT_BINARY_UTF8, added in 3.13.0, 3.x default 0, 4.0 value 1; JSON_DISABLE_TUPLE_REFERENCE_CONVERSION, added in 3.13.0, 3.x default 0, 4.0 value 1; JSON_DELETE_DEPRECATED_FUNCTIONS, added in 3.13.0, 3.x default 0, 4.0 value 1, macro removed.</title>
<defs><marker id="nj-int-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto"><path class="fg-head" d="M0 1 L10 5 L0 9 z"/></marker></defs>
<rect class="nj-int-lane" x="16" y="16" width="600" height="56" rx="10"/>
<text class="nj-int-lanetext" x="32" y="41">3.x release train</text>
<text class="nj-int-mute" x="32" y="60">available today</text>
<line class="nj-int-axis" x1="300" y1="30" x2="300" y2="44"/>
<text class="nj-int-mute" x="300" y="60" text-anchor="middle">3.9.0</text>
<line class="nj-int-axis" x1="445" y1="30" x2="445" y2="44"/>
<text class="nj-int-mute" x="445" y="60" text-anchor="middle">3.11.0</text>
<line class="nj-int-axis" x1="590" y1="30" x2="590" y2="44"/>
<text class="nj-int-mute" x="590" y="60" text-anchor="middle">3.13.0</text>
<line class="fg-arrow" x1="210" y1="37" x2="600" y2="37"/>
<line class="fg-arrow fg-arrow--dash" x1="618" y1="44" x2="660" y2="44" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-lane nj-int-lane--future" x="664" y="16" width="200" height="56" rx="10"/>
<text class="nj-int-lanetext" x="680" y="41">4.0</text>
<text class="nj-int-mute" x="680" y="60">no release date yet</text>
<text class="nj-int-text" x="16" y="98">A minor or patch release of 3.x does not break code that uses the public A&#8203;PI, unless that code opts in with a macro.</text>
<text class="nj-int-text" x="16" y="118">4.0 is not developed on a separate branch: it switches the defaults of these macros and removes the macros.</text>
<text class="fg-h" x="32" y="150">Macro</text>
<text class="fg-h" x="380" y="150">added</text>
<text class="fg-h" x="500" y="150" text-anchor="middle">3.x default</text>
<text class="nj-int-mute" x="632" y="150" text-anchor="middle">define to try today</text>
<text class="fg-h" x="764" y="150" text-anchor="middle">4.0 default</text>
<rect class="nj-int-row" x="16" y="170" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="189.5">JSON_USE_IMPLICIT_CONVERSIONS</text>
<text class="nj-int-mute" x="380" y="189.5">3.9.0</text>
<rect class="nj-int-pill" x="470" y="174" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="189.5" text-anchor="middle">1</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="185" x2="724" y2="185" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="174" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="189.5" text-anchor="middle">0</text>
<rect class="nj-int-row" x="16" y="204" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="223.5">JSON_USE_GLOBAL_UDLS</text>
<text class="nj-int-mute" x="380" y="223.5">3.11.0</text>
<rect class="nj-int-pill" x="470" y="208" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="223.5" text-anchor="middle">1</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="219" x2="724" y2="219" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="208" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="223.5" text-anchor="middle">0</text>
<rect class="nj-int-row" x="16" y="238" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="257.5">JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON</text>
<text class="nj-int-mute" x="380" y="257.5">3.11.0</text>
<rect class="nj-int-pill" x="470" y="242" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="257.5" text-anchor="middle">0</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="253" x2="724" y2="253" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="242" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="257.5" text-anchor="middle">removed</text>
<rect class="nj-int-row" x="16" y="272" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="291.5">JSON_BRACE_INIT_COPY_SEMANTICS</text>
<text class="nj-int-mute" x="380" y="291.5">3.13.0</text>
<rect class="nj-int-pill" x="470" y="276" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="291.5" text-anchor="middle">0</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="287" x2="724" y2="287" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="276" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="291.5" text-anchor="middle">1</text>
<rect class="nj-int-row" x="16" y="306" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="325.5">JSON_PRECISE_STREAM_POSITION</text>
<text class="nj-int-mute" x="380" y="325.5">3.13.0</text>
<rect class="nj-int-pill" x="470" y="310" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="325.5" text-anchor="middle">0</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="321" x2="724" y2="321" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="310" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="325.5" text-anchor="middle">1</text>
<rect class="nj-int-row" x="16" y="340" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="359.5">JSON_STRICT_NUL_HANDLING</text>
<text class="nj-int-mute" x="380" y="359.5">3.13.0</text>
<rect class="nj-int-pill" x="470" y="344" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="359.5" text-anchor="middle">0</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="355" x2="724" y2="355" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="344" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="359.5" text-anchor="middle">1</text>
<rect class="nj-int-row" x="16" y="374" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="393.5">JSON_STRICT_BINARY_UTF8</text>
<text class="nj-int-mute" x="380" y="393.5">3.13.0</text>
<rect class="nj-int-pill" x="470" y="378" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="393.5" text-anchor="middle">0</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="389" x2="724" y2="389" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="378" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="393.5" text-anchor="middle">1</text>
<rect class="nj-int-row" x="16" y="408" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="427.5">JSON_DISABLE_TUPLE_REFERENCE_CONVERSION</text>
<text class="nj-int-mute" x="380" y="427.5">3.13.0</text>
<rect class="nj-int-pill" x="470" y="412" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="427.5" text-anchor="middle">0</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="423" x2="724" y2="423" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="412" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="427.5" text-anchor="middle">1</text>
<rect class="nj-int-row" x="16" y="442" width="848" height="30" rx="6"/>
<text class="nj-int-macro" x="32" y="461.5">JSON_DELETE_DEPRECATED_FUNCTIONS</text>
<text class="nj-int-mute" x="380" y="461.5">3.13.0</text>
<rect class="nj-int-pill" x="470" y="446" width="60" height="22" rx="11"/>
<text class="nj-int-val" x="500" y="461.5" text-anchor="middle">0</text>
<line class="fg-arrow fg-arrow--dash" x1="544" y1="457" x2="724" y2="457" marker-end="url(#nj-int-arrow)"/>
<rect class="nj-int-pill nj-int-pill--v4" x="728" y="446" width="72" height="22" rx="11"/>
<text class="nj-int-val nj-int-val--v4" x="764" y="461.5" text-anchor="middle">removed</text>
<text class="nj-int-mute" x="16" y="496">Versions on the 3.x lane are the ones that added a macro, not to scale. &#8220;removed&#8221;: see the 4.0 behavior column of the table.</text>
</svg>