gpt4 book ai didi

rust - Rust会优化掉未使用的函数参数吗?

转载 作者:行者123 更新时间:2023-12-03 11:24:15 27 4
gpt4 key购买 nike

我有一个类型的功能

f: fn(x: SomeType, y: Arc<()>) -> ISupposeTheReturnTypeDoesNotMatter
编译时(有或没有优化),是否会优化 yy的目的是限制正在运行的 f实例的数量,如果对 y的引用次数过多,则 f的调用方将不会调用 f,直到 y的引用计数变低为止。
编辑:澄清我的意图
目的是控制运行中的http请求的数量(由上面的 f表示),伪代码如下所示:
let y = Arc::new(());
let all_jobs_to_be_done = vector_of_many_jobs;
loop {
while y.strong_count() < some_predefined_limit {
// we have some free slots, fill them up with instances of f,
// f is passed with a clone of y,
// so that the running of f would increase the ref count,
// and the death of the worker thread would decrease the ref count
let work = all_jobs_to_be_done.pop();
let ticket = y.clone();
spawn_work(move || {f(work, ticket)});
}

sleep_for_a_few_seconds();
}
进行这种看似骇人听闻的工作的原因是,我找不到满足我需要的库(使用一个数量有限的异步(tokio)工作人员来更改工作队列,并在工作失败时重新排队该工作)

最佳答案

Will Rust optimize away unused function arguments?


是的,LLVM(rustc的后端)能够在删除未使用的变量时优化掉未使用的变量,但不会改变程序的行为,尽管没有任何保证可以做到。 rustc在LLVM之前也有一些通过,但是同样适用。
知道什么才算是程序行为是件棘手的事。但是,重新计数机制中使用的多线程基元通常是由于充分的原因而无法优化的事情。请参阅Rust引用以获取更多信息(其他可能有用的资源包括nomicon,不同的GitHub存储库,Rust论坛,Rust使用的C++ 11内存模型等)。
另一方面,如果您询问语言遇到未使用的参数时的语义是什么,那么否,Rust不会忽略它们(希望永远不会!)。

will the y be optimized away?


不,这是一种有副作用的类型。例如,删除它需要运行非平凡的代码。

The intention of the y is to limit the number of the running instances of f


这样的安排并不限制正在运行 f的线程数,因为 Arc不是互斥体,即使它是某种互斥体,您也可以根据需要构造尽可能多的独立线程。

关于rust - Rust会优化掉未使用的函数参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63697356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com