<commit_before><!--{
	"Title": "Go 1.10 Release Notes",
	"Path":  "/doc/go1.10",
	"Template": true
}-->

<!--
NOTE: In this document and others in this directory, the convention is to
set fixed-width phrases with non-fixed-width spaces, as in
<code>hello</code> <code>world</code>.
Do not send CLs removing the interior tags from such phrases.
-->

<style>
ul li { margin: 0.5em 0; }
</style>

<h2 id="introduction">DRAFT RELEASE NOTES - Introduction to Go 1.10</h2>

<p><strong>
  Go 1.10 is not yet released. These are work-in-progress
  release notes. Go 1.10 is expected to be released in February 2018.
</strong></p>

<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.
As always, the release maintains the Go 1 <a href="/doc/go1compat.html">promise of compatibility</a>.
We expect almost all Go programs to continue to compile and run as before.
</p>

<p>
OVERVIEW HERE
</p>

<h2 id="language">Changes to the language</h2>

<p>
There are no significant changes to the language.
</p>

<p><!-- CL 60230 -->
A corner case involving shifts by untyped constants has been clarified,
and as a result the compilers have been updated to allow the index expression
<code>x[1.0</code>&nbsp;<code>&lt;&lt;</code>&nbsp;<code>s]</code> where <code>s</code> is an untyped constant;
the <a href="/pkg/go/types/">go/types</a> package already did.
</p>

<p><!-- CL 73233 -->
The grammar for method expressions has been updated to relax the
syntax to allow any type expression as a receiver;
this matches what the compilers were already implementing.
For example, <code>struct{io.Reader}.Read</code> is a valid, if unusual,
method expression that the compilers already accepted and is
now permitted by the language grammar.
</p>

<h2 id="ports">Ports</h2>

<p>
There are no new supported operating systems or processor architectures in this release.
Most of the work has focused on strengthening the support for existing ports,
in particular <a href="#asm">new instructions in the assembler</a>
and improvements to the code generated by the compilers.
</p>

<p id="darwin">
Go 1.10 is the last release that will run on OS X 10.8 Mountain Lion or on OS X 10.9 Mavericks.
Go 1.11 will require OS X 10.10 Yosemite or later.
</p>

<p id="freebsd">
As <a href="go1.9#freebsd">announced in the Go 1.9 release notes</a>,
Go 1.10 now requires FreeBSD 10.3 or later;
support for FreeBSD 9.3 has been removed.
</p>

<p id="netbsd">
Go now runs on NetBSD again but requires the unreleased NetBSD 8.
Only <code>GOARCH</code> <code>amd64</code> and <code>386</code> are
known to work. The <code>arm</code> port might work but is untested.
</p>

<p id="openbsd">
Go 1.10 is the last release that will run on OpenBSD 6.0.
Go 1.11 will require OpenBSD 6.2.
</p>

<p id="mips">
On 32-bit MIPS systems, the new environment variable settings
<code>GOMIPS=hardfloat</code> (the default) and<commit_msg>doc/go1.10: note that netbsd/arm is definitely broken<commit_after><!--{
	"Title": "Go 1.10 Release Notes",
	"Path":  "/doc/go1.10",
	"Template": true
}-->

<!--
NOTE: In this document and others in this directory, the convention is to
set fixed-width phrases with non-fixed-width spaces, as in
<code>hello</code> <code>world</code>.
Do not send CLs removing the interior tags from such phrases.
-->

<style>
ul li { margin: 0.5em 0; }
</style>

<h2 id="introduction">DRAFT RELEASE NOTES - Introduction to Go 1.10</h2>

<p><strong>
  Go 1.10 is not yet released. These are work-in-progress
  release notes. Go 1.10 is expected to be released in February 2018.
</strong></p>

<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.
As always, the release maintains the Go 1 <a href="/doc/go1compat.html">promise of compatibility</a>.
We expect almost all Go programs to continue to compile and run as before.
</p>

<p>
OVERVIEW HERE
</p>

<h2 id="language">Changes to the language</h2>

<p>
There are no significant changes to the language.
</p>

<p><!-- CL 60230 -->
A corner case involving shifts by untyped constants has been clarified,
and as a result the compilers have been updated to allow the index expression
<code>x[1.0</code>&nbsp;<code>&lt;&lt;</code>&nbsp;<code>s]</code> where <code>s</code> is an untyped constant;
the <a href="/pkg/go/types/">go/types</a> package already did.
</p>

<p><!-- CL 73233 -->
The grammar for method expressions has been updated to relax the
syntax to allow any type expression as a receiver;
this matches what the compilers were already implementing.
For example, <code>struct{io.Reader}.Read</code> is a valid, if unusual,
method expression that the compilers already accepted and is
now permitted by the language grammar.
</p>

<h2 id="ports">Ports</h2>

<p>
There are no new supported operating systems or processor architectures in this release.
Most of the work has focused on strengthening the support for existing ports,
in particular <a href="#asm">new instructions in the assembler</a>
and improvements to the code generated by the compilers.
</p>

<p id="darwin">
Go 1.10 is the last release that will run on OS X 10.8 Mountain Lion or on OS X 10.9 Mavericks.
Go 1.11 will require OS X 10.10 Yosemite or later.
</p>

<p id="freebsd">
As <a href="go1.9#freebsd">announced in the Go 1.9 release notes</a>,
Go 1.10 now requires FreeBSD 10.3 or later;
support for FreeBSD 9.3 has been removed.
</p>

<p id="netbsd">
Go now runs on NetBSD again but requires the unreleased NetBSD 8.
Only <code>GOARCH</code> <code>amd64</code> and <code>386</code> have
been fixed. The <code>arm</code> port is still broken.
</p>

<p id="openbsd">
Go 1.10 is the last release that will run on OpenBSD 6.0.
Go 1.11 will require OpenBSD 6.2.
</p>

<p id="mips">
On 32-bit MIPS systems, the new environment variable settings
<code>GOMIPS=hardfloat</code> (the default) and
{'fraction_non_alphanumeric': 0.11987381703470032, 'fraction_numerical': 0.03204383197741989, 'mean_word_length': 4.20656871218669, 'pattern_counts': {'":': 6, '<': 145, '<?xml version=': 0, '>': 145, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2919540', 'n_tokens_mistral': 2065, 'n_tokens_neox': 1905, 'n_words': 858}