Googleのプログラミング言語Go(Golang)は、最新バージョンであるGo 1.19をリリースし、ジェネリックのサポートを改善し、拡張メモリモデルを導入し、その他様々な機能を提供しました。今回のアップデートでは、Go 1.18で初めて導入された最近追加されたジェネリックの改良と、ジェネリックコードのパフォーマンスを最大20%最適化することに重点を置いています。
Go 1.19での改善点
8月2日にリリースされたGo 1.19では、ジェネリックサポートの開発は、パフォーマンスの向上とともに、コミュニティから報告された微妙な問題やコーナーケースへの対処に集中しています。言語へのジェネリックの導入は、3月にリリースされたGo 1.18で追加された待望の機能でした。
Goのメモリモデルが更新され、同期アルゴリズムを実装するための低レベルのアトミックメモリプリミティブを提供するsync/atomicパッケージの動作が明示的に定義されました。happens-before関係の正式な定義が刷新され、C、C++、Java、JavaScript、Rust、Swiftで使用されているメモリモデルと一致するようになりました。このアップデートは、既存のプログラムに影響を与えません。
メモリモデルのアップグレードの一環として、sync/atomic パッケージに atomic.int64 や atomic.Pointer(T) などの新しい型が導入され、アトミック値の利用がより便利になりました。Go 1.19は、Windows、macOS、Linux向けにgo.devからダウンロードが可能になっています。
Go 1.19の追加機能
ジェネリックの強化や新しいメモリモデルの他に、Go 1.19では他の機能も導入されています:
- ガベージコレクタに追加されたソフトメモリ制限により、専用のメモリ割り当てを持つコンテナで実行されるGoプログラムの最適化が可能になりました。
- コルーチンスタックのダイナミックサイジングによるスタックコピーの削減、ほとんどのUnixシステムでの追加ファイル記述子の自動使用、x86-64およびARM64での大きなswitch文のジャンプテーブル、ARM64でのデバッガ注入関数呼び出しのサポートなどのパフォーマンスおよび実装の改善。
- メソッド宣言のパラメータの型について、既存のプログラムに影響を与えることなく、小さな修正を行いました。
- ドキュメントコメントがリンク、リスト、見出し構文に対応し、特に広範なAPIを持つパッケージで、ドキュメントコメントの構成がより明確になりました。
- セキュリティのために、os/execパッケージはPATH検索で相対パスを許可しないようになりました。
- 新しいビルド制約としてunixが導入され、対象となるOSがUnixライクなシステムで動作する場合に満たされるようになりました。
no-code やlow-code AppMaster などのプラットフォームの採用が増えるにつれ、開発者は Go のような一般的なプログラミング言語の最新の進歩に対応することが不可欠になります。Go をAppMaster と統合することで、バックエンドアプリケーションの開発を加速させ、拡張性と費用対効果を高めることができます。Go 1.19では、パフォーマンス、セキュリティ、開発者体験が大幅に改善され、最新のソフトウェア開発に不可欠なツールとしての地位が強化されています。