Rust: БСсполСзная диагностика ΠΏΡ€ΠΈ использовании макросов proc 2.0 Π±Π΅Π· #![feature(use_extern_macros)]

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 17 Π°ΠΏΡ€. 2017  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: rust-lang/rust

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ мСня Π±Ρ‹Π»ΠΈ эти Π΄Π²Π° Ρ„Π°ΠΉΠ»Π°:

// foo.rs
#![crate_type = "proc-macro"]

extern crate proc_macro;
use proc_macro::TokenStream;

#[proc_macro]
pub fn foo(x: TokenStream) -> TokenStream {
    x
}
// bar.rs
extern crate foo;
use foo::foo;

fn main() {
    foo!();
}

Когда я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ rustc foo.rs && rustc bar.rs -L. , я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ошибки:

warning: proc macro crates and `#[no_link]` crates have no effect without `#[macro_use]`
 --> bar.rs:1:1
  |
1 | extern crate foo;
  | ^^^^^^^^^^^^^^^^^

error[E0432]: unresolved import `foo::foo`
 --> bar.rs:2:5
  |
2 | use foo::foo;
  |     ^^^^^^^^ no `foo` in the root

error: cannot find macro `foo!` in this scope
 --> bar.rs:5:5
  |
5 |     foo!();
  |     ^^^

error: aborting due to 2 previous errors

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли я ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽ совСту компилятора ΠΈ вмСсто этого ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ #[macro_use] , я ΠΏΠΎΠ»ΡƒΡ‡Ρƒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ:

error: procedural macros cannot be imported with `#[macro_use]`
 --> bar.rs:5:5
  |
5 |     foo!();
  |     ^^^
  |
  = help: instead, import the procedural macro like any other item: `use foo::foo;`

error: aborting due to previous error

Но это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ мСня Π±Ρ‹Π»ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ!

РСальноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ #![feature(use_extern_macros)] ΠΊ bar.rs . ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ это вмСсто этого, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ встрСчаСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ макрос proc.

A-diagnostics A-macros-2.0 C-enhancement

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ с nightly я Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ: warning: this feature has been stable since 1.29.0. Attribute no longer needed Π·Π° #![feature(proc_macro)] .

Но Ρƒ мСня всС Π΅Ρ‰Π΅ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ @lfairy. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли я Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой макрос, я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ error: cannot find macro 'my_macro!' in this scope . Но Ссли я добавлю use my_crate::my_macro; , я ΠΏΠΎΠ»ΡƒΡ‡Ρƒ error[E0432]: unresolved import 'my_crate::my_macro' .

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ proc_macro Π½Π° use_extern_macros . Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ подсказкой Π² ​​сообщСнии Attribute is no longer needed .. ;)

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ диагностичСскоС сообщСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ #![feature(proc_macro)] ΠΊ bar.rs Π½Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ срок. (Или сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π»ΠΈ эта функция, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅.) Π― Π½Π΅ Π²ΠΎΠ·Ρ€Π°ΠΆΠ°ΡŽ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΉ части прСдлоТСния, Ссли ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ с nightly я Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ: warning: this feature has been stable since 1.29.0. Attribute no longer needed Π·Π° #![feature(proc_macro)] .

Но Ρƒ мСня всС Π΅Ρ‰Π΅ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ @lfairy. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли я Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой макрос, я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ error: cannot find macro 'my_macro!' in this scope . Но Ссли я добавлю use my_crate::my_macro; , я ΠΏΠΎΠ»ΡƒΡ‡Ρƒ error[E0432]: unresolved import 'my_crate::my_macro' .

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ proc_macro Π½Π° use_extern_macros . Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ подсказкой Π² ​​сообщСнии Attribute is no longer needed .. ;)

МногиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ здСсь Π±Ρ‹Π»ΠΈ стабилизированы, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это, вСроятно, устарСло, поэтому Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽ.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

SharplEr picture SharplEr  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

defuz picture defuz  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Majora320 picture Majora320  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

wthrowe picture wthrowe  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

zhendongsu picture zhendongsu  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