型消去
型パラメータをコンパイル時に取り除くジェネリクスの実装方式。Java 5(2004年)は、ジェネリクス以前のバイトコードとの互換性のためにこの道を選んだ。結果として、List<String>とList<Integer>は実行時には同じ型になる。
実用上の帰結として、Javaのジェネリクスではnew T()ができず、instanceof List<String>による型検査もできない。Kotlinのinline fun <reified T>は特定の場面で型消去を回避する。TypeScriptも型消去型で、JSへのコンパイル時に型が取り除かれ、実行時には何も残らない。単相化(RustやC++)とは別物で、あちらは型ごとに別のコードを生成するため、最適化の余地は大きいがバイナリは膨らむ。Scala 3とKotlinは、特定の戦略で実行時型情報を使って型消去の弊害を和らげようとしている。