1 个不稳定版本
0.0.1 | 2024年8月1日 |
---|
#17 在 #面向对象
每月113次下载
3.5MB
12K SLoC
Rust 中的行为导向并发
有关行为导向并发模型的介绍,请参阅 OOPSLA 2023 论文。这个库旨在提供对在论文中介绍的 Verona 运行时 的 idiomatic Rust 绑定。
let string = Cown::new(String::new());
let vec = Cown::new(Vec::<i32>::new());
when(&string, |mut s| {
assert_eq!(&*s, "");
s.push_str("foo");
});
when(&vec, |mut v| {
assert_eq!(&*v, &[]);
v.push(101);
});
when((&string, &vec), |(mut s, mut v)| {
assert_eq!(&*s, "foo");
assert_eq!(&*v, &[101]);
s.push_str("bar");
v.push(666);
});
when(&string, |s| assert_eq!(&*s, "foobar"));
when(&vec, |v| assert_eq!(&*v, &[101, 666]));
当前状态
这是一个研究项目。它目前不适合在研究之外使用。
限制
注意:此列表不是详尽的。如果你做了任何奇怪的事情,你可能会在 verona-rt 的深处遇到崩溃。这并不是说你不应该这样做,只是提醒你目前它的鲁棒性。实际上,如果你发现了这里没有列出的事情,请 让我知道。
-
不要泄露线程:当主线程结束时,所有其他线程都会关闭。如果你在其他线程中访问了 verona-rt 资源,你会遇到麻烦。
-
在调度器内部运行一切:使用
with_scheduler
设置和拆除全局调度器状态。 -
不要恐慌:如果你在调度器上恐慌,会发生任意糟糕的事情。
-
不要创建很多调度器:一切都应该使用同一个调度器。如果你在一堆线程上调用 `with_scheduler``,你会度过糟糕的一天(除非你喜欢调试不可复现的段错误 :))。
-
运行线程局部析构函数:(特别是如果使用 leak-decor),如果你不确保运行
thread_local
析构函数,你将得到竞态条件的假阳性。值得注意的是
std::thread::scope
,如果不调用 在句柄上调用.join()
,则不保证运行它们 。感谢 Mara Bos 告诉我这一点。