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