Rust中的函数原型是什么?

时间:2019-01-10 16:49:51

标签: function rust prototype terminology

我想了解Rust中#[inline]属性的行为,因此我正在阅读the Attributes section of The Rust Reference。这很有帮助,但是我发现描述的这一部分令人困惑(强调我的意思):

  

inline 属性向编译器建议,应将属性函数的副本放置在调用方中,而不是生成代码以在定义的地方调用该函数。

     

此属性可用于函数和函数原型,尽管它对函数原型没有任何作用。

对于#[cold]属性重复此警告。

我从未听说过与Rust相关的“功能原型”一词。我知道JavaScript中存在这样的概念,但是JavaScript和Rust的对象和类型系统非常不同!这是什么意思?

进一步搜索,发现在the Error Index中提到了两个函数原型:

  

E0034

     

编译器不知道要调用哪种方法,因为不止一种方法具有相同的原型。

  

E0580

     

main函数的声明不正确。 main函数原型永远不要带参数。

在这种情况下,“函数原型”似乎表示“函数签名”之类的东西-组成函数外部接口的名称,参数和类型。这也似乎是what it means in the context of C/C++。但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开头,因此说将属性放在签名上没有任何意义,因为这是将属性放在函数上时要做的事。

在Rust中,“功能原型”一词是什么意思?

1 个答案:

答案 0 :(得分:10)

  

但是,这似乎与上面的用法不符;每个函数定义都以函数的签名开头,因此说将属性放在签名上没有任何意义,因为这是将属性放在函数上时要做的事。

是的,每个函数都以签名开头,但并非每个签名都是函数定义的一部分。也就是说,可以有一个签名,但是没有任何主体(例如特征),这就是您引用的文档中“原型”的含义。像这样:

trait Foo {
    #[inline] // This annotation does nothing
    fn foo();
}