Highlight review! Go 11-year-old is fast!

 

This translation from Go official blog article "Eleven Years of Go", author: Russ Cox.

Today, we celebrate the 11th anniversary of the official launch of the Go language. Last year’s "Go turning 10" anniversary celebration party seems to have become a long-lasting memory. This has been a difficult year, but we have maintained the pace of Go development and accumulated many highlights.

In November last year, we launched and launched the go.dev and pkg.go.dev sites shortly after celebrating the 10th anniversary of Go .

In February of this year, Go 1.14 version provided the first official "production-ready" go module implementation , and made many performance improvements, including faster defer and truly preemptive goroutine scheduling to reduce scheduling and garbage collection delays .

At the beginning of March this year, we launched a new version of the protobuf API: google.golang.org/protobuf, which greatly improved the support for protobuf reflection and custom messages.

When the COVID-19 pandemic happened, we decided to suspend all public announcements or activities in the spring, because everyone knows that everyone’s attention is focused on other places. But we have been working hard. A member of our team has joined the "privacy-preserving exposure notifications" project initiated by Apple/Google to support contact tracking worldwide. In May, the team launched a reference backend server written in Go.

We continue to improve gopls, which has benefited many editors and enabled advanced Go-aware support. In June, the VSCode Go extension formally joined the Go project, and it is now maintained by the same developer working on gopls.

Also in June, due to feedback from the Go community, we also open sourced the code behind pkg.go.dev as part of the Go project.

In late June, we released the latest design draft for Go generics , as well as prototype tools and a playground that supports the experimental syntax of go generics.

In July, we released and discussed three new design drafts for the future evolution of Go: go:build, file system interface, and build-time file embedding. (We will see all new features in 2021)

In August, Go 1.15 version was released ! This version focuses on optimization and bug fixes, and does not provide many new features. The most important part is to start rewriting the linker, which increases the average running speed by 20% and reduces the average memory used by 30% when building large projects.

Last month, we launched the annual Go user survey. After analyzing the results, we will post the results on the blog.

The Go community has adapted to the "virtual first" principle with everyone else, and this year we have seen many virtual gatherings and more than a dozen virtual Go conferences. Last week, the Go team held a "Go Day" event in Google Open Source Live.

go ahead

We are also very excited about what will happen to the Go language in its 12th year. In the near future, members of the Go team will participate in GopherCon 2020 and do the following presentations and sharing. Please open your calendar and mark it as a reminder!

• At 10:00 on November 11th, Robert Griesemer's speech "Typing [Generic] Go"; Q&A will be conducted at 10:30 AM. • At 12:00 noon on November 11, a live video of the Go Time podcast: "What to Expect When You're NOT Expecting" was played live. The podcast was hosted by an expert debugging team including Hana Kim. • Michael Knyszek delivered a speech "Evolving the Go Memory Manager's RAM and CPU Efficiency" at 1:00 pm on November 11; Q&A was conducted at 1:50 pm. • Dan Scales delivered a speech "Implementing Faster Defers" at 5:10 pm on November 11; Q&A was conducted at 5:40 pm. • At 3 pm on November 12th, with Julie Qiu, Rebecca Stambler, Russ Cox, Sameer Ajmani (Sameer Ajmani) ) "Go Team-Ask Me Anything" with Van Riper (Van Riper). •Austin Clements delivered a speech "Pardon the Interruption: Loop Preemption in Go 1.14" at 4:45 pm on November 12; Q&A was conducted at 5:15 pm. • Jonathan Amsterdam's speech at 1:00 pm on November 13th: "Working with Errors"; Q&A will be conducted at 1:50 pm. • Carmen Andoh's speech "Crossing the Chasm for Go: Two Million Users and Growing" at 5:55 pm on November 13th.

Go release plan

In February 2021, Go 1.16 version will be released, this version will include a new file system interface and build-time file embedding. It will complete the rewrite of the linker, which will bring more performance improvements. It will include support for the new Apple Silicon (GOARCH=arm64) Mac.

In August 2021, Go 1.17 will undoubtedly bring more features and improvements, although it is far from enough, the exact details are still pending. It will include a new register-based calling convention for x86-64 (without breaking existing assemblies!), which will make the program overall faster. (Support for other architectures will be released in future versions.) The new //go:build line will definitely include a nice feature, and it's definitely less error-prone than the current // +build . Another highly anticipated feature that we hope to be beta tested next year is support for fuzz testing in the go test command.

About Go module

Next year, we will continue to work on developing support for Go modules and integrate them well into the entire Go ecosystem. Go 1.16 will include our smoothest Go module experience to date. The preliminary result of a recent survey of ours is that 96% of users now have adopted the Go module (up from 90% a year ago).

We will also eventually end support for GOPATH-based development: any program that uses dependencies other than the standard library will require a go.mod. (If you haven't switched to go module yet, please refer to the GOPATH Wiki page for details on the last step from GOPATH to go module.)

From the very beginning, the goal of the Go module was to "add the concept of package version to the common vocabulary of Go developers and our tools" to provide in-depth support for modules and versions in the entire Go ecosystem. The broad understanding of package versions in the entire ecosystem makes go module mirroring, chechsum database and module index possible. In the next year, we will see more module support being added to more tools and systems. For example, we plan to study new tools to help module authors release new versions (go release), and help module users get rid of outdated APIs and complete migrations (new go fix).

A more persuasive example is that we created gopls to reduce the editor's reliance on many external tools to support Go: change from relying on a bunch of tools that do not support go modules to only relying on one tool that supports modules. Next year, we will prepare VSCode Go extension to use gopls by default to provide an excellent, ready-made module experience, and will release gopls 1.0. Of course, one of the biggest advantages of gopls is that it has nothing to do with the editor: any editor that supports the language server protocol can use it.

Another important use of version information is to track whether any packages in the build have known vulnerabilities. Next year, we plan to develop a database of known vulnerabilities and tool programs for vulnerability checking based on this database.

The Go package discovery site pkg.go.dev is another example of the version-aware system enabled by the Go module. We have been committed to the correct implementation of core functions and user experience, including the launch of today's redesigned pkg.go.dev. Next year, we will unify godoc.org into pkg.go.dev. We will also expand the version timeline of each software package, display important changes of each version, known vulnerabilities, etc., to achieve all the information you need when making dependency addition decisions.

We are very happy to see that the journey from GOPATH to Go modules is about to be completed, and all the excellent dependency awareness tools that Go modules are enabling.

About Go generics

The next feature in everyone's mind is of course generics. As mentioned above, we released the latest design draft for generics in June this year. Since then, we have been perfecting the details and shifting our attention to the details of achieving a productionable version. We will continue to work hard throughout the process in 2021, with a view to providing people with some trial goals before the end of the year, maybe it is part of Go 1.18 beta.

Thank you everyone

Go is not limited to those of us on the Google Go team. We would like to thank the contributors who worked with us to develop Go projects and tools. In addition, Go is successful because of all the people who work and contribute to Go's thriving ecosystem. The world outside of Go had a difficult year. Thank you very much for taking the time to join us and helping Go to succeed. Thank you. We hope everyone is safe and wish you all the best.


my contact information:

• Weibo: https://weibo.com/bigwhite20xx

• WeChat public account: iamtonybai

• Blog: tonybai.com • github: https://github.com/bigwhite

WeChat appreciation:

 

Business cooperation methods: writing, publishing, training, online courses, partnership entrepreneurship, consulting, and advertising cooperation.

Guess you like

Origin blog.csdn.net/bigwhite20xx/article/details/109634461