1. ホーム
  2. generics

[解決済み] なぜGoにはジェネリックがないのか?

2022-07-03 10:06:57

質問

免責事項:私はまだ1日しか囲碁をやっていないので、多くのことを見逃している可能性が高いです。

なぜGoにはgenerics/templates/whatsInANameの本当のサポートがないのか、誰か知っていますか?そこで、ジェネリックな map がありますが、これはコンパイラが提供するもので、Go プログラマは自分自身の実装を書くことができません。Go を可能な限り直交させるという話がありますが、なぜジェネリック型を使用することはできても、新しい型を作成することができないのでしょうか?

特に関数型プログラミングに関しては、ラムダやクロージャさえありますが、ジェネリックを欠いた静的型システムでは、以下のような高次のジェネリック関数をどのように書けばよいのでしょうか? filter(predicate, list) ? OK、リンクリストなどは interface{} を犠牲にして、型安全性を確保することができます。

SO / Googleで素早く検索しても何の洞察も得られなかったので、ジェネリックは、もしあるとしても、後付けでGoに追加されるように見えます。私は、Thompson が Java の人たちよりもずっとうまくやることを信頼していますが、なぜジェネリックスを除外するのでしょうか?あるいは、計画されていて、まだ実装されていないだけなのでしょうか?

どのように解決するのですか?

この答えはここで見つかります。 http://golang.org/doc/faq#generics

<ブロッククオート

なぜGoには一般的な型がないのですか?

ジェネリックはいつかは追加されるかもしれません。一部のプログラマがそうであることは理解していますが、私たちはその緊急性を感じていません。

ジェネリックは便利ですが、型システムおよびランタイムの複雑さという犠牲を伴います。私たちは考え続けていますが、複雑さに比例した価値を与えるデザインはまだ見つかっていません。一方、Go の組み込みのマップとスライス、およびコンテナを構築するために空のインターフェイスを使用する機能 (明示的なアンボックス) は、多くの場合、ジェネリックが可能にすることを、よりスムーズではないにしても行うコードを書くことが可能であることを意味しています。

これはまだ未解決の問題です。