release notes. Go 1.10 is expected to be released in February 2018.
</strong></p>
-<!-- TODO: not sure about these relnotes
-
-cmd/compile
- https://golang.org/cl/60410: cmd/compile: fix and improve struct field reflect information
-encoding/json
- https://golang.org/cl/76851: encoding/json: always ignore embedded pointers to unexported struct types
-runtime
- https://golang.org/cl/59970: runtime: separate soft and hard heap limits
--->
-
<p>
The latest Go release, version 1.10, arrives six months after <a href="go1.9">go1.9</a>.
Most of its changes are in the implementation of the toolchain, runtime, and libraries.
For example: <code>go</code> <code>install</code> <code>-ldflags=cmd/gofmt=-X=main.version=1.2.3</code> <code>cmd/...</code>
installs all the commands matching <code>cmd/...</code> but only applies the <code>-X</code> option
to the linker flags for <code>cmd/gofmt</code>.
-For more details, see <a href="TODO"><code>go</code> <code>help</code> <code>build</code></a>.
+For more details, see <a href="/cmd/go/#hdr-Compile_packages_and_dependencies"><code>go</code> <code>help</code> <code>build</code></a>.
</p>
<p>
binary-only packages must now declare accurate import blocks in their
stub source code, so that those imports can be made available when
linking a program using the binary-only package.
-For more details, see <a href="TODO"><code>go</code> <code>help</code> <code>filetype</code></a>.
+For more details, see <a href="/cmd/go/#hdr-File_types"><code>go</code> <code>help</code> <code>filetype</code></a>.
</p>
<h3 id="test">Test</h3>
and each package is now presented as its own DWARF compilation unit.
</p>
-<p>
-TODO: What to say about FMA, if anything?
-The spec change was mentioned in Go 1.9 but I am not sure whether any new architectures turned it on in Go 1.10.
-</p>
-
<p>
The various <a href="https://docs.google.com/document/d/1nr-TQHw_er6GOQRsF6T43GGhFDelrAP0NqSS_00RgZQ/edit">build modes</a>
has been ported to more systems.
(In Go 1.9 the limit was 1024.)
</p>
+<p>
+TODO: Anything about CL 59970: "runtime: separate soft and hard heap limits"?
+</p>
+
<h2 id="performance">Performance</h2>
<p>
that causes it to report inputs with unknown JSON fields as a decoding error.
(The default behavior has always been to discard unknown fields.)
</p>
+
+<p>
+As a result of <a href="#reflect">fixing a reflect bug</a>,
+<a href="/pkg/encoding/json/#Unmarshal"><code>Unmarshal</code></a>
+can no longer decode into fields inside
+embedded pointers to unexported struct types,
+because it cannot initialize the unexported embedded pointer
+to point at fresh storage.
+<code>Unmarshal</code> now returns an error in this case.
+</p>
</dl>
<dl id="encoding/pem"><dt><a href="/pkg/encoding/pem/">encoding/pem</a></dt>
no longer generate partial output when presented with a
block that is impossible to encode as PEM data.
</p>
-
-<p>
-TODO: Reflect fallout.
-</p>
</dl>
<dl id="encoding/xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
</p>
<p>
-TODO: New reflect CanSet change for pointers to unexported fields.
+In structs, embedded pointers to unexported struct types were
+previously incorrectly reported with an empty <code>PkgPath</code>
+in the corresponding <a href="/pkg/reflect/#StructField">StructField</a>,
+with the result that for those fields,
+and <a href="/pkg/reflect/#Value.CanSet"><code>Value.CanSet</code></a>
+incorrectly returned true and
+and <a href="/pkg/reflect/#Value.Set"><code>Value.Set</code></a>
+incorrectly succeeded.
+The underlying metadata has been corrected;
+for those fields,
+<code>CanSet</code> now correctly returns false
+and <code>Set</code> now correctly panics.
+This may affect reflection-based unmarshalers
+that could previously unmarshal into such fields
+but no longer can.
+For example, see the <a href="#encoding/json"><code>encoding/json</code> notes</a>.
+</p>
</p>
</dl>