なぜGoのジェネリクスはこの形なのか? - Featherweight Goが明かす設計の核心
https://gocon.jp/2025/talks/958641/
https://speakerdeck.com/ryotaros/nazegonozienerikusuhakonoxing-nanoka-featherweight-gogaming-kasushe-ji-nohe-xin
元々 Contracts という概念が導入される想定だった
しかし、新しい概念の追加される点やすでに interface という型の振る舞いを定義できるものがあったため撤回された
Featherweight Go
Featherweight Java に強く影響を受けている
e.g. モデル
Featherweight Java
FJ
FGJ
Featherweight Go
FG
FGG
ジェネリクス設計における設計思想
ジェネリックなコードをどのように変換するかを定式化
要件
使いしやすく理解しやすい
ランタイムコストが低い
可能な限り保守的な拡張である
方針
構造的サブタイピングとジェネリクスの組み合わせ
追加の言語機能なしに 型制約 を導入する
モノモーフィゼーション に基づいたコンパイル戦略]
FG
チューリング完全 な FP としてモデリング
Go
FGG
FG を拡張し、Structs、Methods、Interfaces が 型パラメータ を持つ
コンパイル戦略
Featherweight Java とは異なる
https://gyazo.com/f093f93d8ecacfed89c0e59ae3ec5dd4
ダミーメソッドが生成される理由
...
Expression Problem(式問題)を Go で解決するには
共変レシーバ
#Go #Go_Conference_2025