2016-04-07 8 views
5

Defaultの特性は、導出タイプの内容にもDefaultを実装している場合にのみ、#[derive(..)]dになることがあります。これは、形質がより多く使用されるようになることを意味します。しかし、私はstdからいくつかの型が完全に有効なデフォルト(generic paramsによることもある)を持っていますが、実装が欠落していることに気付きました。Mutex、RWLock、CondVar、Durationにデフォルトが実装されていないのはなぜですか?

  • Mutex<T>RWLock<T>
  • CondVarは単にCondVar::new()
  • Durationで実装できnew(_)で(where T: Default)を実装することができ(賢明なデフォルトでゼロ期間、を取得するために)
を導き出すことができ

これらの省略には技術的な理由がありますか?

+0

私は0の持続時間には同意しませんでした。これは分かりやすいデフォルト*ですが、他のものは確かです。 – Shepmaster

+0

なぜですか?あなたは賢明なデフォルトがないと思いますか、それとももっと賢明なものがあると思いますか? – llogiq

+0

私は賢明なデフォルトがないと言いたいと思います。ほとんどの場合、タイムアウトに関する期間について考えると、ゼロのタイムアウトは私には意味をなさないものの、他の値を選ぶこともありません。私は数字が 'Default'を' 0'として実装していることがわかります。だから、¯\\ _(ツ)/¯。 – Shepmaster

答えて

1

Debugの実装で同様の質問をした人もいますが、“Missing Debug Implementations — #31869”を参照してください。Defaultと同様の条件でしか導出できません。

残念なことに、対応するPR "libcore: add Debug implementations to most missing types #32054"は、Debugの実装が書かれていないため、一部のタイプがDebugではないことを示唆しているようです。他のいくつかのタイプは、実装が何をすべきかについて議論の余地があり、標準ライブラリに追加することに対するいくつかの懸念があります。

同じ非技術的理由で、少なくともいくつかのタイプがDefaultではないと仮定することは合理的です。

+0

問題は#31865です(少なくともCondVarでは、他のもののメモ)。私は[PR#32807](https://github.com/rust-lang/rust/pull/32807)を押しました。 – llogiq

関連する問題