为什么Mutex、RWLock、CondVar、Duration没有实现默认值?

5

Default特质只能在派生类型的内容也实现了Default时才能被#[derive(..)]。这意味着该特质越多被实现,就越容易使用。但是,我注意到一些来自std的类型缺少实现,尽管它们具有完全有效的默认值(有时取决于泛型参数)。

  • Mutex<T>RWLock<T>可以通过new(_)实现(where T: Default
  • CondVar可以简单地通过CondVar::new()实现
  • Duration可以派生(以获得零持续时间,这是一个合理的默认值)

这些缺失是否由技术原因造成?


我不同意“零持续时间,这是一个合理的默认值”,但其他的可以。 - Shepmaster
为什么?你认为根本没有明智的默认值,还是认为有更明智的默认值? - llogiq
我认为没有明智的默认值。大多数情况下,我会考虑超时的持续时间,而零超时对我来说毫无意义,选择任何其他值也是如此。尽管我看到数字将“默认”实现为“0”,但¯\(ツ)/¯。 - Shepmaster
2
@Shepmaster:我使用的一个内部框架默认超时时间为0。奇怪的是,如果你忘记覆盖它,通常回复不会来得够快... - Matthieu M.
1个回答

1

有些人问了一个类似的问题,涉及到Debug实现,请参见“Missing Debug Implementations — #31869”,这也只能在与Default相似的条件下派生。

不幸的是,相应的PR“libcore: add Debug implementations to most missing types #32054”似乎表明一些类型之所以没有Debug,仅仅是因为没有人为它们编写Debug实现。其他一些类型在实现上有争议,对于将它们添加到标准库中存在一些担忧。

可以合理地假设,至少有一些类型由于非技术原因而不是Default


有一个问题#31865(至少对于CondVar,我已经记录了其他问题)。我已经推送了[PR#32807](https://github.com/rust-lang/rust/pull/32807) - llogiq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接