The Go Blog
Go へのジェネリクス追加の提案
ジェネリクスの提案
型と関数に型パラメータのサポートを追加し、一種のジェネリックプログラミングを可能にするGo言語変更提案を提出しました。
なぜジェネリクスが必要なのか?
ジェネリクスは、コードを共有し、プログラムをより簡単に構築できる強力な構成要素を提供します。ジェネリックプログラミングとは、一部の型が後で指定されるように、関数やデータ構造を記述することを意味します。たとえば、任意のデータ型のスライスに対して操作する関数を記述できます。この場合、実際のデータ型は関数が呼び出されたときにのみ指定されます。また、任意の型の値を格納するデータ構造を定義することもできます。この場合、実際に格納される型は、データ構造のインスタンスを作成するときに指定されます。
Goが2009年に最初にリリースされて以来、ジェネリクスのサポートは最も頻繁に要求される言語機能の1つでした。以前のブログ投稿で、ジェネリクスがなぜ役立つのかについて詳しく読むことができます。
ジェネリクスには明確なユースケースがありますが、Goのような言語にうまく組み込むことは困難な作業です。Goにジェネリクスを追加する最初の(欠陥のある)試みの1つは、2010年にまでさかのぼります。過去10年間にも、他にもいくつかの試みがありました。
過去数年間、私たちは一連の設計ドラフトに取り組んできました。これらは型パラメータに基づいた設計として結実しました。この設計ドラフトにはGoプログラミングコミュニティから多くの意見が寄せられ、多くの人々が以前のブログ投稿で説明されているジェネリクスプレイグラウンドを使用して実験しました。Ian Lance TaylorはGopherCon 2019で、ジェネリクスを追加する理由と現在私たちが従っている戦略について講演しました。Robert GriesemerはGopherCon 2020で、設計の変更と実装について、フォローアップの講演を行いました。言語の変更は完全に後方互換性があり、既存のGoプログラムは今日と同じように動作し続けます。私たちは、設計ドラフトがGoに追加するのに十分良い、そして十分シンプルであると考える段階に達しました。
これからの予定
言語変更提案プロセスは、Go言語に変更を加える方法です。私たちは今、将来のGoのバージョンにジェネリクスを追加するためにこのプロセスを開始しました。建設的な批判やコメントを歓迎しますが、以前のコメントの繰り返しは避け、単純な賛成/反対コメントは避けるようにしてください。代わりに、同意または不同意するコメント、または提案全体に対して、賛成/反対の絵文字リアクションを追加してください。
すべての言語変更提案と同様に、私たちの目標は、ジェネリクスを言語に追加するか、提案を却下するかの合意形成を推進することです。この規模の変更では、Goコミュニティの全員を満足させることは不可能であると理解していますが、全員が受け入れられる決定に到達することを目指しています。
提案が承認された場合、今年の終わりまでに、おそらくGo 1.18ベータ版の一部として、人々が試せる完全な、ただし完全に最適化されていない実装を用意することを目標とします。
次の記事: GoにおけるコマンドPATHのセキュリティ
前の記事: ARM以降のGo
ブログインデックス