- 実務でany型の使用が散見されたので登壇した
- 意図しない型が入ってくると予期しない動作になってしまうのでジェネリクスで対応するのが無難
- 型の内部実装
- 型のメタデータが全て含まれた構造体がsrc/trntime/type.goで定義されている
- 拡張型は上記の型が埋め込まれた構造体として定義されている
- Genericsの内部実装
- 辞書とGcshape Stenciling
- 辞書を使って純粋なモノモーフィゼーションを避けて1つの関数インスタンスを複数の型で動かせるようにしている
- Featherwight goが論文
- コンパイラのInstantiate関数でジェネリック型や関数に具体的な型引数を適用してインスタンス化する。失敗するとpanicを起こす
- readerDictで辞書型を定義している
- Genericsの導入前
- 空のインタフェースを使って抽象化するしかなかったのでpanicの危険性があった
- Genericsの導入後
- 型制約をコンパイル時にかせるようになった
- メソッドの集合から型の集合に変わった
- ジェネリクスを検討した後の合図としてanyと書くと良い
- Generics利用の一般的なガイドラインがあるらしい
資料