Yesterday, Google engineer Robert Griesemer published a blog post highlighting the outline of the next steps for Golang towards the Go 2 release. Google developer Russ Cox started the thought process behind Go 2 in his talk at GopherCon 2017. The talk was about the future of Go and pertaining to the changes that were talked about, the talk was informally called Go 2. A major change between the two versions is in the way design and changes are influenced. The first version only involved a small team but the second version will have much more participation from the community. The proposal process started in 2015, the Go core team will now work in the proposals for the second version of the programming language.
The current status of Go 2 proposals
As of November 2018, there are about 120 open issues on GitHub labeled Go 2 proposal. Most of them revolve around significant language or library changes often not compatible with Go 1. The ideas from the proposals will probably influence the language and libraries of the second version. Now there are millions of Go programmers and a large Go code body that needs to be brought together without an ecosystem split. Hence the changes done need to be less and carefully selected. To do this, the Go core team is implementing a proposal evaluation process for significant potential changes.
The proposal evaluation process
The purpose of the evaluation process is to collect feedback on a small number of select proposals to make a final decision. This process runs in parallel to a release cycle and has five steps.
- Proposal selection: The Go core team selects a few Go 2 proposals that seem good to them for acceptance.
- Proposal feedback: After selecting, the Go team announces the selected proposals and collects feedback from the community. This gives the large community an opportunity to make suggestions or express concerns.
- Implementation: The proposals are implemented based on the feedback received. The goal is to have significant changes ready to submit on the first day up an upcoming release.
- Implementation feedback: The Go team and community have a chance to experiment with the new features during the development cycle. This helps in getting further feedback.
- Final launch decision: The Go team makes the final decision on shipping each change at the end of the three-month development cycle. At this time, there is an opportunity to consider if the change delivers the expected benefits or has created any unexpected costs. When shipped, the changes become a part of the Go language.
Proposal selection process and the selected proposals
For a proposal to be selected, the minimum criteria are that it should:
- address an important issue for a large number of users
- have a minimal impact on other users
- is drafted with a clear and well-understood solution
For trials a select few proposals will be implemented that are backward compatible and hence are less likely to break existing functionality. The proposals are:
- General Unicode identifiers based on Unicode TR31 which will allow using non-Western alphabets.
- Adding binary integer literals and support for_ in number literals. Not a very big problem solving change, but this brings Go up to par with other languages in this aspect.
- Permit signed integers as shift counts. This will clean up the code and get shift expressions better in sync with index expressions and built-in functions like cap and len.
The Go team has now started with the proposal evaluation process and now the community can provide feedback. Proposals with clear, positive feedback will be taken ahead as they aim to implement changes by February 1, 2019. The development cycle is Feb-May 2019 and the chosen features will be implemented as per the outlined process.
For more details, you can visit the Go Blog.