Goブログ
Go 15周年

「15パズル」をするgopherのイラストとアニメーションを描いてくれたRenee Frenchに感謝します。
Go、誕生日おめでとう!
日曜日、Goのオープンソースリリース15周年を祝いました!
Goの10周年記念以来、Goと世界で多くのことが変わりました。一方、多くの点で変わっていないものもあります。Goは、安定性、安全性、そして大規模なソフトウェアエンジニアリングとプロダクションのサポートへのコミットメントを維持しています。
そしてGoは力強く成長を続けています!Goのユーザーベースは過去5年間で3倍以上に増加し、最も急速に成長している言語の1つとなっています。15年前の誕生以来、Goはトップ10の言語となり、現代のクラウドの言語となっています。
2月のGo 1.22と8月のGo 1.23のリリースにより、それはfor
ループの年となりました。Go 1.22では、for
ループによって導入された変数のスコープがループごとではなく、イテレーションごとに変更され、長年の言語上の「落とし穴」が解決されました。10年以上前、Go 1のリリースに向けて、Goチームはいくつかの言語の詳細について決定しました。その中には、for
ループが各イテレーションで新しいループ変数を作成するかどうかが含まれていました。面白いことに、その議論は非常に短く、明確な意見はありませんでした。Rob Pikeは、彼のスタイルで「stet」(そのままにする)という1語でそれを締めくくりました。そしてそうでした。当時取るに足りないように思えたものでしたが、長年の運用経験により、この決定の影響が明らかになりました。しかしその間、私たちはGoへの変更の影響を理解するための堅牢なツール(特に、Googleのコードベース全体にわたるエコシステム全体の分析とテスト)を構築し、コミュニティとの連携とフィードバックの取得のためのプロセスを確立しました。広範なテスト、分析、およびコミュニティとの議論を経て、ハッシュバイセクションツールを伴い、変更によって影響を受けるコードを大規模に特定するのを開発者に支援することで、変更を展開しました。
for
ループへの変更は、5年間の測定された変更の軌跡の一部でした。これは、Go 1.21で導入された将来の言語互換性がなければ不可能でした。これは、4年半前にGo 1.14で導入されたGoモジュールの基盤の上に構築されたものです。
Go 1.23では、この変更をさらに発展させ、イテレータとユーザー定義のfor-rangeループを導入しました。2年半前に導入されたジェネリックス(Go 1.18)と組み合わせることで、カスタムコレクションやその他の多くのプログラミングパターンのための強力で人間工学に基づいた基盤が作成されます。
これらのリリースでは、標準ライブラリのHTTPルーターへの待望の機能強化、実行トレースの全面的な見直し、およびすべてのGoアプリケーションのためのより強力なランダム性など、運用準備に関する多くの改善も実現しました。さらに、最初のv2標準ライブラリパッケージの導入により、将来のライブラリの進化と近代化のためのテンプレートが確立されました。
過去1年間、私たちはGoツールのオプトインテレメトリも慎重に展開してきました。このシステムにより、Goの開発者はより良い意思決定を行うためのデータを得ることができますが、完全にオープンで匿名のままです。Goテレメトリは最初にgopls(Go言語サーバー)に登場し、すでに多くの改善につながっています。この取り組みは、誰もがGoでのプログラミングをさらに良い体験にするための道を切り開きます。
今後、私たちはGoを進化させ、現在および将来のハードウェアの機能をより適切に活用していきます。過去15年間でハードウェアは大きく変化しました。Goが今後15年間、高性能で、大規模な運用ワークロードをサポートし続けるためには、大規模なマルチコア、高度な命令セット、そしてますます不均一なメモリ階層における局所性の重要性の高まりに適応する必要があります。これらの改善の一部は透過的です。Go 1.24は、最新のCPUでより効率的な、完全に新しいmap
実装を内部的に備えています。また、最新のハードウェアの機能と制約を考慮して設計された、新しいガベージコレクションアルゴリズムのプロトタイプを作成しています。一部の改善は、新しいAPIとツールという形で提供され、Go開発者は最新のハードウェアをより適切に活用できるようになります。最新のベクトルとマトリックスハードウェア命令をサポートする方法、およびアプリケーションがCPUとメモリの局所性を組み込むための複数の方法を検討しています。私たちの取り組みを導く中心的な原則は、コンポーザブルな最適化です。コードベースに対する最適化の影響は、可能な限り局所的でなければならず、コードベースの他の部分での開発の容易性が損なわれないようにする必要があります。
私たちは、Goの標準ライブラリがデフォルトで安全であり、設計上安全であることを保証し続けています。これには、FIPS認証済みの暗号化の組み込みのネイティブサポートを組み込むための継続的な取り組みが含まれており、必要なアプリケーションではFIPS暗号化はフラグを反転するだけで済みます。さらに、可能であればGoの標準ライブラリパッケージを進化させ、math/rand/v2
の例に従って、新しいAPIが安全でセキュアなGoコードの作成の容易性を大幅に向上させることができる場所を検討しています。
AIインフラストラクチャ、アプリケーション、および開発者支援におけるGoの機能を強化することにより、AIをより良くし、AIをGoにより良くするために取り組んでいます。Goはプロダクションシステムを構築するための優れた言語であり、プロダクションAIシステムの構築にも優れた言語であることを目指しています。クラウドインフラストラクチャのための言語としてのGoの信頼性により、LLM インフラストラクチャ だけでなく も自然な選択肢となっています。AIアプリケーションに関しては、LangChainGoやGenkitなど、人気のAI SDKでのGoのファーストクラスのサポートを継続的に構築していきます。そして、Goは最初からエンドツーエンドのソフトウェアエンジニアリングプロセスを改善することを目指していたため、当然のことながら、AIの最新のツールと技術を活用して開発者の負担を軽減し、実際にはプログラミングなどの楽しいことにより多くの時間を費やすことを検討しています!
ありがとうございました
これらはすべて、Goの素晴らしい貢献者と繁栄しているコミュニティのおかげで実現しました。15年前、私たちはGoがこれほど成功し、Goを中心にコミュニティが発展することを夢見ることしかできませんでした。大小に関わらず、Goに関わってくださったすべての方々に感謝申し上げます。来年もよろしくお願いいたします。
前の記事:(エイリアス)名とは何か?
ブログインデックス