Proposals for Go 1.15
28 Jan 2020
Tags: go1.15, proposals, community, language, vet

Robert Griesemer, for the Go team
gri@golang.org

* Status

We are close to the Go 1.14 release, planned for February assuming all goes
well, with an RC1 candidate almost ready. Per the process outlined in the
[[https://blog.golang.org/go2-here-we-come][Go 2, here we come!]] blog post,
it is again the time in our development and release cycle to consider if and
what language or library changes we might want to include for our next release,
Go 1.15, scheduled for August of this year.

The primary goals for Go remain package and version management, better error
handling support, and generics. Module support is in good shape and getting
better with each day, and we are also making progress on the generics front
(more on that later this year). Our attempt seven months ago at providing a
better error handling mechanism, the
[[https://golang.org/issue/32437][`try` proposal]], met good support
but also strong opposition and we decided to abandon it. In its aftermath there
were many follow-up proposals, but none of them seemed convincing enough,
clearly superior to the `try` proposal, or less likely to cause similar
controversy. Thus, we have not further pursued changes to error handling
for now. Perhaps some future insight will help us to improve upon the status
quo.

* Proposals

Given that modules and generics are actively being worked on, and with error
handling changes out of the way for the time being, what other changes should
we pursue, if any? There are some perennial favorites such as requests for
enums and immutable types, but none of those ideas are sufficiently developed
yet, nor are they urgent enough to warrant a lot of attention by the Go team,
especially when also considering the cost of making a language change.

After reviewing all potentially viable proposals, and more importantly, because
we don’t want to incrementally add new features without a long-term plan, we
concluded that it is better to hold off with major changes this time. Instead
we concentrate on a couple of new `vet` checks and a minor adjustment to the
language. We have selected the following three proposals:

[[https://golang.org/issue/32479][#32479]].
Diagnose `string(int)` conversion in `go`vet`.

We were planning to get this done for the upcoming Go 1.14 release but we didn’t
get around to it, so here it is again. The `string(int)` conversion was introduced
early in Go for convenience, but it is confusing to newcomers (`string(10)` is
`"\n"` not `"10"`) and not justified anymore now that the conversion is available
in the `unicode/utf8` package.
Since [[https://golang.org/issue/3939][removing this conversion]] is
not a backwards-compatible change, we propose to start with a `vet` error instead.

[[https://golang.org/issue/4483][#4483]].
Diagnose impossible interface-interface type assertions in `go`vet`.

Currently, Go permits any type assertion `x.(T)` (and corresponding type switch case)
where the type of `x` and `T` are interfaces. Yet, if both `x` and `T` have a method
with the same name but different signatures it is impossible for any value assigned
to `x` to also implement `T`; such type assertions will always fail at runtime
(panic or evaluate to `false`). Since we know this at compile time, the compiler
might as well report an error. Reporting a compiler error in this case is not a
backwards-compatible change, thus we also propose to start with a `vet` error
instead.

[[https://golang.org/issue/28591][#28591]].
Constant-evaluate index and slice expressions with constant strings and indices.

Currently, indexing or slicing a constant string with a constant index, or indices,
produces a non-constant `byte` or `string` value, respectively. But if all operands
are constant, the compiler can constant-evaluate such expressions and produce a
constant (possibly untyped) result. This is a fully backward-compatible change
and we propose to make the necessary adjustments to the spec and compilers.

* Timeline

We believe that none of these three proposals are controversial but there’s
always a chance that we missed something important. For that reason we plan
to have the proposals implemented at the beginning of the Go 1.15 release cycle
(at or shortly after the Go 1.14 release) so that there is plenty of time to
gather experience and provide feedback. Per the
[[https://blog.golang.org/go2-here-we-come][proposal evaluation process]],
the final decision will be made at the end of the development cycle, at the
beginning of May, 2020.

* And one more thing...

We receive many more language change proposals
([[https://github.com/golang/go/labels/LanguageChange][issues labeled LanguageChange]])
than we can review thoroughly. For instance, just for error handling alone,
there are 57 issues, of which five are currently still open. Since the cost
of making a language change, no matter how small, is high and the benefits
are often unclear, we must err on the side of caution. Consequently, most
language change proposals get rejected sooner or later, sometimes with minimal
feedback. This is unsatisfactory for all parties involved. If you have spent a
lot of time and effort outlining your idea in detail, it would be nice to not
have it immediately rejected. On the flip side, because the general
[[https://github.com/golang/proposal/blob/master/README.md][proposal process]]
is deliberately simple, it is very easy to create language change proposals
that are only marginally explored, causing the review committee significant
amounts of work. To improve this experience for everybody we are adding a new
[[https://github.com/golang/proposal/blob/master/go2-language-changes.md][questionnaire]]
for language changes: filling out that template will help reviewers evaluate
proposals more efficiently because they don’t need to try to answer those
questions themselves. And hopefully it will also provide better guidance for
proposers by setting expectations right from the start. This is an experiment
that we will refine over time as needed.

Thank you for helping us improve the Go experience!
