web-dev-qa-db-ja.com

Goにジェネリックがないのはなぜですか?

免責事項:Goで遊んだのは1日だけなので、見逃してしまった可能性が十分にあります。

Goでgenerics/templates/whatsInANameが実際にサポートされていない理由を知っている人はいますか?したがって、汎用のmapがありますが、それはコンパイラによって提供されますが、Goプログラマは独自の実装を作成できません。 Goを可能な限り直交化することについてのすべての話で、なぜ新しい型を作成せずに汎用型を使用できるのですか?

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

SO/Googleが洞察を明らかにしなかったので、後発としてGoにジェネリックが追加されたとしても、ジェネリックが追加されたように見えます。 Java guys、しかしなぜジェネリックを排除するのか?または彼らは計画されており、まだ実装されていないのか?

115
lbruder

この回答はここにあります: http://golang.org/doc/faq#generics

Goにジェネリック型がないのはなぜですか?

ジェネリックはある時点で追加される可能性があります。一部のプログラマーが理解していることを理解していますが、私たちは彼らに緊急性を感じません。

ジェネリックは便利ですが、型システムと実行時の複雑さが犠牲になります。複雑性に比例した価値をもたらすデザインはまだ見つかっていませんが、それについては考え続けています。一方、Goの組み込みのマップとスライスに加えて、空のインターフェイスを使用してコンテナーを構築する機能(明示的なボックス化解除を使用)により、多くの場合、ジェネリックがスムーズでない場合でも有効にするコードを作成できます。

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

74
Vinzenz

ジェネリックは現在ビルトインされていませんが、コードを生成する小さなユーティリティと組み合わせてコメントを使用するgoのジェネリックの外部実装がいくつかあります。

そのような実装の1つを次に示します。 http://clipperhouse.github.io/gen/

9
Alexander