2015-06-10 15 views
24

Vorrei contrassegnare funzioni/metodi come deprecato. Ho cercato di applicare l'attributo deprecated:Posso contrassegnare una funzione come deprecata?

#[deprecated] 
fn old_way_of_doing_it() { 

ma questo produce un errore:

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

C'è un modo in cui posso avere il compilatore avverte un consumatore della mia biblioteca che una funzione è deprecato ?

Non ho esperienza, ma sto considerando di sperimentare plug-in compilatori e attributi personalizzati, ma suppongo che ciò richiederebbe al consumatore di utilizzare anche il plug-in, che è forse irragionevole (o potrebbe essere una quantità irragionevole di lavoro per da implementare?)

Come una domanda a parte per curiosità, perché l'attributo deprecato è applicabile solo alla libreria standard?

risposta

16

Dal Rust 1.9.0 (2016 May 26th) è possibile utilizzare l'attributo #[deprecated] nelle proprie casse (RFC 1270). La sintassi è:

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

getterà il seguente avviso ogni volta che si utilizza 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() 
      ^~~~~~~~~~ 

Si possono trovare maggiori informazioni nella RFC.

6

Aggiornamento:#[deprecated] è attualmente disponibile (a febbraio 2016) in orario notturno. Dovrebbe essere disponibile in stabile intorno all'inizio di marzo 2016.

Non c'è ancora modo di farlo nelle librerie esterne.

Fare ciò è molto desiderabile (l'ho sicuramente desiderato più volte), ma è stata presa la decisione di concentrare gli sforzi di progettazione e implementazione sulle funzionalità richieste dalla libreria standard a 1.0 e di posticipare l'ottimizzazione di un progetto per esterni biblioteche fino a tardi. Il RFC discute un po ':

It's important to note that these stability attributes are only known to be useful to the standard distribution, because of the explicit linkage to language versions and release channels. [...]. A general mechanism for indicating API stability will be reconsidered in the future.

[...]

With respect to stability attributes and Cargo, the proposed design is very specific to the standard library and the Rust compiler without being intended for use by third-party libraries. It is planned to extend Cargo's own support for features (distinct from Rust features) to enable this form of feature development in a first-class method through Cargo. At this time, however, there are no concrete plans for this design and it is unlikely to happen soon.

Non è stata significativa la discussione in merito alla richiesta di pull troppo sul:

(Questo RFC è la fonte canonica per informazioni su questo.)

Sì, richiederebbe al consumatore di utilizzare il plug-in e non sono del tutto sicuro se il compilatore renda facile per un plug-in ottenere tutte le informazioni necessarie per emulare l'attuale #[deprecated] integrato.

Problemi correlati