Rust 发送和同步在libcore中的作用是什么?

Rust 发送和同步在libcore中的作用是什么?,rust,intrinsics,Rust,Intrinsics,Sync和Send在标准库的线程API中扮演着重要角色。但是,它们也包含在libcore中。在后者中,有一些类型实现了它们,但我找不到任何消费者,也就是说,一些API会使用这些特性作为边界 他们是否有一些编译器知道的特殊行为/意义?请注意,它们是lang项,因此在某种程度上是特殊的。同步似乎是,但链接并没有太多细节 TL;DR:如果发送和同步是关于线程安全的,那么在没有多线程概念的libcore中,它们扮演什么角色?编译器将它们指定为lang项的语义是什么 如果发送和同步是关于线程安全的,那么在

Sync和Send在标准库的线程API中扮演着重要角色。但是,它们也包含在libcore中。在后者中,有一些类型实现了它们,但我找不到任何消费者,也就是说,一些API会使用这些特性作为边界

他们是否有一些编译器知道的特殊行为/意义?请注意,它们是lang项,因此在某种程度上是特殊的。同步似乎是,但链接并没有太多细节

TL;DR:如果发送和同步是关于线程安全的,那么在没有多线程概念的libcore中,它们扮演什么角色?编译器将它们指定为lang项的语义是什么

如果发送和同步是关于线程安全的,那么在没有多线程概念的libcore中,它们扮演什么角色

libcore是关于设置语言的核心概念;“发送”和“同步”是该语言的核心:编译器知道它们以及它们的原因1

libcore本身不使用多线程这一事实是正交的,与此选择无关

作为一个旁白,请考虑一下,因为LBCype没有多线程,并不意味着不能在具有多线程的LIbCon之上建立另一个标准库。也就是说,归根结底,分离核心和标准的目的

1正如@kennytm在评论中提到的,Rust有一个用户可访问的机制,允许根据所述特征是否由所有a结构字段实现自动传播标记特征。但是,这对于发送和同步来说是稍微不够的,因为它不支持&Trait+Send,因此编译器需要关于这两个项目的专门知识,这就是为什么它们是lang项。


毕竟,仅仅因为我们没有libstd的线程实现,并不意味着如果您是裸机,就没有并发访问,您可能需要担心中断处理程序。因此,为了保证静态变量的安全,编译器需要知道静态变量是否可以安全地并发访问。

这本书有一节详细介绍了静态变量。您是否发现其中有不清楚的地方?同样的问题,为和添加API文档。-在后者中,有几种类型实现了它们,但我找不到任何使用者-我认为记录线程安全是一种很好的做法。与发送和同步。参考@ArtemGr@Shepmaster@E_net4我添加了另一种措辞,我希望我的问题现在更清楚。请注意,我是专门指他们在libcore中的角色。@rvid让我们将问题缩小到一种您认为是一个好例子的特定类型。[…]libcore不使用多线程本身是正交的[…]可能是这样,但我怀疑不是这样。毕竟,它们是lang项,所以它们可能在编译过程中独立于libstd发挥某些作用。请注意,我上面链接的引用明确表示:静态需要同步。现在我的问题是:如果你没有线程,这真的有作用吗?或者它只是libstd的脚手架?那Send呢?-或者它只是libstd线程的脚手架!=libstd@rvidal:Sync和Send是lang项,我的意思是编译器知道它们。为了获得数据竞争自由,必须分析所有类型的Sync和Send属性,即使是核心类型。当然,如果您没有实际使用多个线程,那么这些属性和分析就有点浪费了:它们没有任何用途。另一方面,它们也不施加运行时惩罚,可能只施加最小的编译时惩罚,所以这并不是什么大问题。现在,无论您是从libstd还是其他源获得多线程,都可以自由地进行数据竞争。@ArtemGr threads!=我知道这一点。完整的措辞将是构建一个支持操作系统的std库,该库将包含像libstd本身这样的线程。我只是没有足够的角色@马蒂厄姆。谢谢你的回答。这是否意味着,如果您正在进行裸机编程,那么我在前面的评论中链接的编译错误在某种程度上是虚假的?