Rust中的函数原型是什么?

9
我想了解 Rust 中 #[inline] 属性的行为,所以我阅读了The Rust Reference中的属性部分。它非常有帮助,但是我发现描述中的这部分让人感到困惑(重点在于我):

inline 属性建议编译器将带有该属性的函数副本放置在调用者中,而不是生成调用该函数的代码。

该属性可用于函数和函数原型,但在函数原型上不起作用。

此警告对于 #[cold] 属性也是如此。
我从未听说过“函数原型”一词与 Rust 相关。我知道这个概念在 JavaScript 中存在,但是 JavaScript 和 Rust 的对象和类型系统非常不同!这里是什么意思?
进一步搜索,我在Error Index中找到了两个有关函数原型的提及:

E0034

编译器不知道调用哪个方法,因为有多个方法具有相同的原型。

E0580

main函数声明不正确。 main函数原型不应该带参数。

在这种情况下,“函数原型”似乎意味着“函数签名”——组成函数外部接口的名称、参数和类型。这也似乎是C/C++语言环境下的含义。然而,这与上面的用法似乎不符;每个函数定义都以函数的签名开始,因此将属性放在签名上时说它什么也不做是没有意义的,因为这就是在函数上放置属性时所做的事情。

在Rust语言环境中,“函数原型”一词是什么意思?


2
我理解它是指在特质声明中的函数签名,没有默认的函数体。 - Peter Hall
更像是 C 语言中的原型,但没有那些不方便的地方 ;) - Stargateur
1个回答

12
然而,这似乎与上面的用法不一致。每个函数定义都从函数的签名开始,因此将属性放在签名上时,说它什么也没做是没有意义的,因为你正是在把属性放在一个函数上。
是的,每个函数都以签名开头,但不是每个签名都是函数定义的一部分。也就是说,在特征中可能有一个签名但没有主体,这就是你在所引用的文档中所说的“原型”的含义。像这样:
trait Foo {
    #[inline] // This annotation does nothing
    fn foo();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接