我想比较函数的不同实现的程序集,但我不想实现某些功能,只需声明它们。
在 Rust 中,前向声明通常是不必要的,因为编译器不需要函数来解析它们(与 C 中不同)。但是,是否有可能做一些等同于前向声明的事情?
无法前向声明函数。Rust 中的任何给定实体都只有一个声明。
但是,您可以使用unimplemented!()和todo!()宏来快速填充由于某种原因您还不想实现的函数体。两者基本上都是panic!()特定错误消息的别名。
如果您将函数声明为 as#[inline(never)]您将获得函数调用指令以防止进一步优化。
主要限制是优化后你的函数不能为空,所以它必须有一些副作用(感谢@hellow 建议使用compiler_fence而不是println!)。
例如,这段代码(Godbolt):
pub fn test_loop(num: i32) {
for _i in 0..num {
dummy();
}
}
#[inline(never)]
pub extern fn dummy() {
use std::sync::atomic::*;
compiler_fence(Ordering::Release);
}
Run Code Online (Sandbox Code Playgroud)
将产生以下程序集(带有-O),我认为您需要:
pub fn test_loop(num: i32) {
for _i in 0..num {
dummy();
}
}
#[inline(never)]
pub extern fn dummy() {
use std::sync::atomic::*;
compiler_fence(Ordering::Release);
}
Run Code Online (Sandbox Code Playgroud)
加上它的代码dummy()实际上是空的:
example::dummy:
ret
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |