且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

我可以将函数标记为已弃用吗?

更新时间:2023-02-09 12:33:11

自从 Rust 1.9.0(2016 年 5 月 26 日) 你可以使用 #[deprecated] 属性在你自己的箱子里(RFC 1270).语法是:

#[deprecated(since=0.5.0", note=请改用‘new_method’")]pub fn old_method() { ..;}

每当您使用 old_method 时,它都会抛出以下警告:

<anon>:6:5: 6:15 警告:使用已弃用的项目:请改用`new_method`,#[warn(deprecated)] 默认开启<anon>:6 old_method()^~~~~~~~~~

您可以在 RFC 中找到更多信息.

I'd like to mark functions/methods as deprecated. I tried to apply the deprecated attribute:

#[deprecated]
fn old_way_of_doing_it() {

but this yields an error:

error: stability attributes may not be used outside of the standard library

Is there a way in which I can have the compiler warn a consumer of my library that a function is deprecated?

I have no experience, but I'm considering experimenting with compiler plugins and custom attributes, but I guess that would require the consumer to also use the plugin, which is maybe unreasonable (or may be an unreasonable amount of work for me to implement?)

As a side question out of curiosity, why is the deprecated attribute only applicable to the standard library?

Since Rust 1.9.0 (2016 May 26th) you can use the #[deprecated] attribute in your own crates (RFC 1270). The syntax is:

#[deprecated(since="0.5.0", note="please use `new_method` instead")]
pub fn old_method() { ..; }

It will throw the following warning whenever you use old_method:

<anon>:6:5: 6:15 warning: use of deprecated item: please use `new_method` instead, #[warn(deprecated)] on by default
<anon>:6     old_method()
             ^~~~~~~~~~

You may find more information in the RFC.