タラバガニー設計局stalins.clubNOTE/notes/proposal-77273

#77273 "A change of view."

2026-01-22、Robert Griesemer が提案 #77273 "spec: generic methods for Go" を出した。本文の1行目は "A change of view." というそっけない一文だ。2026-02-25 に accepted (提出から34日)、2026-05-26 に実装・ドキュメント完了で close されている。コメントは250件を超えた。

提案本文は Go FAQ が却下した4案 を名指しで引用している。

The Go FAQ even states that "we do not anticipate that Go will ever add generic methods". Perhaps a change of view is in order

タイトルどおり、この提案が変えたのは実装方法ではなく見方である。FAQ が却下した4案のうち、実装上の難しさをどれか1つでも解決したわけではない。「ジェネリクスメソッドはインターフェース経由で呼べない」という制約は、そのまま諦めている。その上で「それでもメソッドには価値がある」と再定義したのが今回の変化だ。核心はこの引用に尽きる。

concrete methods are a language feature that is useful in itself, irrespective of interfaces. If a concrete method is a function with a receiver, a generic concrete method can be a generic function with a receiver.

面白いのは、この選択肢自体は2020年の元の Type Parameters Proposal にもすでに書かれていて、そのときは否定されていたことだ。「Or, we could decide that parameterized methods do not, in fact, implement interfaces, but then it's much less clear why we need methods at all.」当時は「メソッドがインターフェースを満たさないなら、そもそもメソッドである意味が薄い」と考えられていた。それに対する griesemer の2026年の答えが次の一文になる。「We may have reached some clarity on this point: generic concrete methods are useful by themselves, even if they don't implement interface methods.」つまり6年越しで、メソッドの存在意義をインターフェースから切り離して説明できるようになった、というのがこの提案の実質だ。

前身にあたる提案は2つある。2021年の #49085 (362コメント、ポジティブ絵文字900超) と、2022年の #50981。どちらも実現に至らず、#77273 で3度目にしてようやく通った。

closed になった後の2026-06-09に、「Go にジェネリクスは要らない」系の蒸し返しが起きているのも記録として興味深い。thepudds が #49085 → #50981 → #77273 という経緯と development freeze に入っていることを示して収束させたが、dominikh の返しが端的だった。

Go has had generics for four years now. This change merely extends where generics can be used.

言語仕様が決着した後も、波及は長く続いた。aclements のコメントにあるとおり「言語変更で長いのはコンパイラではなく、エコシステム全体への波及」である。実際、静的解析ツール群は generic methods への対応に苦しんだ (linter が Go 1.27 に追いついていない)。エクスポートデータ形式も UIR V4 へのバンプが必要になった (エクスポートデータ形式と UIR V4)。

言語側では、GOEXPERIMENT=genericmethods フラグが #79750 により2026-06-15に削除されている。rc1 (2026-06-18) 以降および正式版には存在せず、opt-out はできない。無条件で有効な言語機能として入った、ということになる。

出典

#77273 #49085 #50981 #79750 Go Release Party 1.27 の発表資料リポジトリ slide/deck.md (why-yes / change-of-view スライドとスピーカーノート)、issues.md §1・§9。

▸ ノート一覧に戻る