😃

Go1.20リリースお知らせ記事を翻訳する(前編)

2023/02/05に公開

Outline

2023年2月1日にGo 1.20がリリースされ、The Go Blogにてリリース告知の記事が投稿されました。
本記事ではブログの翻訳を記載します。誤訳等や読みづらい点がありましたらコメント/Githubのissueにご連絡いただけると幸いです。

https://go.dev/blog/go1.20

Go 1.20の詳細な機能説明に関しては、リリース告知ではなくリリースノートをご覧ください。
https://go.dev/doc/go1.20

Index

前編(本記事)

  • Go 1.20がリリースされました!
  • 言語の変更
  • ツールの改善

後編(次回記事)

  • 標準ライブラリの追加
  • パフォーマンスの向上
  • あとがき

Go 1.20がリリースされました!

2023年 2月 1日
Go開発チーム代表 Robert Griesemer

Go 1.20 is released!
Robert Griesemer, on behalf of the Go team
1 February 2023


Go開発チームは本日Go 1.20をリリースすることを嬉しく思います。
ダウンロードはこちらからすることが可能です。
開発期間の延長のおかげで、本バージョンではより早期段階での幅広いテストとコードベースの全体的な安定性の向上を実現しました。

Today the Go team is thrilled to release Go 1.20, which you can get by visiting the download page.
Go 1.20 benefited from an extended development phase, made possible by earlier broad testing and improved overall stability of the code base.


特に、PGOのプレビューサポート機能をリリースできたことを嬉しく思います。
PGOとは実行時間のプロファイル情報に基づき、コンパイラがアプリケーションや作業負荷に特化した最適化を行うようにできるものです。

We’re particularly excited to launch a preview of profile-guided optimization (PGO), which enables the compiler to perform application- and workload-specific optimizations based on run-time profile information.


go buildにプロファイルを提供することで、コンパイラは典型的なアプリケーションをコンパイルする時間が約3~4%早くなります。また、将来のリリースではより一層PGOの恩恵を受けることができると予想しています。
これはPGOサポートのプレビューリリースなので、皆さんにぜひ試していただきたいです。しかし、まだ荒削りな部分が残っているので商用環境では使用しない方が良いでしょう。

Providing a profile to go build enables the compiler to speed up typical applications by around 3–4%, and we expect future releases to benefit even more from PGO.
Since this is a preview release of PGO support, we encourage folks to try it out, but there are still rough edges which may preclude production use.


Go 1.20では、複数のツールとライブラリの改善や全体的なパフォーマンスの改善をするための細かな言語の変更も含まれています。

Go 1.20 also includes a handful of language changes, many improvements to tooling and the library, and better overall performance.

言語の変更

  • 先に宣言されたcomparable制約は、インターフェースのような一般的なcomparable型によっても満たされるようになりました。これによって、ジェネリックコードを単純化することができます。
  • The predeclared comparable constraint is now also satisfied by ordinary comparable types, such as interfaces, which will simplify generic code.


  • SliceData型、String型、StringData型がunsafeパッケージに追加されました。これらは一連の実装に依存しないslice関数や文字列操作関数を完成させます。
  • The functions SliceData, String, and StringData have been added to package unsafe. They complete the set of functions for implementation-independent slice and string manipulation.

  • Go言語の型変換ルールが拡張されました。スライスを直接配列に変換することができるようになります。
  • Go’s type conversion rules have been extended to permit direct conversion from a slice to an array.

  • 配列や構造体が比較される際、正確な順序を比較する厳格な順序が定義されました。これによって、比較処理内でpanicが発生した際に何が起こったのかがわかりやすくなります。
  • The language specification now defines the exact order in which array elements and struct fields are compared. This clarifies what happens in case of panics during comparisons.

ツールの改善

  • coverツールは単体試験だけでなく、全体のカバレッジプロファイルを集めることができるようになりました。
  • The cover tool now can collect coverage profiles of whole programs, not just of unit tests.

  • goツールは $GOROOT/pkg ディレクトリ内にある事前のコンパイル済みの標準ライブラリに依存しなくなりました。配布物に同梱されなくなったので、結果的にダウンロードする容量が小さくなりました。代わりに、必要に応じて他のパッケージ同様に標準ライブラリがビルドとキャッシュされます。
  • The go tool no longer relies on pre-compiled standard library package archives in the $GOROOT/pkg directory, and they are no longer shipped with the distribution, resulting in smaller downloads. Instead, packages in the standard library are built as needed and cached in the build cache, like other packages.

  • go test -jsonの実装は、stdoutへまばらな書き込みが行われる場合、より堅牢になるように改良されました。
  • The implementation of go test -json has been improved to make it more robust in the presence of stray writes to stdout.


  • go build,go installや他のビルドに関連するコマンドは、プログラム全体をカバレッジ分析できる-coverフラグと、プロファイルに基づく最適化-pgoフラグを使用できるようになりました。
  • The go build, go install, and other build-related commands now accept a -pgo flag enabling profile-guided optimizations as well as a -cover flag for whole-program coverage analysis.

  • Cツールチェインがないシステムでは、goコマンドはcgoを無効化するようになりました。その結果、Cコンパイラなしで Goをインストールした時、オプションとしてcgoを使用する標準ライブラリのパッケージのために、削除された事前に配布されたパッケージアーカイブを使用する代わりに純粋なGo buildsを使用するようになります。
  • The go command now disables cgo by default on systems without a C toolchain. Consequently, when Go is installed on a system without a C compiler, it will now use pure Go builds for packages in the standard library that optionally use cgo, instead of using pre-distributed package archives (which have been removed, as noted above).

  • vet toolは、テストを並列実行する際に発生する可能性のあるループする参照変数のミスをより多く報告します。
  • The vet tool reports more loop variable reference mistakes that may occur in tests running in parallel.

後編

https://zenn.dev/nii/articles/read-go-1-20-release-article2

GitHubで編集を提案

Discussion