| # Go 2 language change template |
| |
| Authors: Ian Lance Taylor, Robert Griesemer, Brad Fitzpatrick |
| |
| Last updated: January, 2020 |
| |
| ## Introduction |
| |
| We get more language change proposals than we have time to review |
| thoroughly. |
| Changing the language has serious consequences that could affect the |
| entire Go ecosystem, so many factors come into consideration. |
| |
| If you just have an idea for a language change, and would like help |
| turning it into a complete proposal, we ask that you not open an |
| issue, but instead discuss the idea on a forum such as [the |
| golang-nuts mailing |
| list](https://groups.google.com/forum/#!forum/golang-nuts). |
| |
| Before proceeding with a full proposal, please review the requirements |
| listed in the Go blog article [Go 2, here we |
| come!](https://blog.golang.org/go2-here-we-come): Each language change |
| proposal must: |
| |
| 1. address an important issue for many people, |
| 1. have minimal impact on everybody else, and |
| 1. come with a clear and well-understood solution. |
| |
| If you believe that your proposal meets these criteria and wish to |
| proceed, then in order to help with review we ask that you place your |
| proposal in context by answering the questions below as best you can. |
| You do not have to answer every question but please do your best. |
| |
| ## Template |
| |
| - Would you consider yourself a novice, intermediate, or experienced Go programmer? |
| - What other languages do you have experience with? |
| - Would this change make Go easier or harder to learn, and why? |
| - Has this idea, or one like it, been proposed before? |
| - If so, how does this proposal differ? |
| - Who does this proposal help, and why? |
| - What is the proposed change? |
| - Please describe as precisely as possible the change to the language. |
| - What would change in the [language spec](https://golang.org/ref/spec)? |
| - Please also describe the change informally, as in a class teaching Go. |
| - Is this change backward compatible? |
| - Breaking the [Go 1 compatibility guarantee](https://golang.org/doc/go1compat) is a large cost and requires a large benefit. |
| - Show example code before and after the change. |
| - What is the cost of this proposal? (Every language change has a cost). |
| - How many tools (such as vet, gopls, gofmt, goimports, etc.) would be affected? |
| - What is the compile time cost? |
| - What is the run time cost? |
| - Can you describe a possible implementation? |
| - Do you have a prototype? (This is not required.) |
| - How would the language spec change? |
| - Orthogonality: how does this change interact or overlap with existing features? |
| - Is the goal of this change a performance improvement? |
| - If so, what quantifiable improvement should we expect? |
| - How would we measure it? |
| - Does this affect error handling? |
| - If so, how does this differ from [previous error handling proposals](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=label%3Aerror-handling)? |
| - Is this about generics? |
| - If so, how does this relate to the [accepted design](https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md) |
| and [other generics proposals](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=label%3Agenerics)? |
| |
| ## What to avoid |
| |
| If you are unable to answer many of these questions, perhaps your |
| change has some of these characteristics: |
| |
| - Your proposal simply changes syntax from X to Y because you prefer Y. |
| - You believe that Go needs feature X because other languages have it. |
| - You have an idea for a new feature but it is very difficult to implement. |
| - Your proposal states a problem rather than a solution. |
| |
| Such proposals are likely to be rejected quickly. |
| |
| ## Thanks |
| |
| We believe that following this template will save reviewer time when |
| considering language change proposals. |