Send and Sync 在 libcore 中的作用是什么?
What is the role of Send and Sync in libcore?
Sync
和 Send
在标准库中的 thread
API 中扮演了重要角色。但是,它们也包含在 libcore
中。在后者中,有几种实现它们的类型,但我找不到任何 "consumers",也就是说,一些 API 会使用这些特征作为边界。
他们有编译器知道的一些特殊的 behavior/meaning 吗?请注意,它们是 lang 项目,因此它们在某种程度上是特殊的。 Sync
好像是related to statics,但是link就不多说了。
TL;DR: 如果 Send
和 Sync
是关于线程安全的,它们在 libcore
中扮演什么角色是不是没有多线程的概念?编译器将什么语义分配给它们作为 lang 项?
if Send
and Sync
are about thread-safety, what role do they fulfill in libcore
where there is no notion of multi-threading?
libcore
是设置语言的核心概念; Send
和 Sync
是语言的核心:编译器知道它们并给出原因1.
libcore
不 使用 多线程这一事实本身是正交的,与此选择无关。
顺便说一句,请考虑仅仅因为 libcore
没有多线程并不意味着不能在 libcore
之上构建一个具有多线程的替代标准库.那毕竟是把core
和std
分开的目的。
1 正如@kennytm 在评论中提到的,Rust 有一个用户可访问的机制,允许根据标记特征是否由所有结构字段,或没有。这对于 Send
和 Sync
来说有点不够,因为它不支持 &(Trait + Send)
,因此编译器需要关于这两个的特殊知识,这就是为什么它们是 lang 项。
The compiler will crash if you declare a static
variable and no Sync
trait exists.
毕竟,仅仅因为我们没有 libstd 的线程实现并不意味着没有并发访问在进行(如果您是裸机,您可能需要担心中断处理程序)。所以,为了安全的静态变量,编译器需要知道静态变量是否可以安全地并发访问。
Sync
和 Send
在标准库中的 thread
API 中扮演了重要角色。但是,它们也包含在 libcore
中。在后者中,有几种实现它们的类型,但我找不到任何 "consumers",也就是说,一些 API 会使用这些特征作为边界。
他们有编译器知道的一些特殊的 behavior/meaning 吗?请注意,它们是 lang 项目,因此它们在某种程度上是特殊的。 Sync
好像是related to statics,但是link就不多说了。
TL;DR: 如果 Send
和 Sync
是关于线程安全的,它们在 libcore
中扮演什么角色是不是没有多线程的概念?编译器将什么语义分配给它们作为 lang 项?
if
Send
andSync
are about thread-safety, what role do they fulfill inlibcore
where there is no notion of multi-threading?
libcore
是设置语言的核心概念; Send
和 Sync
是语言的核心:编译器知道它们并给出原因1.
libcore
不 使用 多线程这一事实本身是正交的,与此选择无关。
顺便说一句,请考虑仅仅因为 libcore
没有多线程并不意味着不能在 libcore
之上构建一个具有多线程的替代标准库.那毕竟是把core
和std
分开的目的。
1 正如@kennytm 在评论中提到的,Rust 有一个用户可访问的机制,允许根据标记特征是否由所有结构字段,或没有。这对于 Send
和 Sync
来说有点不够,因为它不支持 &(Trait + Send)
,因此编译器需要关于这两个的特殊知识,这就是为什么它们是 lang 项。
The compiler will crash if you declare a static
variable and no Sync
trait exists.
毕竟,仅仅因为我们没有 libstd 的线程实现并不意味着没有并发访问在进行(如果您是裸机,您可能需要担心中断处理程序)。所以,为了安全的静态变量,编译器需要知道静态变量是否可以安全地并发访问。