Contributors Summit 2019
15 Aug 2019
Tags: community

Carmen Andoh and contributors

* Introduction

For the third year in a row, the Go team and contributors convened
the day before GopherCon to discuss and plan for the future of the Go project.
The event included self-organizing into breakout groups,
a town-hall style discussion about the proposal process in the morning,
and afternoon break-out roundtable discussions
based on topics our contributors chose.
We asked five contributors to write about their experience
in various discussions at this year’s summit.

.image contributors-summit-2019/group.jpg _ 800

_(Photo_by_Steve_Francia.)_

* Compiler and Runtime (report by Lynn Boger)

The Go contributors summit was a great opportunity
to meet and discuss topics and ideas with others who also contribute to Go.

The day started out with a time to meet everyone in the room.
There was a good mix of the core Go team
and others who actively contribute to Go.
From there we decided what topics were of interest
and how to split the big group into smaller groups.
My area of interest is the compiler, so I joined that group
and stayed with them for most of the time.

At our first meeting, a long list of topics were brought up
and as a result the compiler group decided to keep meeting throughout the day.
I had a few topics of interest that I shared and many that others suggested
were also of interest to me.
Not all items on the list were discussed in detail;
here is my list of those topics which had the most interest and discussion,
followed by some brief comments that were made on other topics.

*Binary*size*.
There was a concern expressed about binary size,
especially that it continues to grow with each release.
Some possible reasons were identified such as increased inlining and other optimizations.
Most likely there is a set of users who want small binaries,
and another group who wants the best performance possible and maybe some don’t care.
This led to the topic of TinyGo, and it was noted that TinyGo was not a full implementation of Go
and that it is important to keep TinyGo from diverging from Go and splitting the user base.
More investigation is required to understand the need among users and the exact reasons
contributing to the current size.
If there are opportunities to reduce the size without affecting performance,
those changes could be made, but if performance were affected
some users would prefer better performance.

*Vector*assembly*.
How to leverage vector assembly in Go was discussed for a while
and has been a topic of interest in the past.
I have split this into three separate possibilities, since they all relate to the use of vector instructions,
but the way they are used are different, starting with the topic of vector assembly.
This is another case of a compiler trade off.

For most targets, there are critical functions in standard packages
such as crypto, hash, math and others, where the use of assembly is necessary
to get the best possible performance; however having large functions
written in assembly makes them difficult to support and maintain
and could require different implementations for each target platform.
One solution is to make use of macro assembly or other
high-level generation techniques to make the vector assembly easier to read and understand.

Another side to this question is whether the Go compiler can
directly generate SIMD vector instructions when compiling a Go source file,
by enhancing the Go compiler to transform code sequences to “simdize”
the code to make use of vector instructions.
Implementing SIMD in the Go compiler would add complexity and compile time,
and might not always result in code that performs better.
The way the code is transformed could in some cases depend
on the target platform so that would not be ideal.

Another way to leverage vector instructions in Go is to provide a way
to make it easier to make use of vector instructions from within the Go source code.
Topics discussed were intrinsics, or implementations that exist in other compilers like Rust.
In gcc some platforms provide inline asm, and Go possibly could provide this capability,
but I know from experience that intermixing inline asm with Go code adds complexity
to the compiler in terms of tracking register use and debugging.
It allows the user to do things the compiler might not expect or want,
and it does add an extra level of complexity.
It could be inserted in places that are not ideal.

In summary, it is important to provide a way to leverage
the available vector instructions, and make it easier and safer to write.
Where possible, functions use as much Go code as possible,
and potentially find a way to use high level assembly.
There was some discussion of designing an experimental vector package
to try and implement some of these ideas.

