Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 为什么不为互斥、RWLock、CondVar和Duration实现默认值?_Rust - Fatal编程技术网

Rust 为什么不为互斥、RWLock、CondVar和Duration实现默认值?

Rust 为什么不为互斥、RWLock、CondVar和Duration实现默认值?,rust,Rust,只有当派生类型的内容也实现了Default时,trait才能是#[派生(…)]d。这意味着特性实现得越多,就越容易使用。但是,我注意到,std中的一些类型缺少实现,尽管它们具有完全有效的默认值(有时取决于泛型参数) Mutex和RWLock可以通过new()(其中T:Default)实现 CondVar可以通过CondVar::new() Duration可以派生(获得零Duration,这是一个合理的默认值) 这些遗漏是否有技术原因?一些人对调试实现提出了类似的问题,请查看哪一个也只能在类

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

  • Mutex
    RWLock
    可以通过
    new()
    其中T:Default
    )实现
  • CondVar
    可以通过
    CondVar::new()
  • Duration
    可以派生(获得零Duration,这是一个合理的默认值)

这些遗漏是否有技术原因?

一些人对
调试
实现提出了类似的问题,请查看哪一个也只能在类似于
默认值
的条件下派生

不幸的是,相应的PR“”似乎表明某些类型不是
Debug
,仅仅因为没有人为它们编写
Debug
实现。其他一些类型对于实现应该做什么有争议,人们担心将它们添加到标准库中


出于同样的非技术原因,可以合理地假设至少有一些类型不是默认值。

我不同意零持续时间,这是一个合理的默认值,但其他类型肯定是。为什么?你认为根本没有合理的违约,还是你认为有更合理的违约?我想说没有合理的违约。大多数情况下,我会考虑超时的持续时间,超时为零对我来说没有意义,也不会选择任何其他值。虽然我确实看到数字实现了
Default
0
,但是\_(ツ)_/“@Shepmaster:我使用的内部框架的默认超时值为0。奇怪的是,如果您忘记覆盖它,通常回复速度不够快……有一个问题#31865(至少对于CondVar,我记下了其他问题)。我已经推了