*New*calling*convention*.
Several people were interested in the topic of the
[[https://golang.org/issue/18597][ABI changes to provide a register based calling convention]].
The current status was reported with details.
There was discussion on what remained to be done before it could be used.
The ABI specification needs to be written first and it was not clear when that would be done.
I know this will benefit some target platforms more than others
and a register calling convention is used in most compilers for other platforms.

*General*optimizations*.
Certain optimizations that are more beneficial for some platforms other than x86 were discussed.
In particular, loop optimizations such as hoisting of invariants and strength reduction could be done
and provide more benefit on some platforms.
Potential solutions were discussed, and implementation would probably be
up to the targets that find those improvements important.

*Feedback-directed*optimizations*.
This was discussed and debated as a possible future enhancement.
In my experience, it is hard to find meaningful programs to use for
collecting performance data that can later be used to optimize code.
It increases compile time and takes a lot of space to save the data
which might only be meaningful for a small set of programs.

*Pending*submissions*.
A few members in the group mentioned changes they had been working on
and plan to submit soon, including improvements to makeslice, and a rewrite of rulegen.

*Compile*time*concerns*.
Compile time was discussed briefly. It was noted that phase timing was added to the GOSSAFUNC output.

*Compiler*contributor*communication*.
Someone asked if there was a need for a Go compiler mailing list.
It was suggested that we use golang-dev for that purpose,
adding compiler to the subject line to identify it.
If there is too much traffic on golang-dev, then a compiler-specific mailing list
can be considered at some later point in time.

*Community*.
I found the day very beneficial in terms of connecting with people
who have been active in the community and have similar areas of interest.
I was able to meet many people who I’ve only known by the user name
appearing in issues or mailing lists or CLs.
I was able to discuss some topics and existing issues
and get direct interactive feedback instead of waiting for online responses.
I was encouraged to write issues on problems I have seen.
These connections happened not just during this day but while
running into others throughout the conference,
having been introduced on this first day, which led to many interesting discussions.
Hopefully these connections will lead to more effective communication
and improved handling of issues and code changes in the future.

* Tools (report by Paul Jolly)

The tools breakout session during the contributor summit took an extended form,
with two further sessions on the main conference days organized by the
[[https://github.com/golang/go/wiki/golang-tools][golang-tools]] group.
This summary is broken down into two parts: the tools session at the contributor workshop,
and a combined report from the golang-tools sessions on the main conference days.

*Contributor*summit*.
The tools session started with introductions from ~25 folks gathered,
followed by a brainstorming of topics, including:
gopls, ARM 32-bit, eval, signal, analysis, go/packages api, refactoring, pprof,
module experience, mono repo analysis, go mobile, dependencies, editor integrations,
compiler opt decisions, debugging, visualization, documentation.
A lot of people with lots of interest in lots of tools!

The session focused on two areas (all that time allowed): gopls and visualizations.
[[https://golang.org/wiki/gopls][Gopls]] (pronounced: “go please”) is an implementation of the
[[https://langserver.org][Language Server Protocol (LSP)]] server for Go.
Rebecca Stamber, the gopls lead author, and the rest of the Go tools team were interested
in hearing people’s experiences with gopls: stability, missing features, integrations in editors working, etc?
The general feeling was that gopls was in really good shape and working extremely well for the majority of use cases.
Integration test coverage needs to be improved, but this is a hard problem to get “right” across all editors.
We discussed a better means of users reporting gopls errors they encounter via their editor,
telemetry/diagnostics, gopls performance metrics, all subjects that got more detailed coverage
in golang-tools sessions that followed on the main conference days (see below).
A key area of discussion was how to extend gopls, e.g., in the form of
additional go/analysis vet-like checks, lint checks, refactoring, etc.
Currently there is no good solution, but it’s actively under investigation.
Conversation shifted to the very broad topic of visualizations, with a
demo-based introduction from Anthony Starks (who, incidentally, gave an excellent talk about
[[https://www.youtube.com/watch?v=NyDNJnioWhI][Go for information displays]] at GopherCon 2018).

*Conference*days*.
The golang-tools sessions on the main conference days were a continuation of the
[[https://golang.org/wiki/golang-tools][monthly calls]] that have been happening since the group’s inception at GopherCon 2018.
Full notes are available for the
[[https://docs.google.com/document/d/1-RVyttQ0ncjCpR_sRwizf-Ubedkr0Emwmk2LhnsUOmE/edit][day 1]] and
[[https://docs.google.com/document/d/1ZI_WqpLCB8DO6teJ3aBuXTeYD2iZZZlkDptmcY6Ja60/edit#heading=h.x9lkytc2gxmg][day 2]] sessions.
These sessions were again well attended with 25-30 people at each session.
The Go tools team was there in strength (a good sign of the support being put behind this area), as was the Uber platform team.
In contrast to the contributor summit, the goal from these sessions was to come away with specific action items.

*Gopls*.
Gopls “readiness” was a major focus for both sessions.
This answer effectively boiled down to determining when it makes sense to tell
editor integrators “we have a good first cut of gopls” and then compiling a
list of “blessed” editor integrations/plugins known to work with gopls.
Central to this “certification” of editor integrations/plugins is a well-defined process
by which users can report problems they experience with gopls.
Performance and memory are not blockers for this initial “release”.
The conversation about how to extend gopls, started in the
contributor summit the day before, continued in earnest.
Despite the many obvious benefits and attractions to extending gopls
(custom go/analysis checks, linter support, refactoring, code generation…),
there isn’t a clear answer on how to implement this in a scalable way.
Those gathered agreed that this should not be seen as a blocker for the
initial “release”, but should continue to be worked on.
In the spirit of gopls and editor integrations,
Heschi Kreinick from the Go tools team brought up the topic of debugging support.
Delve has become the de facto debugger for Go and is in good shape;
now the state of debugger-editor integration needs to be established,
following a process similar to that of gopls and the “blessed” integrations.

*Go*Discovery*Site*.
The second golang-tools session started with an excellent introduction to
the Go Discovery Site by Julie Qiu from the Go tools team, along with a quick demo.
Julie talked about the plans for the Discovery Site: open sourcing the project,
what signals are used in search ranking, how [[http://godoc.org/][godoc.org]] will ultimately be replaced,
how submodules should work, how users can discover new major versions.

*Build*Tags*.
Conversation then moved to build tag support within gopls.
This is an area that clearly needs to be better understood
(use cases are currently being gathered in [[https://golang.org/issue/33389][issue 33389]]).
In light of this conversation, the session wrapped up with
Alexander Zolotov from the JetBrains GoLand team suggesting that the gopls and
GoLand teams should share experience in this and more areas, given GoLand
has already gained lots of experience.

*Join*Us!*
We could easily have talked about tools-related topics for days!
The good news is that the golang-tools calls will continue for the foreseeable future.
Anyone interested in Go tooling is very much encouraged to join: [[https://golang.org/wiki/golang-tools][the wiki]] has more details.

* Enterprise Use (report by Daniel Theophanes)

Actively asking after the needs of less vocal developers will be the largest challenge,
and greatest win, for the Go language. There is a large segment of programmers
who don’t actively participate in the Go community.
Some are business associates, marketers, or quality assurance who also do development.
Some will wear management hats and make hiring or technology decisions.
Others just do their job and return to their families.
And lastly, many times these developers work in businesses with strict IP protection contracts.
Even though most of these developers won’t end up directly participating in open source
or the Go community proposals, their ability to use Go depends on both.

The Go community and Go proposals need to understand the needs of these less vocal developers.
Go proposals can have a large impact on what is adopted and used.
For instance, the vendor folder and later the Go modules proxy are incredibly important
for businesses that strictly control source code and
typically have fewer direct conversations with the Go community.
Having these mechanisms allow these organizations to use Go at all.
It follows that we must not only pay attention to current Go users,
but also to developers and organizations who have considered Go,
but have chosen against it.
We need to understand these reasons.

Similarly, should the Go community pay attention to “enterprise”
environments it would unlock many additional organizations who can utilize Go.
By ensuring active directory authentication works, users who would
be forced to use a different ecosystem can keep Go on the table.
By ensuring WSDL just works, a section of users can pick Go up as a tool.
No one suggested blindly making changes to appease non-Go users.
But rather we should be aware of untapped potential and unrecognized
hindrances in the Go language and ecosystem.

While several different possibilities to actively solicit this information
from the outside was discussed, this is a problem we fundamentally need your help.
If you are in an organization that doesn’t use Go even though it was considered,
let us know why Go wasn’t chosen.
If you are in an organization where Go is only used for a subsection of programming tasks,
but not others, why isn’t it used for more? Are there specific blockers to adoption?

* Education (report by Andy Walker)

One of the roundtables I was involved in at the Contributors Summit
this year was on the topic of Go education,
specifically what kind of resources we make available
to the new Go programmer, and how we can improve them.
Present were a number of very passionate organizers, engineers and educators,
each of whom had a unique perspective on the subject,
either through tools they’d designed,
documents they’d written or workshops they’d given to developers of all stripes.

Early on, talk turned to whether or not Go makes a good first programming language.
I wasn’t sure, and advocated against it.
Go isn’t a good first language, I argued, because it isn’t intended to be.
As Rob Pike [[https://talks.golang.org/2012/splash.article][wrote back in 2012]],
“the language was designed by and for people who write—and read and debug and maintain—large software systems”.
To me, this guiding ethos is clear: Go is a deliberate response to perceived flaws
in the processes used by experienced engineers, not an attempt to create an ideal
programming language, and as such a certain basic familiarity with programming concepts is assumed.

This is evident in the official documentation at [[https://golang.org/doc/][golang.org/doc]].
It jumps right into how to install the language before passing the user on to the
[[https://tour.golang.org/][tour]], which is geared towards programmers
who are already familiar with a C-like language.
From there, they are taken to [[https://golang.org/doc/code.html][How to Write Go Code]],
which provides a very basic introduction to the classic non-module Go workspace,
before moving immediately on to writing libraries and testing.
Finally, we have [[https://golang.org/doc/effective_go.html][Effective Go]],
and a series of references including the [[https://golang.org/ref/spec][spec]],
rounded out by some examples.
These are all decent resources if you’re already familiar with a C-like language,
but they still leave a lot to be desired, and there’s nothing to be found
for the raw beginner or even someone coming directly from a language like Python.

As an accessible, interactive starting point, the tour is a natural first target
towards making the language more beginner friendly,
and I think a lot of headway can be made targeting that alone.
First, it should be the first link in the documentation,
if not the first link in the bar at the top of golang.org, front and center.
We should encourage the curious user to jump right in and start playing with the language.
We should also consider including optional introductory sections on coming
from other common languages, and the differences they are
likely to encounter in Go, with interactive exercises.
This would go a long way to helping new Go programmers in mapping
the concepts they are already familiar with onto Go.

For experienced programmers, an optional, deeper treatment should be given
to most sections in the tour, allowing them to drill down into more
detailed documentation or interactive exercises enumerating the
design decisions principles of good architecture in Go.
They should find answers to questions like:

- Why are there so many integer types when I am encouraged to use `int` most of the time?
- Is there ever a good reason to pick a value receiver?
- Why is there a plain `int`, but no plain `float`?
- What are send- and receive-only channels, and when would I use them?
- How do I effectively compose concurrency primitives, and when would I _not_ want to use channels?
- What is `uint` good for? Should I use it to restrict my user to positive values? Why not?

The tour should be someplace they can revisit upon finishing the first run-through
to dive more deeply into some of the more interesting choices in language design.

But we can do more. Many people seek out programming as a way to design
applications or scratch a particular itch, and they are most likely to want
to target the interface they are most familiar with: the browser.
Go does not have a good front-end story yet.
Javascript is still the only language that really provides
both a frontend and a backend environment,
but WASM is fast becoming a first-order platform,
and there are so many places we could go with that.
We could provide something like [[https://github.com/gopherjs/vecty][vecty]]
in [[https://goplay.space/][The Go Play Space]],
or perhaps [[https://gioui.org/][Gio]], targeting WASM, for people to get
started programming in the browser right away, inspiring their imagination,
and provide them a migration path out of our playground into
a terminal and onto GitHub.

So, is Go a good first language?
I honestly don’t know, but it’s certainly true there are a significant
number of people entering the programming profession
with Go as their starting point, and I am very interested in talking to them,
learning about their journey and their process,
and shaping the future of Go education with their input.

* Learning Platforms (report by Ronna Steinberg)

We discussed what a learning platform for Go should look like
and how we can combine global resources to effectively teach the language.
We generally agreed that teaching and learning is easier with visualization
and that a REPL is very gratifying.
We also overviewed some existing solutions for visualization with Go:
templates, Go WASM, GopherJS as well as SVG and GIFs generation.

Compiler errors not making sense to the new developer was also brought up
and we considered ideas of how to handle it, perhaps a bank of errors and how they would be useful.
One idea was a wrapper for the compiler that explains your errors to you, with examples and solutions.

A new group convened for a second round later and we focused more on
what UX should the Go learning platform have,
and if and how we can take existing materials (talks, blog posts, podcasts, etc)
from the community and organize them into a program people can learn from.
Should such a platform link to those external resources?
Embed them?
Cite them?
We agreed that a portal-like-solution (of external links to resources)
makes navigation difficult and takes away from the learning experience,
which led us to the conclusion that such contribution cannot be passive,
and contributors will likely have to opt-in to have their material on the platform.
There was then much excitement around the idea of adding a voting mechanism to the platform,
effectively turning the learners into contributors, too,
and incentivizing the contributors to put their materials on the platform.

(If you are interested in helping in educational efforts for Go,
please email Carmen Andoh candoh@google.com.)

* Thank You!

Thanks to all the attendees for the excellent discussions on contributor day,
and thanks especially to Lynn, Paul, Daniel, Andy, and Ronna
for taking the time to write these reports.


