Rust: "рдореИрдХреНрд░реЛрдЬрд╝ 1.1" рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджрд╛ (RFC # 1681)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдЕрдЧре░ 2016  ┬╖  268рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджрд╛-рд▓рдВрдЧ / rfcs # 1681ред

cc @alexcrichton

рд╕реНрдерд┐рд░реАрдХрд░рдг TODO

рд▓рд┐рдЯрдорд╕ рдкрд░реАрдХреНрд╖рдг:

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  • рдХреНрд░реЗрдЯ рдирд╛рдо, рд╡рд░реНрддрдорд╛рди рдореЗрдВ proc_macro
  • рдЯреЛрдХрд░рд╛ рдкреНрд░рдХрд╛рд░, рд╡рд░реНрддрдорд╛рди рдореЗрдВ proc-macro
  • #[proc_macro_derive(Foo)] рд╡рд┐рд╢реЗрд╖рддрд╛
  • рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП proc-macro рдХреНрд░реЗрдЯреНрд╕ -L рдФрд░ #[macro_use] рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
  • рдЫрд╛рдпрд╛рдВрдХрди рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ
  • рдХреЛрдИ рд╕реНрд╡рдЪреНрдЫрддрд╛ рдирд╣реАрдВ
  • рд╕рдВрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рдкрд╛рд╕ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
  • рдХрд╛рд░реНрдЧреЛ рдкреНрд░рдХрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛, рд╡рд░реНрддрдорд╛рди рдореЗрдВ proc-macro = true

рдЬреНрдЮрд╛рдд рдХреАрдбрд╝реЗ:

  • [] - рдкреИрдВрдХрд┐рдЧ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЧрд▓рдд рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - # 36935
  • [] - mod foo рдЕрд╕рдлрд▓ рдХреЗ рд╕рд╛рде рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо - # 36691
  • [] - рдбреЙрдХреНрд╕ proc_macro - # 38749 рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
  • [x] - рдХрдИ рдореЛрдб рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХрдард┐рди рд╣реИ - https://github.com/rust-lang/rust/issues/35900#issuecomment -252499766
  • [x] - рдХрд╛рд░реНрдЧреЛ рдкрд░реАрдХреНрд╖рдг рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдореИрдХреНрд░реЛ рд▓рд┐рдмрд╛рд╕ - # 37480
  • [x] - рдЖрджреЗрд╢ рдЕрднреА рднреА рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ - https://github.com/rust-lang/rust/issues/35900#issuecomment -252430957 (https://github.com/rust-lang/rust/pull/37067 рджреНрд╡рд╛рд░рд╛ fxed)
  • [x] - рд░рд╕реНрдЯ-рдореИрдХреНрд░реЛ рдХреНрд░реЗрдЯреНрд╕ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - https://github.com/rust-lang/rust/issues/36820 (# 36847 рдореЗрдВ рддрдп)
  • [x] - рдХрд╛рд░реНрдЧреЛ рдХрд╛ рдЕрдХреНрд╕рд░ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ - https://github.com/rust-lang/rust/issues/36625 (https://github.com/rust-lang/rust/pull/36776 рдореЗрдВ рддрдп)
  • [x] - рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдЬреАрд╡рди рдХреЛ рдХрдард┐рди рдмрдирд╛рддреА рд╣реИрдВ - https://github.com/rust-lang/rust/issues/35900#issuecomment -245978831

    • [x] - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдХреНрд░рдо-рдкрд╣рд▓рд╛ - https://github.com/rust-lang/rust/issues/35900#issuecomment -246840357 (https://github.com/rust-lang-rust рдореЗрдВ рддрдп) / рдкреБрд▓ / 36782)

      рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди TODO

  • [x] - рдПрдХ rustc_macro рдЯреЛрдХрд░рд╛ рдмрдирд╛рдПрдБ

    • [x] - librustc_macro рд▓рд┐рдВрдХ libsyntax ред librustc_macro librustc_driver рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ
    • [x] - рд╣рдорд╛рд░реЗ рдорд╛рдирдХ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЕрд╕реНрдерд┐рд░ рд░реВрдк рдореЗрдВ rustc_macro рдЯреИрдЧ рдХрд░реЗрдВред
    • [x] - рдХреЗрд╡рд▓ rustc_macro #![crate_type = "rlib"] , рдПрдХ dylib рдХрд╛ рдЙрддреНрдкрд╛рджрди рди рдХрд░реЗрдВред
    • [x] - рд▓рд╛рдЧреВ рдПрдкреАрдЖрдИ рдХреЗ rustc_macro рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ libsyntax s ' TokenStream рдЖрдВрддрд░рд┐рдХ
    • [x] - rustc_macro TokenStream рд▓рдВрдЧ рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗред
  • [x] - rustc_macro_derive рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВ

    • [x] - рдпрд╣ рд╕рд╣реА рд░реВрдк рдореЗрдВ foo(bar) рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ, рдХреЛрдИ рдЕрдиреНрдп рддрд░реНрдХ / рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ

    • [x] - рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓рд╛рдЧреВ рд╣реИ

    • [x] - рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд░реВрдЯ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИ

    • [x] - рдКрдкрд░ рдЬреЛрдбрд╝реЗ рдЧрдП TokenStream рд▓рдВрдЧ рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ

    • [x] - рд╕рднреА рдлрдВрдХреНрд╢рди рд╕рд┐рдВрдмрд▓ рдХреЛ rustc_macro_derive рдХреЗ рд╕рд╛рде рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдореЛрдб рдХреЗ рд╕рд╛рдеред

  • [x] - рдЕрдиреНрдп рдХреНрд░реЗрдЯ рдХреЗ рд▓рд┐рдП rustc-macro рдХреНрд░реЗрдЯ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВ

    • [x] - рдбрд┐рд▓реЗрд┐рдм рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рддрд╛рд░ рджреЗрдВ

    • [x] - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбрд┐рд▓реАрдм рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

    • [x] - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ rustc-macro рдмрдХреНрд╕реЗ рдХреЛ рдбрд╛рдпрд▓рд┐рдмреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

    • [x] - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ #[rustc_macro_derive] рд╕рд╛рде рдЯреИрдЧ рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ _reachable_ рдЖрдЗрдЯрдо рдирд╣реАрдВ рд╣реИрдВ

    • [x] - cfg(rustc_macro) рдХреЛ рдЕрд╕реНрдерд┐рд░ cfg рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕реЗ rustc-macro рдХреНрд░реЗрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВ

    • [x] - рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ rustc-macro crates рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ libsytnax рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛ

  • [x] - #[macro_use] rustc-macro рдХреНрд░реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рднрд░реЗрдВ

    • [x] - рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХреЗ рд▓реЛрдбрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ, rustc-macro рдХреНрд░реЗрдЯреНрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░рдХреЗ dylib / rlib рд╕реЗ рдЖрдЬ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрдм рдХреНрд░реЗрдЯ рдХрд░рдирд╛

    • [x] - рдкреНрд░рддреАрдХ / рд╡реНрдпреБрддреНрдкрдиреНрди рдореЛрдб рдпреБрдЧреНрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП rustc-macro рд▓рд┐рдП рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ

    • [x] - dlopen dylib

    • [x] - рдХреЛрдИ рднреА рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдпрджрд┐ рдХреЛрдИ рднреА рд╡реНрдпреБрддреНрдкрдиреНрди рдореЛрдб рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдЫрд╛рдпрд╛ рджреЗрдЧрд╛ред

  • [x] - рдХрд╛рд░реНрдЧреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдЬреЛрдбрд╝реЗрдВ

    • [x] - рдкрд╣рдЪрд╛рди rustc-macro рдХреЗ рд╕рдорд╛рди plugin = true

    • [x] - рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ --crate-type=rustc-macro

    • [x] - рд░рд╕реНрдЯ-рдореИрдХреНрд░реЛ рдХреНрд░реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ / рдЯрд╛рд░рдЧреЗрдЯ рд▓реЙрдЬрд┐рдХ рдкреНрд▓рдВрдм рдХрд░реЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдХреНрд░реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ (рдЬреИрд╕реЗ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рд░рд╕реНрдЯ-рдореИрдХреНрд░реЛ рдХреНрд░реЗрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ)

  • [x] - рдЯреЗрд╕реНрдЯ

    • [x] - рдПрдХ рд░рд╕реНрдЯ-рдореИрдХреНрд░реЛ, рдбрдореА #[derive] рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдореЛрдХ рдЯреЗрд╕реНрдЯ

    • [x] - рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ

    • [x] - рдЧрд▓рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ

    • [рдПрдХреНрд╕] - рдЯреЛрдХрд░рд╛ рдкреНрд░рдХрд╛рд░ рдЬрдВрдЧ-рдореИрдХреНрд░реЛ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА (рдЬреИрд╕реЗ рд░рд╕реНрдЯ-рдореИрдХреНрд░реЛ + рдбрд╛рдпрд▓рд┐рдм) рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ

    • [x] - рдЕрд╡рдзрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рднрдпрд╛рд╡рд╣ рдирд╣реАрдВ рд╣реИ

    • [x] - рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдлрд╝реАрд▓реНрдб рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛

    • [x] - рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдЖрд╡рд░реНрдзрди рдЬреЛрдбрд╝рдирд╛

    • [x] - рдореЗрдЬрдмрд╛рди рд░рд╕реНрдЯ-рдореИрдХреНрд░реЛ рдЯреЛрдХрд░рд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕ рд╕рдВрдХрд▓рди рджрд┐рдЦрддрд╛ рд╣реИ

    • [x] - рдЬрдВрдЧрд▓рд╛-рдореИрдХреНрд░реЛ рдЯреЛрдХрд░рд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗрдирд┐рд▓рд╛ рдбрд╛рдЗрд▓рд┐рдм рдХреЛ рд▓реЛрдб рди рдХрд░реЗрдВ

    • [x] - рд░рд╕реНрдЯ-рдореИрдХреНрд░реЛ рдЯреЛрдХрд░реЗ рдореЗрдВ рд╕реНрдереВрд▓ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдкрд░реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛

    • [x] - рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

    • [x] - рдПрдХ рд╕рдВрдХрд▓рди рдореЗрдВ рджреЛ рдореИрдХреНрд░реЛ рдХреНрд░реЗрдЯ рд▓реЛрдб рдХрд░реЗрдВ

B-RFC-implemented B-unstable T-lang final-comment-period

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдареАрдХ рд╣реИ, рдореИрдВ рдЖрдЬ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдХрд┐рддрдирд╛ рджреВрд░ рдЬрд╛рдирд╛ рд╣реИред

рд╕рднреА 268 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╡рд░рдг рдХреЛ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдореЗрдВ 90% рд░рд╛рд╕реНрддреЗ рдорд┐рд▓реЗрдВрдЧреЗ

рдареАрдХ рд╣реИ, рдореИрдВ рдЖрдЬ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдХрд┐рддрдирд╛ рджреВрд░ рдЬрд╛рдирд╛ рд╣реИред

cc https://github.com/rust-lang/rust/pull/35957 , рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

# 35957 рд╕реЗ: рд╣рдореЗрдВ рд▓рд╛рдЗрдмреНрд░рд╕реНрдЯреЗрдХ_рдореИрдХреНрд░реЛ рдХреЗ рдирд╛рдо рдкрд░ рдХреБрдЫ рдФрд░ рдХреНрд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓рд╛ рдЯреЛрдХрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рд╕рднреА рдореИрдХреНрд░реЛ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП rustc_macro (рдЬреЛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╣реИ, рдХрдо рд╕реЗ рдХрдо) рддрдХ рд╕реАрдорд┐рдд рд╣реИ рдХреЗрд╡рд▓ 1.1 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП libmacro рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ macro рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд рд╢рдмреНрдж рд╣реИ (рдФрд░ рд╣рдо рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдЬреЛ рдЕрд╕рдВрднрд╡ рд╣реИред @cgswords рдФрд░ рдореИрдВ libproc_macro рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде 100% рдЦреБрд╢ рдирд╣реАрдВ рд╣реВрдВред

@nrc : рдареАрдХ рд╣реИ, рдирд╛рдордХрд░рдг рдкрд░ рдореЗрд░реЗ рддрддреНрдХрд╛рд▓ рд╡рд┐рдЪрд╛рд░:

  • extern crate macros; - рд▓рдШреБ рдФрд░ рдордзреБрд░, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдореИрдХреНрд░реЛрдЬрд╝ рдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • extern crate macro_runtime; - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЯрд┐рди рдкрд░ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ
  • extern crate metarust; - рдЬрдВрдЧ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВ
  • extern crate bikeshed; - рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рднреА рд░рдВрдЧ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!
  • extern crate macrame; - "рдореИрдХреНрд░реЛ рдореЗрдХ [r]" рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ; рдХрдЪреНрдЪреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ "рдЕрдЪреНрдЫрд╛" рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ рдмреЗрд╣рддрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ред

@nrc рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рд╣рдорд╛рд░реА рд╡рд┐рднрд┐рдиреНрди рдореИрдХреНрд░реЛ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдирд╛рдордХрд░рдг рд╣реИ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрдЧрд░ рд╣рдо libproc_macro рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ" рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рд╢рдмреНрджрд╛рд╡рд▓реАред рдпрд╣рд╛рдБ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдордЬрдмреВрдд рд░рд╛рдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЦреБрд▓реЗ рддреМрд░ рдкрд░ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд╕реНрдерд╛рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдЬ рдХрд╛ macro_rules рдХреЗрд╡рд▓ "рдореИрдХреНрд░реЛрдЬрд╝" рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪреАрдЬрд╝ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдореИрдХреНрд░реЛрдЬрд╝ рд╕реЗ рдорддрд▓рдм рд╣реИ, рдЬрдмрдХрд┐ рдЖрдкрдХреЛ "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝" рдХреЛ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ рд╣реИ? рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд рдпреЛрдЬрдирд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдЙрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ libproc_macro libmacros рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рдпрд╣рд╛рдВ рдореЗрд░реА рд╕реЛрдЪ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдореИрдХреНрд░реЛрдЬрд╝ "рдореИрдХреНрд░реЛрдЬрд╝" рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрдВрддрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрдкрдпреЛрдЧ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рд╣рдо "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝" рдмрдирд╛рдо "рдореИрдХреНрд░реЛрдЬрд╝ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ "рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди" рдФрд░ "рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд▓рдЧрдЗрди" рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдФрд░ рдПрдХ рджрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред

рд▓реЗрдХрд┐рди, рд╣рд╛рдВ, рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ" рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдкреАрдЫреЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

@nrc рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рд╕рдордЭ рд░рдЦрддрд╛ рд╣реИ! рдЬрдмрдХрд┐ "рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝" рдПрдХ рдорд╛рдореВрд▓реА рд╕рд╛ рд╣реИ, рдпрд╣ рднреА рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрддреНрддреЗрдЬрдХ / рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╢рдмреНрдж рд╣реИред "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдПрдХ рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ "рдкреНрд░рдХреНрд░рд┐рдпрд╛" рд░реВрд╕реНрдЯ рдореЗрдВ рдХреЛрдИ рдЪреАрдЬ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред "рдлрдВрдХреНрд╢рди рдореИрдХреНрд░реЛ" рдХрд╛рдлреА рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореБрдЭреЗ рдХреНрдпрд╛ рдорддрд▓рдм рджреЗ?

рд╣рд╛рдБ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдЬрдВрдЧ рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рдЬрд╛рдирд╛-рдорд╛рдирд╛ / рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╢рдмреНрдж рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рд╢рдмреНрдж рдХреЛ рдЧрдврд╝рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред "рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдореИрдХреНрд░реЛ" рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ" рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

рдирд┐рдХрдЯрддрдо рд╕рдорддреБрд▓реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрд▓ рдХрд╛ рд╢рдмреНрдж "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝" "рд╕реНрд░реЛрдд рдлрд┐рд▓реНрдЯрд░" рд╣реИ, рдЬреЛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдПрд╕рдЯреА рдЯреЛрдХрди рд╕реЗ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде) рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреБрдХреНрдд рд╡рд░реНрдгрди рд╣реИред

рд╢рд╛рдпрдж 'рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░' рдпрд╛ 'рдкреНрд░реЛрдЧреНрд░рд╛рдордореИрдЯрд┐рдХ рдореИрдХреНрд░реЛрдЬрд╝' рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

"рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ" рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдореИрдХреНрд░реЛрдЬрд╝ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред" рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ" рд╢рдмреНрдж рдкрд╕рдВрдж рд╣реИ (рдпрд╛ рд╢рд╛рдпрдж "рдХрд╕реНрдЯрдо рдореИрдХреНрд░реЛ")ред рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ _macro_ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдХрд┐ рд╡реЗ (рдЕрдВрддрддрдГ ...) рдХрд╛ рдЙрдкрдпреЛрдЧ "рдирд┐рдпрдорд┐рдд рдореИрдХреНрд░реЛрдЬрд╝" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдореБрдЭреЗ "рд╕реЛрд░реНрд╕ рдлрд┐рд▓реНрдЯрд░реНрд╕" рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ (рдореИрдВ рдпрд╣ рднреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдлрд┐рд▓реНрдЯрд░ рд╕рд┐рд░реНрдл рдбреЗрдЯрд╛ рдХреЛ рдЧрд┐рд░рд╛рдПрдВрдЧреЗ, рдЗрд╕реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рдмреНрдж рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдореИрдВ libproc_macro рдпрд╛ libmacros рд╕рд╛рде рдареАрдХ рд╣реВрдВред рдореИрдВ рдмрд╛рдж рдореЗрдВ рдкрд╕рдВрдж рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЯреЛрдХрд░реЗ рдХреЗ рдирд╛рдо рдореЗрдВ _ рд╣реЛрдиреЗ рд╕реЗ рдкреНрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬрдм рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред =)

рдПрдХ рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рд╣рдореЗрдВ рдХрднреА рднреА "рд╕рдорд░реНрдерди рджрд┐рдирдЪрд░реНрдпрд╛" рдХреА рдЙрдореНрдореАрдж рд╣реИ рдЬреЛ рдЧреИрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ? рдореБрдЭреЗ рдРрд╕реА рдХрд┐рд╕реА рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдордиреЗ рдХрд┐рдпрд╛, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рдЯреЛрдХрд░реЗ рдореЗрдВ рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ libmacros рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛрдЧрд╛ред =)

(рдореИрдВ рдЙрддреНрд╕реБрдХ-рд╡рд┐рд╕реНрддрд╛рд░ RFC рд╕реЗ @dherman рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред)

@nikomatsakis : рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдХрд┐рди рд╕реВрдХреНрд╖реНрдо рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рдкреНрд░рд╢реНрди рдореИрдВ https://github.com/rust-lang/rfcs/pull/1561#discussion_r60459479 рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ - рдХреНрдпрд╛ рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ 'рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдп?

рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рдХреЛ рджреВрд╕рд░реЗ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЦреБрдж рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╕рдорд░реНрдерди рджрд┐рдирдЪрд░реНрдпрд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛ рджреЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @dherman рдХрд╛ gensym рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд╣реА рд╕рдореНрдореЛрд╣рдХ рд╣реИред рдмреЗрд╢рдХ, рдЕрдЧрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП рдореЗрд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ "рд╣рд╛рдБ" рд╣реИ, рддреЛ рдЬреЗрдиреНрд╕рд┐рдо рджреЛрдиреЛрдВ рдПрдХ рдореИрдХреНрд░реЛ (рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдХреНрд░реЛ-рдмрд╛рдп-рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ рдПрдХ рд╕рдорд░реНрдерди рдлрд╝рдВрдХреНрд╢рди (рдЬрд┐рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдЧреЛ PR https://github.com/rust-lang/cargo/pull/3064 рд╣реИ рдЬрд┐рд╕реЗ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдореЗрдВ рд╕рднреА "рдХрд╛рд░реНрдЧреЛ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди" рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдХрд╛рд░реНрдЧреЛ рдкреАрдЖрд░ рдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝ рджреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ _d dependency_ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рди рдХрд┐ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ _package_ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╕реМрдВрджрд░реНрдп рдФрд░ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░реА рд░рд╛рдп рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдареЛрд╕ рдХрд╛рд░рдг рднреА рд╣реИрдВред

  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдбрд┐рдкреЛрдВ рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдбрд┐рдкреЛ рдФрд░ рдирд┐рдпрдорд┐рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбрд┐рдкреЛ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдпреЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
  • рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ / рдЕрд░реНрдз-рдЙрджреНрдзрд░рдг рдХреЗ рд╕рд╛рде, рдХрд┐рд╕реА рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • > рдХреНрдпрд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдп рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВ?

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдЯреЛрдХрд░рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рджреВрд╕рд░реЗ рдЯреЛрдХрд░реЗ рдХрд╛ рдирд┐рдпрдорд┐рдд рдЪрд┐рддреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреЛрдХрд░реЗ рдХрд╛ рдореИрдХреНрд░реЛ рдЪрд┐рддреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд░реНрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рд╣рд╛рдВ https://github.com/serde-rs/serde/releases/tag/v0.8.6

(рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ # 36211)

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдЕрджреНрдпрддрди @dtolnay рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдЗрди рдореИрдХреНрд░реЛ рдкрд░ рдбреЙрдХреНрд╕ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЙрджрд╛рд╣рд░рдг рд╕рд░реНрдб рдореЗрдВ рд╣реИ, рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдВ?

рдУрдХреЗ рдХрд╛рд░реНрдЧреЛ рд╕рд╛рдорд╛рди рдЙрддрд░рд╛ рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ https://github.com/rust-lang/rust/issues/35900#issuecomment -243976887 рдкрд░ рдлрд┐рд░ рд╕реЗ рдЖрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред [рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдореВрд▓ RFC рдореЗрдВ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рднреВрд▓ рдЧрдпрд╛ред]

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝" рдФрд░ "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝" рдХреЛ рдХреНрд░рдорд╢рдГ "рдШреЛрд╖рдгрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝" рдФрд░ "рдЕрдирд┐рд╡рд╛рд░реНрдп рдореИрдХреНрд░реЛрдЬрд╝" рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдШреЛрд╖рдгрд╛рддреНрдордХ / рдЕрдирд┐рд╡рд╛рд░реНрдп рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдирд╛рддреНрдордХ рд╕рдорд╛рдирддрд╛рдПрдВ рджреЗрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдХреЛ рд╕реБрдкрд░рд╕реЗрдЯ рдпрд╛ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рдХреЗ рдкрд░реНрдпрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ" рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЬрдВрдЧ рдореЗрдВ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ / рдХрд╛рд░реНрдп / рд╡рд┐рдзрд┐ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рднреНрд░рдо рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдирд╛рдордХрд░рдг рдпреЛрдЬрдирд╛ рд╣рдореЗрдВ macro_imp рд╕рдорд╛рдирд╛рдВрддрд░ macro_rules macro_imp рдЯреЛрдХрд░рд╛ рдФрд░ рдореЙрдбреНрдпреВрд▓ рджреЗрддреА рд╣реИред macro_rules рдЕрдВрддрддрдГ рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп macro_dec рдЯреЛрдХрд░рд╛ рдХрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрди рд╕рдХрддрд╛ рд╣реИред

@nrc, рдЬрдм рдЖрдк "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд▓рдЧ рдЗрди" рдЖрдк рдирд┐рдореНрди рдЪреАрдЬрд╝реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ metacollect рдФрд░ clippy , рдЪреАрдЬреЛрдВ рдХреА рддрд░рд╣ rustw , rustfmt , рдФрд░ рдЬрдВрдЧ рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░ , рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рд╢реНрд░реЗрдгреА?

рдЬреЛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ "рдЙрджрд╛рд╣рд░рдг" рдирд╛рдо рд╕реЗ рд╣рд▓реНрдХреЗ рд╕реЗ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ (рдХреНрдпреЛрдВрдХрд┐ $foo рдкреИрдЯрд░реНрди рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ "рдЙрджрд╛рд╣рд░рдг" рдирд╣реАрдВ рд╣реИрдВ)ред рдШреЛрд╖рдгрд╛рддреНрдордХ рдмрдирд╛рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рдореБрдЭреЗ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реБрдП рдореИрдВрдиреЗ рдПрдХ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд╕реНрдЯ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдХрднреА-рдХрднреА рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИред рдпрд╣ рд╕рдВрджрд░реНрдн рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рджрд┐рдП рдЧрдП рдХрд╕реНрдЯрдо рдлрдВрдХреНрд╢рди рдХреЛ рдиреЛ-рдСрдк рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ #[structural_match] рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред


рдкреНрд░рдЬрдирди рд╕реНрдХреНрд░рд┐рдкреНрдЯ

(рдПрдХ рдЯреЛрдХрд░рд╛ рдореЗрдВ demo_plugin )

#![feature(rustc_macro, rustc_macro_lib)]

extern crate rustc_macro;

use rustc_macro::TokenStream;

#[rustc_macro_derive(Foo)]
pub fn derive_foo(input: TokenStream) -> TokenStream {
    input
}

(рджреВрд╕рд░реЗ рдХреНрд░реЗрдЯ рдореЗрдВ)

#![feature(rustc_macro)]

#[macro_use] extern crate demo_plugin;

#[derive(PartialEq, Eq, Foo)]
struct Bar {
    a: i32,
    b: i32,
}

#[derive(Eq)] рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@sgrif рдЖрд╣ рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рддреЛ рдпрд╣рд╛рдБ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЪрд▓ рд░рд╣реА рд╣реИрдВ:

  • #[derive(PartialEq, Eq)] , рд╕рдВрдХрд▓рдХ рдЪреБрдкрдЪрд╛рдк #[structural_match] рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ PartialEq рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЕрдиреБрдмрдВрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИред
  • рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ #[derive(Copy, Clone)] рд╕рд╛рде #[rustc_copy_clone_marker] рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред
  • рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЕрд╡рдзрд┐ рдХрд╣рддреА рд╣реИ "рдЖрдВрддрд░рд┐рдХ рдЕрд╕реНрдерд┐рд░рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ"ред рд╣рдо рдЕрд╡рдзрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдкрд╛рд░реНрд╕ рдФрд░ рд░рд┐рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВред

рддреЛ, рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣реЗрдВ рддреЛ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ, рдЬреИрд╕реЗ #[derive(Foo, Eq, PartialEq)]
  • рдХрд╕реНрдЯрдо рдкрд░ рднрд░реЛрд╕рд╛ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реИ
  • рдпрджрд┐ рд╣рдо рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рддреЛ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рди рдХрд░реЗрдВ
  • рд╕рдВрдХрд▓рдХ рдореЗрдВ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡рд╛рдж рдХрд░реЗрдВ рдХрд┐ рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХреНрдпрд╛ рдХрд╣ рд░рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдПрд╕рдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реА рдирд╣реАрдВред

рдореИрдВ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдпрд╛ рдЕрд▓рдЧ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпреЛрдВрдХрд┐ #[derive(Copy, Foo, Clone)] рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬрд╣рд╛рдВ рдХрд╕реНрдЯрдо рдХреЛрдб рдмреАрдЪ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ)ред

рдЕрдЧрд░ рд╣рдо рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рдХреЛрд░реНрд╕ рд╕рд┐рд░реНрдл рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рднреА рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрднреА рдХреЗ рд▓рд┐рдП "рдХрд╕реНрдЯрдо рдкрд╣рд▓реЗ рдФрд░ рдорд╛рдирдХ рдЕрдВрддрд┐рдо" рдХрд╛ рдПрдХ рд╕рдореНрдореЗрд▓рди рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░: рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдмрд╛рд╣рд░реА рджреГрд╢реНрдп рд╣реИ - рдЗрд╕рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИред ^^

рд▓реЗрдХрд┐рди рдЬреЛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд╣реИред рдЕрд╕реНрдерд╛рдпреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб "рдХрд╛рдлреА рд╕рдордп" рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ (= рдореИрдХреНрд░реЛрдЬрд╝ 2.0) рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдкрд╛рд░реНрд╕рд┐рдВрдЧ-рд░рд╛рдЙрдВрдб-рдЯреНрд░рд┐рдк рдЕрдм рдФрд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрдкреИрди-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдиреБрдХрд╕рд╛рди рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдПрдПрд╕рдЯреА рдореЗрдВ рдЫрд┐рдкреА рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЗрддрдиреА рдмреБрд░реА рдмрд╛рдд рдереАред рд╢рд╛рдпрдж рд╕рдВрдХрд▓рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЕрдВрджрд░-рдЬреНрдЮрд╛рди рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпреЗ рдЫрд┐рдкреА рд╣реБрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рднрд╡рд┐рд╖реНрдп рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИрдВ, рддреЛ рдореИрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдордиреЗ рд╡рд╛рд▓реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡реНрдпреБрддреНрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдХрд╛ рддрд░реНрдХ рджреВрдВрдЧрд╛ред рдкреВрд░реА рдмрд╛рдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реИрд╕реЗ рднреА рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд╣реИ рдирд╛?

@ colin-kiegel рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рд╕рд╣реА рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрднреА рдЬреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ _not_ future-proof рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐:

#[derive(Eq, Foo, PartialEq)]

рдЖрдЬ рд╣рдо Eq рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдлрд┐рд░ Foo рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдХреЛрдб рдЪрд▓рд╛рдПрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ PartialEq рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмреАрдЪ _change_ рд╕рдХрддрд╛ рд╣реИ Eq рдФрд░ PartialEq , рддреЛ #[structural_match] рд╕реЗ рдЬреЛрдбрд╝рд╛ Eq рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗ рдмрд╛рдж рд╕рд╣реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ Foo рдЪрд▓рд╛рддрд╛ рд╣реИред

рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдореИрдВ рд╕рд╣рдордд рд╣реВрдБ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ!

рдореЗрд░реА рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ, рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЬреЛ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдо рддреМрд░ рдкрд░ рдЙрди рдЫрд┐рдкреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд░рдЪрдирд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдХреНрдпрд╛ рдХреЛрдИ v2.0 рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЖрдЗрдЯрдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗрд╡рд▓ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╣реЛрдЧрд╛?

рд╣рд╛рдБ рдХреНрд╖рдорддрд╛ рд╣рдореЗрд╢рд╛ рд╡рд╣рд╛рдБ рд╣реЛрдЧреА рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ (рдЯреЛрдХрди рдЯреЛрдХрди рдореЗрдВ рдирд┐рд╣рд┐рдд -> рдЯреЛрдХрдирд╕реНрдЯреНрд░реАрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ #[derive] рдХрд┐рд╕реА рднреА рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╕рдВрджреЗрд╣ рд╣реИ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдЯреЛрдХрдирд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реНрд╡рдпрдВ рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ? рдЗрдирдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдЯреЛрдХрдирдХреЗреНрд░реАрдо рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрдкрд╕рд░реНрдЧ рд╣реЛрдЧрд╛? рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдмрд┐рд▓реНрдб рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред рд╢рд╛рдпрдж рдкреНрд░рддреНрдпреЗрдХ # [рд╡реНрдпреБрддреНрдкрдиреНрди ()] рдореЗрдВ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдХрд╣рддреЗ рд╣реИрдВ # (рд╡реНрдпреБрддреНрдкрдиреНрди (рдлреВ)) рдореЗрдВ рдЙрдкрд╕рд░реНрдЧ Foo_ рд╣реИ) рдЬрд┐рд╕реЗ рд╡реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ?

@ рдорд┐рд╕реНрдЯрд░ рд╣рд╛рдБ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдЕрдкрд░рд┐рдЪрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЙрдкрд╕рд░реНрдЧ / рдкреНрд░рддреНрдпрдп / рдкрдВрдЬреАрдХрд░рдг / рдЖрджрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ v2.0 рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ _used_ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЯреЛрдХрди рдЖрдЗрдЯрдо рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ рддрдХ _read-only_ рдкрд╣реБрдВрдЪ рддрдХ рд╕реАрдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдмреЗрд╣рддрд░ рд░рдЪрдирд╛рд╢реАрд▓рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдЖрдИрдПрдордУ рдХреЛ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА v2.0 рдореИрдХреНрд░реЛ рдХреЛ рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреА рдХреЗ рдХрд╛рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдирд╣реАрдВред рдЗрд╕ рддрд░рд╣ #[structural_mach] рдФрд░ (рдХрд╕реНрдЯрдо) рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдЧреАред рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рд╣реЛрдЧрд╛?

рдПрдХ рдФрд░ рдореБрджреНрджрд╛ред рдпрджрд┐ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИрдВ рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рдкреИрдирд┐рдХ рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ рдЕрд╡рдзрд┐ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛, рди рдХрд┐ рдЙрд╕ рдкреИрди рдХреЛред


рдкреНрд░рдЬрдирди рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдПрдХ рдЯреЛрдХрд░рд╛ рдореЗрдВ demo_plugin рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

#![feature(rustc_macro, rustc_macro_lib)]

extern crate rustc_macro;

use rustc_macro::TokenStream;

#[rustc_macro_derive(Foo)]
pub fn derive_foo(input: TokenStream) -> TokenStream {
    input
}

#[rustc_macro_derive(Bar)]
pub fn derive_bar(input: TokenStream) -> TokenStream {
    panic!("lolnope");
}

рдПрдХ рдФрд░ рдЯреЛрдХрд░реЗ рдореЗрдВ

#![feature(rustc_macro)]

#[macro_use] extern crate demo_plugin;

#[derive(Foo, Bar)]
struct Baz {
    a: i32,
    b: i32,
}

рддреНрд░реБрдЯрд┐ Foo рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧреА, рднрд▓реЗ рд╣реА Bar рдШрдмрд░рд╛рдПред

рд░рд┐рдкреЛрд░реНрдЯ @sgrif рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдмрдХрд╛рдпрд╛ рдореБрджреНрджреЛрдВ рдкрд░ рднреА рдирдЬрд╝рд░ рд░рдЦреА рдЬрд╛рдПрдЧреАред

рд╣рдореНрдо, #[structural_eq] рд╕рд╛рде рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдмрд╛рддрдЪреАрдд рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред рдмрд▓реНрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ!

рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП "рдПрдкреЗрдВрдб" рдкрд╛рда рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдиреЗ рд╕реЗ рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... рдпрд╣ рдЕрд╡рдзрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛, рдирд╣реАрдВ?

рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХреБрд▓ рдХреЛ рдЦреЗрддреЛрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдХреНрд░реЛ рдХреЗ рдЪрд▓рдиреЗ рдкрд░ рдЫреАрди рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдореВрд▓ рд╡рд╕реНрддреБ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╢реНрди рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди 'рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдореИрдХреНрд░реЛ' рд╣реЛ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ (рдЬрд╣рд╛рдВ рд╣рдо рдореВрд▓ рдЖрдЗрдЯрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдХреЗ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╛ рдлрд┐рд░ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдмрд╛рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрдХ (рдкрд░рд┐рд╢рд┐рд╖реНрдЯ) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдореИрдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрд╢реЛрдзрдХ рдФрд░ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдерд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЕрдВрддрд░ рд╕реЗ рдирдлрд░рдд рдереАред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЕрдирд┐рдЪреНрдЫреБрдХ рд╣реВрдВ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдереЛрдбрд╝рд╛ рдЦрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬрд┐рд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рд╡рд╣ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ, рд╕рдВрднрд╡рддрдГ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рд╛рд░реВрдк рднреА рд╣реИ)ред

@ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╣ рдЕрднреА рднреА tokenstream рд╣реЛ рд╕рдХрддрд╛ рд╣реИ -> tokenstream, рдЬрд╣рд╛рдВ рд╣рдо рд╕рд┐рд░реНрдл new рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд▓рд┐рдП рдЦреЗрддреЛрдВ рдкрд░ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ "рдПрдкреЗрдВрдб" -рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрдИ рддрд░реАрдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕ рдкрд░ рдЬрд░реВрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдкреЗрдВрдб рд╢реИрд▓реА рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдРрд╕реА рджреБрдирд┐рдпрд╛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдЖрдЗрдЯрдо рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рд░рдЪрдирд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рд╕рд╛рде рд╣реА рдпрд╣ #[structural_eq] рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ IMO рдХреА рд╕рд╣реА рдорд╛рддреНрд░рд╛ рд╣реИред

рдЕрдЧрд░ рд▓реЛрдЧ рдЙрд╕ рдирд┐рдпрддрд┐ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рдерд╛, рдХреНрдпрд╛ рдпрд╣ рдирд╣реАрдВ рдерд╛?

(рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╣реИрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред)

рдореЗрд░реЗ рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ foo!(Bar, parameters...) рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдореИрдХреНрд░реЛрдЬрд╝ рд╣реИрдВ, рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ Bar рдПрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред

рдЖрдИрдЖрд░рд╕реА рдкрд░ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди, рд╣рдореЗрдВ #[derive(Foo)] #[params] struct Bar; рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛, рдФрд░ foo! рдХреЛ #[derive(Foo)] рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдЬреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдордЬрдмреВрдд рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрддреНрдкрдиреНрди рдирд┐рд╣рд┐рдд рдкрд░ рд░рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП #[structural_match] рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

(рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ)

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╕рд░реНрдб рдФрд░ рдбреАрдЬрд▓ рджреЛрдиреЛрдВ рд╣реА рдЦреЗрддреЛрдВ рдкрд░ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рд╛рдпрдж рдореИрдВ #[structural_match] рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдзреЗ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рдЖрдЦрд┐рд░, рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

  • рдпрджрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди #[structural_match] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдПрдХ рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ! (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рдФрд░ рдирд┐рд░рд╛рд▓рд╛ рддрд░реАрдХрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред)
  • рдпрджрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реБрдЖред

рдЫреЛрдЯреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реЛрдЪ рдХреЗ рдЯрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдХ #[structural_match] рдПрдиреЛрдЯреЗрд╢рди рдХреЛ "рдЧрд▓рдд" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдореИрдЬрд┐рдХ рд╕реНрдкреИрди" рдХреЗ рдмрд┐рдирд╛ рд╣рд╡рд╛ рд╣реЛрдЧрд╛), рдпрд╣ рд╢рд╛рдпрдж рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд▓рдЧрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ @ рдХреЙрд▓рд┐рди-рдХреАрдЧрд▓ рдХреА рдЧреИрд░-рд╕рдВрдпреЛрдЬрдХрддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдбрд╝рд╛рди рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд┐рдирд╛ред

(рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЪреВрдВрдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдерд┐рд░ рд╕рд╛рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╕реНрдкреИрди рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдиреЗ рд╕реЗ рд╡рд╣рд╛рдВ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓реЗрдВ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдареАрдХ рд╣реИ, рд╡рд╛рдкрд╕ рдкрдврд╝рдиреЗ рд╕реЗ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрддрд╛рдП рдЧрдП @sgrif рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рджреЛрдмрд╛рд░рд╛ рдорд╛рдлреА рдЪрд╛рд╣реВрдВрдЧрд╛ред ;)

рдпрд╣ рдереЛрдбрд╝реЗ рд╕рдХрд▓ рднреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдерд┐рд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдЙрдЬрд╛рдЧрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рдХреЛрдб рдХреЛ рдХрднреА рднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдХрд┐ #[structural_match] рдПрдиреЛрдЯреЗрд╢рди рдореМрдЬреВрдж рд╣реИред

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, @nikomatsakis , рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛ рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░рд╣ рдХрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрд▓рдЧ рдЙрдкрдЪрд╛рд░ (рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрджрд╛рд░реНрде), рдЬреЛ рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВред

@ рдХреЙрд▓рд┐рди-kiegel

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдкреЗрдВрдб рд╢реИрд▓реА рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдРрд╕реА рджреБрдирд┐рдпрд╛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдЖрдЗрдЯрдо рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рд░рдЪрдирд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рд╕рд╛рде рд╣реА рдпрд╣ # [рд╕рдВрд░рдЪрдирд╛рддреНрдордХ_рдХреЗ] рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ IMO рдХреА рд╕рд╣реА рдорд╛рддреНрд░рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореНрдпреВрдЯрд┐рдВрдЧ рдореИрдХреНрд░реЛ рдХрдВрдкреЛрдЬрд┐рдЯреЗрдмрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреЗрд╢рдХ рдХрдВрдкреЛрдЬрд┐рдмрд┐рд▓рд┐рдЯреА рдХреА рд╢рд░реНрддреЗрдВ рдЕрд▓рдЧ рд╣реИрдВред рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡ рдФрд░ рдмрд╛рдж рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рддреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдпрд╛ рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЧреИрд░-рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдкрд░ рдПрдХ рдЪрд░рдо рд╣рдо рдпрд╣рд╛рдВ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдо рдЙрди рддрд░реАрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЗрд╕реЗ рдирд░рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдВрдХрди)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХреЗ рдХрд╛рд░рдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЗрд▓рд╛рдЬ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдЧрд░ рд▓реЛрдЧ рдЙрд╕ рдирд┐рдпрддрд┐ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рдерд╛, рдХреНрдпрд╛ рдпрд╣ рдирд╣реАрдВ рдерд╛?

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп рдордЬрдмреВрдд рдкреНрд░реЗрд░рдгрд╛ рдереАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛ рдФрд░ 'рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред' рдпрд╣ рддрдм рд╕реЗ рдирд╛рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рдореИрдХреНрд░реЛ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рднреЗрдж рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдФрд░ рдЗрд╕рдиреЗ рдореИрдХреНрд░реЛ рдХреЛ рдХрдо рд▓рдЪреАрд▓рд╛ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирдирд╛ рд╣реИред

рдореИрдВ рдмрд╣реБрдд рд╣рдж рддрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 1.1 рд╕рдорд╛рдзрд╛рди рдХреА рдмрд╛рдзрд╛рдУрдВ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдпрд╣рд╛рдВ рдХреЗ рдкрд╛рдиреА рдХреЛ рдЦрд░рд╛рдм рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рд╣рдо рдмрдбрд╝реА рджреГрд╖реНрдЯрд┐ рдХреА рджреГрд╖реНрдЯрд┐ рдЦреЛ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ @jimmycuadra рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рддрд░рд╣ рд╕реЗ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдПрдХ рдХрдард┐рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред @nikomatsakis рднреА рд╕рд╣реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ #[derive(PartialEq, Eq)] рдХрд╛ рд╡рд░реНрддрдорд╛рди рдЙрдкрдЪрд╛рд░ рд╕рдмрдкрд░ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдВрдд рдореЗрдВ, @ рдорд┐рд╕реНрдЯрд░ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореЛрдб рдХреЛ рдЗрд╕ рдЬрд╛рджреБрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред

рд╕рд╛рде рд╣реА рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @nrc рдХреА рднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдмрд▓рддрд╛ рд╣реИ рдХрд┐ #[derive] рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдФрд░ рдЬрдм рд╣рдо рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @nrc рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрдХ рд╣реЛрдиреЗ рдФрд░ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИ, рд▓реЗрдХрд┐рди #[derive] рдмрд╣реБрдд рд╡рд┐рд╢реЗрд╖ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ , рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдПрдХ рдореМрдЬреВрджрд╛ рдПрдХред

рдЕрднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ #[derive] рдореЛрдб рдХрд╛ рдПрдХ рд╕рдЦреНрдд рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдпрд╛рдБ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред рд╕рднреА рдЖрдВрддрд░рд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдореЛрдб рдПрдХ рд▓реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рднреА рдХреЛрдИ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореЛрдб рдорд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдо рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЪрд░рдг 1 рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ #[derive] рд╡рд┐рд╢реЗрд╖рддрд╛ _multiple рдмрд╛рд░ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛_ред рдЗрд╕рд╕реЗ рдмрд╛рд▓реЛрдВ рдХрд╛ рдЧреБрдЪреНрдЫрд╛ рдирд┐рдХрд▓рддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ #[derive] рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрд░рдо рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░рдиреЗ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рд╕реЗ рд╕рднреА рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ #[derive(Clone, Foo)] рд╣реИ, рддреЛ рд╣рдо рдкрд╣рд▓реЗ Foo рдЬрд╣рд╛рдВ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ #[derive(Clone)] рдПрдиреЛрдЯреЗрд╢рди рдерд╛ред рдпрджрд┐ рд╡рд╣ #[derive] рдХрд╛рдпрдо рд╣реИ рддреЛ рд╣рдо рдХрд╕реНрдЯрдо рдирд┐рд░реНрдорд┐рдд рдирд┐рд╢рд╛рди Clone ред
  • рджреВрд╕рд░рд╛, рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдЬреНрдЮрд╛рдд рд╕рднреА рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ #[derive_Bar] рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмреИрдХрд╡рд░реНрдб рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рд╣реИрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред
  • рдЕрдВрдд рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рднреА рдЬреНрдЮрд╛рдд рдФрд░ рдмрд┐рд▓реНрдЯ-рдЗрди #[derive] рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ

рдЗрд╕рдХрд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдкреНрд░рднрд╛рд╡ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдмрд╛рдПрдБ-рд╕реЗ-рджрд╛рдПрдБ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ #[derive] ред рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЕрдзрд┐рдХрддрдо рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рджреЗрддрд╛ рд╣реИ рдФрд░ рдЬрдм рдпрд╣ рдмрд┐рд▓реНрдЯ рд▓рдХреНрд╖рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧреАред

рд╡рд╣ рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ? рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рд╕рднреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ?


@nikomatsakis рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ impl рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рдЦрдиреЗ рдХреА рд░рдгрдиреАрддрд┐ рдХрд╛рдо рдХрд░реЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореЛрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЦреЗрддреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рднреАред рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреА рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ рдЬрдм рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд░рд╕реНрдЯ рд╕рдВрджрд░реНрдн рдпрд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдПрдВ-рд╕реЗ-рджрд╛рдПрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рдХрднреА рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдХрд╕реНрдорд┐рдХ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореИрдХреНрд░реЛ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдХреНрд░рдо рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдХрд╕реНрдЯрдо рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрд▓реЗрдХреНрд╕ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рдЬрд╛рджреБрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХрднреА рди рджреЗрдЦреЗрдВред

рдореИрдВ рдмрд╕ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, #[derive(Trace)] рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП rust-gc #[derive(Trace)] рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

#[derive(Trace)]
struct Foo {
    a: Gc<i32>,
}

рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░:

struct Foo {
    a: Gc<i32>,
}

unsafe impl Trace { // NOTE: Strawman impl
    unsafe fn trace(&self) { Trace::trace(&self.a) }
}

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо Evil рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

#[derive(Evil)]
struct Foo {
    a: Gc<i32>,
}

рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░:

struct Foo {
    a: Gc<i32>,
    b: Gc<i32>,
}

рдЬреЛ, рдЕрдЧрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

#[derive(Trace, Evil)]
struct Foo {
    a: Gc<i32>,
}

рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░:

struct Foo {
    a: Gc<i32>,
    b: Gc<i32>,
}

unsafe impl Trace {
    unsafe fn trace(&self) { Trace::trace(&self.a) }
}

рдЬреЛ Trace рдХрд╛ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЬрдм rust-gc рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ b рд▓рд┐рдП рдПрдХ рдЭреВрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрджрд░реНрдн рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╣реА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Trace #[derive] рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЕрддреНрдпрдзрд┐рдХ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред

рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ #[derive] рдХрд┐рд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓реЗрдЖрдЙрдЯ / рдореЗрдХрдЕрдк рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЖрдк рд╕рд┐рд░реНрдл рднрд╛рдЧреНрдп рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдХреНрд╖рдорддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рдЗрд╕реЗ рджреЗрдирд╛ рдПрдХ рдЧреИрд░-рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реНрд╡реЗрддрд╕реВрдЪреАрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдпрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдЬ рдХреЗ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдХрд╛рдлреА рднрд┐рдиреНрди рд╣реИрдВред

рдПрдХ рдФрд░ рд░рд╛рд╕реНрддрд╛ рд░рдЦреЛ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ #[derive] рд╣реЛрдиреЗ рдХреА "рд╢реБрджреНрдзрддрд╛" рдиреЗ рдХрднреА рднреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдлрд╝реАрд▓реНрдб рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрди: рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЧрд▓рдд рд╣реИ рдЯреА, рд▓реЗрдХрд┐рди рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрдВ)ред

рдореБрдЭреЗ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмреБрд░реА рднрд╛рд╡рдирд╛ рд╣реИред @ рдорд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХрдВрдкреЛрдЬрд┐рдмрд┐рд▓рд┐рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ .. рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╢рдмреНрдж рдирд╣реАрдВ рдерд╛)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИ рддреЛ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдПрдВрдЧреЗред рдФрд░ рдпрд╣ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ 'рд╣реЗ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рджреВрд╕рд░реЗ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рдордЭрддрд╛ рд╣реВрдВред' рдЕрдиреНрдпрдерд╛ рдпрд╣ рдкреИрд░ рдХреЗ рдЕрдВрдЧреВрдареЗ рдореЗрдВ рджрд░реНрдж рд╣реЛрдЧрд╛ рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рдХреБрдЫ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдХреНрд░реЗрдЯ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬреЛ рдЖрдк рдХреБрдЫ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХрд┐рд╕реА рднреА рдЯреЛрдХрд░реЗ рдореЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдк рдЦреБрдж рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ, рдЬреИрд╕реЗ рдХрд┐ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рддрд┐рд╖реНрдард╛, рд╕реНрд░реЛрдд рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛, рдЖрджрд┐ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреНрд░реЗрдЯ рдХреБрдЫ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдореИрдВ рдЙрдирд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ "рдЪрддреБрд░" рд╣реЛрдВрдЧреЗ рдФрд░ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪреНрдЫ рдЪрд╛рд▓реЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреБрдЫ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЯреНрд░реЗрд╕ рдЬреИрд╕реЗ рдХреБрдЫ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

@ рдореАрд╕реНрдЯрд░ рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд╕реНрдЯ рдореЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реА ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдЪреБрдкрдЪрд╛рдк рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реИред

@alexcrichton

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ #[derive] рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрд░рдо рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░рдиреЗ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рд╢рд╛рдпрдж рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрддрд╛рдиреЗ рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдХреНрд░рдо "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд" рд╣реИред рд╣рдо рдЗрди рджрд┐рдиреЛрдВ PartialEq / Eq рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдЦреНрдд рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╕реВрдХреНрд╖реНрдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдСрдЯреЛ-рдЗрдВрд╕рд░реНрдЯрд┐рдВрдЧ" рдлрд╝реАрд▓реНрдб рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рд▓реЛрдЧ рдЖрджреЗрд╢ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВред рдЕрднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ред

рдкреБрдирд╢реНрдЪред рдореИрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдПрдХ (рдирд┐рд░реНрдзрд╛рд░рдХ) RNG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЛрдХрд░рд╛ рд╣реИрд╢ рдпрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рддрд╛рдХрд┐ рд▓реЛрдЧ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдЖрджреЗрд╢ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░ рд╕рдХреЗрдВред рдореИрдВ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдХрднреА рдореМрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред ;)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдорди рдмрджрд▓ рд▓рд┐рдпрд╛ рд╣реИ , рдФрд░ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдм

рдЗрд╕рд▓рд┐рдП, рдореЗрд░реА рд╕рдордЭ рд╕реЗ, рдпреЗ рдХрд╕реНрдЯрдо #[derive] рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╣реИрдВ:

  • рдпрд╣ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ)
  • рд╣рдо рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ
  • рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рджреЗрдирд╛

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реАрдорд╛ рд╢реБрд▓реНрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ #[derive] рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬреИрд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд╝реАрд▓реНрдб / рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдорд╛рди рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдо) рд╣реИрдВ:

  • рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо #[derive] рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрд╣ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╛рдЙрдВрдбрдиреЗрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ-рдЬреАрд╕реА рд╕реЗ #[derive(Trace)] рдЬреЛ _must_ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреИрдХрдкреИрдХ рдкреНрд░рдХрд╛рд░ рджреЗрдЦреЗрдВ рдпрд╛ рдпрд╣ рдирд┐рд░рд╛рдзрд╛рд░ рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕реВрдХреНрд╖реНрдо рдЙрдкрдпреЛрдЧ-рдореБрдХреНрдд-рд╡рд╛рдИ рддрд░реАрдХреЗ рд╕реЗ)
  • рдпрд╣ рдореИрдХреНрд░реЛ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдирдХреЗ рдмреАрдЪ рдЕрд╡рдЧрдд рдХрд░рд╛рдИ рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХрдо рд╣реИ

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдзреНрд╡рдирд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛ unsafe trait рдирд┐рд╣рд┐рддрд╛рд░реНрде рдпрд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ, рдЬреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдЦрдВрдб рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде)ред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЬрдВрдЧ-рдЬреАрд╕реА рдЬреИрд╕реЗ рдЯреЛрдХрд░реЗ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ:

рд╡рд┐рдЪрд╛рд░ 1

рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкрд╛рд╕ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд╛рдо рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдирд╛рдо рдкрдврд╝реЗрдВред рдЬрдм рдкрд╛рд╕ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд╛рдо рд╕рдорд╛рди рд╣реИ, рдФрд░ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдо (рдФрд░ рдлрд╝реАрд▓реНрдб рдХреА рдЧрдгрдирд╛) рд╕рдорд╛рди рд╣реИрдВред рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдмрдврд╝рд╛рдПрдБ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЗрдВред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЧреБрдг рдЬреЛ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рдЯреВрдЯреЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ, рдзреНрд╡рдирд┐, рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╣реИрдВред рдпрд╣ рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХрд╛ рд▓рд╛рдн рднреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╕ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рдХреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рднреА рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЖрдЬ рдХреА рддрд░рд╣ред

рд╡рд┐рдЪрд╛рд░ реи

рдкреНрд░рддреНрдпреЗрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд▓рдЧрдЗрди рдХреЛ рдПрдХ рд╣реА рдЗрдирдкреБрдЯ рдЯреЛрдХрдирд╕реНрдЯреНрд░реАрдо (рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдореВрд▓ рдкрд╛рда) рджреЗрдВред рдЬрдм рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдХреМрди рд╕реЗ рдЧреБрдг рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИрдВред рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рдЯреЛрдХрдирд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдВред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдСрд░реНрдбрд░рд┐рдВрдЧ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ (рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд▓рдЧрдЗрди рдПрдХ рд╣реА рдореВрд▓ рд╡рд╕реНрддреБ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдпрд╣ рдкреНрд▓рдЧрдЗрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЦрд░рд╛рдм рдХрд░рдирд╛ рднреА рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЬреНрдпрд╛рджрд╛рддрд░-рд╕рд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП рдЖрдЗрдЯрдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдХреЛ рд╣рдо рдЬрд┐рд╕ рднреА рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдЯреА рдПрд▓; рдбреЙ

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд▓рд╛рдн рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд #[derive(Trace)] рдФрд░ рд╣рдореЗрд╢рд╛-рд╕рд╣реА #[derive(Serialize)] рдЗрддреНрдпрд╛рджрд┐ рдмрдирд╛рдиреЗ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рджреВрд░ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдореНрдпреВрдЯрд┐рдВрдЧ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рд░реВрдЯ рдкрд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдиреЗ рдЯреНрд░реЗрд╕ рдХрд╕реНрдЯрдо рдХреЗ рдирд╛рдо рдХреЛ #[derive(unsafe_Trace)] рдмрджрд▓рдиреЗ рдХрд╛ рдмрд╣реБрдд рджреБрдЦ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @alexcrichton рдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ рдЕрдЪреНрдЫрд╛ рдЯреНрд░реЗрдбрдСрдлрд╝ рд╣реИред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреБрдЫ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЙрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

рднрд▓реЗ рд╣реА @ рдорд┐рд╕реНрдЯрд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ struct рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реА рдУрд░, рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ, рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб _and_ рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрдЬрд╛рдп рдЕрд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВред

рд╡рд┐рд╖рдп рд╕реЗ: рдХреНрдпрд╛ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЭреЗ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдХреНрд░рдо рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП

@ рдорд┐рд╕реНрдЯрд░ рдПрдХ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрди рд╕реБрд░рдХреНрд╖рд╛-рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╕рднреА рд╡реНрдпреБрддреНрдкрдиреНрди рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд░реЗрдВред рдпрд╣ 100% рдзреНрд╡рдирд┐ рдирд╣реАрдВ рд╣реЛрдЧреА (рджреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдХ рд╣реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЬреЛрдбрд╝ рдФрд░ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдПрдХ рд╣реЗрд░рд╛рд╕реНрдЯрд┐рдХ рдкреНрд░рддрд┐рд╡рд╛рдж рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдпрд╛рд╕ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╕рдВрд╢реЛрдзрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред рдПрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрджреГрд╢реНрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдХреЛ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреА рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк _really_ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИред

@sgrif рд╢рд╛рдпрдж _most_ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдЪ рд╣реИ - рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧреБрдг, рдпрд╛ рдХреБрдЫ рд╕рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

@ рдПрд╕рдЖрд░рдПрд╕рдЖрдИрдПрдл рдкреАрдПрд╕: рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрдВрдЧ рд▓реЗрдЦрдХ рд╢рд╛рдпрдж рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рд╡реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред

рдореИрдХреНрд░реЛ рдХреЛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛-рдкрд░рд┐рд╡рд░реНрддрди + рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдПрдХ _combination_ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдкрд╛рдд "рдХреЗрд╡рд▓ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ" рдХреЗ рд╕рд╛рде "рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдЬрд╛рд╡рдЯ" рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рдЕрд▓рдЧрд╛рд╡ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрдардиреАрдпрддрд╛ рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред

  • рд▓рдЪреАрд▓рд╛рдкрди: рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рджреЛ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рджреЛрдиреЛрдВ рджреЛрдиреЛрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдмрджрд▓ рдФрд░ рд╕рдЬрд╛рддреЗ рд╣реИрдВред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдСрд░реНрдбрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрдЧрд░ рдлреЗрд░рдмрджрд▓ рдПрдХ рдЕрд▓рдЧ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдЬрд╛рд╡рдЯ рд╕рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдмрджрд▓рд╛рд╡ рдФрд░ рд╕рдЬрд╛рд╡рдЯ рдХреЛ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдгреАрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрддреА рд╣реИред
  • рдкрдардиреАрдпрддрд╛: рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдХреЛ рдХреЛрдб рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдкрд░ 10 рд╡реНрдпреБрддреНрдкрдиреНрди рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореБрдЭреЗ @mystor рдХреЗ рддрд░реНрдХ рдорд┐рд▓рддрд╛ рд╣реИ :

рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо # [рд╡реНрдпреБрддреНрдкрдиреНрди] рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╛рдЙрдВрдбрдиреЗрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЬреИрд╕реЗ # [рд╡реНрдпреБрддреНрдкрдиреНрди (рдЯреНрд░реЗрд╕)] рдЬрдВрдЧ-рдЬреАрд╕реА рд╕реЗ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд░реНрдерди рдкреНрд░рдХрд╛рд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдпрд╣ рдирд┐рд░рд╛рдзрд╛рд░ рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕реВрдХреНрд╖реНрдо рдЙрдкрдпреЛрдЧ-рдореБрдХреНрдд-рд╡рд╛рдИ рддрд░реАрдХреЗ рд╕реЗ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдЧрд▓рдд рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рд╢рд╛рдпрдж рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╣рд╛рдБ, рдпрд╣ рдкрд╛рд░рджрд░реНрд╢реА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдХреНрдпрд╛)ред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ "рдзреНрд╡рдирд┐" Trace рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЖрд╢реНрд╡рд╛рд╕рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ, рдХреЛ рдХреБрдЫ _other_ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ рд▓рдЧрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ:

#[mangle] // <-- custom decorator that does bad things to struct definition
#[derive(Trace)]
struct Foo {
    x: T, y: U
}

рдПрдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Trace рдирд┐рд╣рд┐рддрд╛рд░реНрде рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ _it_ struct рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рди рд╣реЛ рдЬрд╛рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

unsafe impl Trace for Foo {
    fn trace(&self) {
        let &Foo { ref x, ref y } = self;
        <T as Trace>::trace(x);
        <U as Trace>::trace(y);
    }
}

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ #[mangle] рднреА рдЖрдкрдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдЦрд░рд╛рдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реИрддрд╛рдиреА рд╣реИред =) рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдБ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрди рд╡рд╛рд░реНрддрд╛рд▓рд╛рдкреЛрдВ рдХреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рдпрд╛ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдирд┐рдпрдо рдкрд╛рдХрд░ рдЦреБрд╢ рд╣реЛрдКрдВрдЧрд╛ рдХрд┐ #[derive] рдХреЛ рдХреЗрд╡рд▓ impl рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдФрд░ рдПрдХ рднрд╛рдИ рдХрд╛ рдЙрджреНрдШреЛрд╖ ( #[mangle(Foo, Bar)] рд▓рдЧрддрд╛ рд╣реИ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ to) рдЬреЛ _changing_ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ред #[mangle] рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореВрд▓реНрдпрд╛рдВрдХрди рдХреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЧрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ рд╣реИ рддреЛ рд╢рд╛рдпрдж рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдмреАрдЪ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореВрд▓реНрдпрд╛рдВрдХрди рдХреНрд░рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдореЗрд░реА рд░рд╛рдп рд╢рд┐рдерд┐рд▓ рд╣реИред @nikomatsakis рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рд╣рдо # [рд╡реНрдпреБрддреНрдкрдиреНрди] рдХреЗ рднреАрддрд░ let Foo{ ... } рдЯреНрд░рд┐рдХ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рд▓реЗрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╣реА рд╣реИред рд╣рдореЗрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рд╕рднреА рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдЦреЛрдЬ рди рдХрд░рдиреА рдкрдбрд╝реЗред

@nikomatsakis

  • mh .. рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐ _custom рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЛ derive_ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА _derives рдЖрдЗрдЯрдо_ рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрднреА рднреА рдЖрдо рддреМрд░ рдкрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЛ рдХрдареЛрд░ / рд╢реБрджреНрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рджреЗрдЦрдХрд░ рднреА рдЦреБрд╢ рд╣реВрдВ рдХрд┐ рдХрд╕реНрдЯрдо рдмрджрд▓рд╛рд╡ рдХреЛ рдХрдбрд╝рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ _ рдмрд╛рдж рдореЗрдВ рд╣реБрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдлред :-)

рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдЗрдЯрдо рдХреЗ рдЗрдВрдЯреАрд░рд┐рдпрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рд╕рд┐рд░реНрдл u.r-l.o рдкрд░ "рдЖрд░рдЯреА рдХреЗ рд╕рд╛рде рдкреНрд░реА-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдмрдирд╛рдпрд╛:

https://users.rust-lang.org/t/pre-implementation-feedback-for-qt-with-rust/7300/19

рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ #[derive] (рдпрд╛ рдЗрд╕реА рддрд░рд╣) рдХреЛ рдХрд┐рд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрдЬрд╛рдп _trait_ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реВрдВ - рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЖрдЗрдЯрдо const рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧрд╛ред ред

рдКрдкрд░ рдЙрдард╛рдП рдЧрдП рдХрд╛рд░реНрдЧреЛ рдореБрджреНрджреЛрдВ рдХреЗ рд╕рдорд╛рди, рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ

#[macro_use]
extern crate double;

double рдирд╛рдордХ рдПрдХ рдЯреЛрдХрд░рд╛ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рдирд╛ред рдЪреВрдВрдХрд┐ рд╣рдо рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд░рдирдЯрд╛рдЗрдо рдХреЛрдб (рд╡рд╛рд╕реНрддрд╡рд┐рдХ Ruest рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд░реИрдХреЗрдЯ рдХреЗ (require (for-syntax ...)) рдЕрдиреБрд░реВрдк рдПрдХ рдЪрд░рдг-рд╡реГрджреНрдзрд┐ рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред [рд░реИрдХреЗрдЯ рдбреЙрдХ https://docs.racket-lang.org/reference/require.html#% 28form ._% 28% 28lib._racket% 2 рдлрд╝рд░реНрдЬрд╝реА% 2Fbase..rkt% 29._for-meta% 29% 29% рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддрд╛ рдХрд┐ рд╕рд╣реА рдЦрдВрдб рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред]

рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ http://blog.ezyang.com/2016/07/what-template-haskell-gets-wrong-and-racket-gets-right/ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдХреА рдЧрдИ рдЪрд░рдгрдмрджреНрдз рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдмреНрдпрд╛рдЬ рдХреА рд╣реЛ рд╕рдХрддреА рд╣реИред - рдореИрдВ рд░рд╕реНрдЯ рдореЗрдВ рд╕рдорд╛рди рдЧрд▓рддрд┐рдпрд╛рдБ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред

@Emon2314 рд░рд╕реНрдЯ рдореЗрдВ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ double рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХрд▓рд┐рдд рд╣реИ _ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░рдг_ рдХреЗ рд▓рд┐рдПред
рдпрд╣реА рд╣реИ, рдЯреЛрдХрд░рд╛ рдХреЗрд╡рд▓ рдореИрдХреНрд░реЛ / рд╕рдВрд╢реЛрдзрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреИрд╕реЗ macro_rules ред
рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░рд╕реНрдЯ рдЖрдЗрдЯрдо (рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рдмрдирд╛рддреЗ рд╣реИрдВ) рджреЛрдиреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдХреНрд╕реЗ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдХрд┐рд╕реА рднреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рдЯреЛрдХрд░рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдПрдХ рдПрд▓рдЖрдИрдПрд╕рдкреА рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕рдВрдХрд▓рди рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдереЛрдХ рд▓реЗрдирд╛ рдХрд╛рдЙрдВрдЯрд░-рдЙрддреНрдкрд╛рджрдХ рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдБ @eddyb рдореБрдЭреЗ рдЗрд╕ рдкрд░ рд╕рдВрджреЗрд╣ рд╣реИ "рдмрдирд╛рдПрдБ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛" рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реАред рдпрджрд┐ рд╣рдорд╛рд░реЗ рд╕рдВрдХрд▓рди рдореЙрдбрд▓ рдХреЗ рдХрд╛рд░рдг рд░реИрдХреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░реИрдХреЗрдЯ рдХреНрд░реЙрд╕-рдХрдВрдкрд╛рдЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ), рддреЛ рдореБрдЭреЗ рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ред

рд▓реИрдВрдЧ рдЯреАрдо рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдирд╛рдорд╛рдВрдХрд┐рдд: рдПрдХ рд╕реНрдерд┐рд░реАрдХрд░рдг рдпреЛрдЬрдирд╛ред

рд╕рд░реНрдб рд╕рд╛рдЗрдб рдкрд░, рдпрд╣рд╛рдВ рдореМрдЬреВрджрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╕рдорд░реНрдерди рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╢реЗрд╖ рдореБрджреНрджреЛрдВ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рднреА рд░рд╛рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИ: https://github.com/serde-rs/serde/issues/545ред # 36211 рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд░реБрд╕реНрдЯ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╣рдо рддреЗрдЬреА рд╕реЗ рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреАрдЖрд░ рдУрдкрди рд╣реИ рдЬреЛ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╣рдорд╛рд░реЗ rustc_macro рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрдХрд▓рди рд╕рдордп https://github.com/serde-rs/serde/pull/548 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

EDIT: рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, # 36211 рдиреЗ рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛

рдореИрдВ рд╢реБрдХреНрд░рд╡рд╛рд░ рддрдХ рдбреАрдЬрд╝рд▓ рдкреЛрд░реНрдЯ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рдЫреЛрд░ рдкрд░ рд╣рд░ рдЪреАрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реИред

@dtolnay рдиреЗ рд╕рд░реНрдб-рдЖрд░рдПрд╕ / рд╕рд░реНрдб # 548 рджрд┐рдпрд╛, рдХреНрдпрд╛ рд╕рд░реНрдб рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд╡рд░реЛрдзрдХ рд╣реИрдВ?

@ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж! рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ (рдпрд╛ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ) рдЖрдк рдХрд┐рд╕реА рднреА рд╢реЗрд╖ рдмреНрд▓реЙрдХрд░реНрд╕ рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рд╛рдВ рдореИрдВред

Tue рдкрд░, 27 рд╕рд┐рддрдВрдмрд░ 2016, 7:29 рдЕрдкрд░рд╛рд╣реНрди рдПрд▓реЗрдХреНрд╕ рдХреНрд░рд┐рдХреНрдЯрди рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@dtolnay https://github.com/dtolnay рдиреЗ рд╕рд░реНрдб-рдЖрд░рдПрд╕ / рд╕рд░реНрдб # 548 рджрд┐рдпрд╛
https://github.com/serde-rs/serde/pull/548 , рдХреНрдпрд╛ рдХреЛрдИ рд╢реЗрд╖ рд╣реИрдВ
serde рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХрд░реНрд╕?

@sgrif https://github.com/sgrif рдХрд╛ рдЬрд╝рдмрд░рджрд╕реНрдд , рдзрдиреНрдпрд╡рд╛рдж! рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░ рд▓реЗрдВрдЧреЗ
(рдпрд╛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ) рдХреНрдпрд╛ рдЖрдк рдпрд╣рд╛рдВ рдХрд┐рд╕реА рднреА рд╢реЗрд╖ рдмреНрд▓реЙрдХрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rust-lang/rust/issues/35900#issuecomment -250028743,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABdWK7MnA1rpn-WGji8gwAT2JCIqB4LFks5quaa-gaJpZM4JqEAX
ред

@alexcrichton

рджрд┐рдП рдЧрдП рд╕рд░реНрдб-рдЖрд░рдПрд╕ / рд╕рд░реНрдб # 548, рдХреНрдпрд╛ рд╕рд░реНрдб рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╢реЗрд╖ рдЕрд╡рд░реЛрдзрдХ рд╣реИрдВ?

рдирд╣реАрдВ, рдЕрдЧрд░ @ oli-obk рдпрд╛ @erickt рдЙрд╕ рдкреАрдЖрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдЬ рдпрд╛ рдХрд▓ рдореИрдВ рдЕрдЧрд▓реЗ рджрд┐рди рд╕рдм рдХреБрдЫ рдмрд╛рд╣рд░ рдзрдХреЗрд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рд░реБрд╕реЛрдЯреЛ рдЬреИрд╕реЗ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

@dtolnay рдореИрдВ рд░реВрдорд╛ рдореЗрдВ serde_macros рдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЖрдВрдЦреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддреЛ рдЖрдк serde_derive рдХрд╛ рднреА рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ Diesel_codegen рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП, рд░реВрдорд╛ рдЗрди рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░реАрдХреНрд╖рдг рдореИрджрд╛рди рд╣реИред

рдореИрдВрдиреЗ рд╕рд░реНрдб 0.8.10 рдЬрд╛рд░реА рдХрд┐рдпрд╛

рдЪрд▓реЛ "рдХрд╛рд░реНрдЧреЛ рдбреЙрдХ рдХрд╛рд░реНрдпреЛрдВ" рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - https://github.com/rust-lang/cargo/issues/3132ред

@dtolnay рдиреЗ рдХрд┐рдпрд╛!

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдпреЗ serde_derive рдмрдЧ рдпрд╛ рдПрдХ rustc / rustdoc рдмрдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрддреНрдкрдиреНрди d рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ:

  • рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди "///" рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЙрддреНрдкрдиреНрди docstrings рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред
  • Deserialize рдФрд░ Serialize рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди "///" рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЙрддреНрдкрдиреНрди docstrings рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ syn рдмрдЧ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП cargo update 0.8

рдореИрдВ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд╡рд╣ @alexcrichton рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред

@jimmycuadra

  • Deserialize рдФрд░ Serialize рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣ рдХрд╛рдлреА рдЧрдбрд╝рдмрдбрд╝ рд▓рдЧрддрд╛ рд╣реИ! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрдЧрджрд╛рдж рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдПрдХ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░рд╕реНрдЯрдбреЙрдХ рдЗрд╕реЗ Copy рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

#[derive(Clone)]           
pub struct Point {         
    x: i32,                
    y: i32,                
}                          

const _FOO: () = {         
    impl Copy for Point {} 
    ()                     
};                         

рдЙрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрдк-рд╡реНрдпреБрддреНрдкрдиреНрди рджреНрд╡рд╛рд░рд╛ рдЖрдХреГрддрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред @dtolnay рдиреЗ serde_macros рдХрд┐рдпрд╛ рдФрд░ рд╕рд╛рде рд╣реА рдкреАрдврд╝реА рдХрд╛ рднреА рдпрд╣реА рд░реВрдк рд╣реИ? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрдм рд╕реЗ рджреВрд░ рдЬрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛?

@jimmycuadra рдЙрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрдВрдЧ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдмрдЧ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

@dtolnay рдиреЗ serde_macros рдХрд┐рдпрд╛, рдХреНрдпрд╛ рдкреАрдврд╝реА рдХрд╛ рднреА рдпрд╣реА рд░реВрдк рд╣реИ?

рд╣рд╛рдБред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрдм рд╕реЗ рджреВрд░ рдЬрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛?

рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдЗрди рджреЛрдиреЛрдВ рдмрд╛рдзрд╛рдУрдВ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ:

  • рдЯреЛрдХрд░реЗ рдореЗрдВ рдирд╣реАрдВ, рдпрд╛рдиреА ::serde рдореЗрдВ рд╕рд░реНрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдо рд╣реИ рдЬрдм рд▓реЛрдЧ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдлреАрдЪрд░ рдлреНрд▓реИрдЧ рдХреЗ рдкреАрдЫреЗ рд╕рд░реНрдк рдкреНрд░рддреНрдпрд╛рд░реЛрдкрдг рд▓рдЧрд╛рддреЗ рд╣реИрдВред
  • рдЖрд╕рдкрд╛рд╕ рдХреЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рдЬреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/serde-rs/serde/issues/159 рджреЗрдЦреЗрдВред

@dtolnay рдЖрд╣ рдареАрдХ рд╣реИ, рддреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, @jimmycuadra рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛?

рдЕрдкрдбреЗрдЯ: рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рд╡рд╣рд╛рдБред рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╛ рдЫреЛрдЯреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдИ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рд╣рдо рдореБрдарднреЗрдбрд╝ рдХрд░реЗрдВрдЧреЗред рд╕рдВрднрд╡рддрдГ "рдбреАрдЬрд▓ рд╡рд░реНрдХреНрд╕" рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдкрд░ рдХрд▓ рд░рд┐рд▓реАрдЬ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдЖрдЬ рд░рд╛рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ # 36945 рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ rustc_macro proc_macro рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ рд░рдЦ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХреНрд░реЗрдЯ рдХреЗ рдирд╛рдо рдкрд░ рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд╕реНрдЯрдбреЙрдХ рдореЗрдВ рд▓рд╛рдкрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬреЛ рдЕрдм рджреВрд╕рд░реЗ рдореБрджреНрджреЗ рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ) рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рддред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ mockers рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдВрдХрд▓рдХ рдкреНрд▓рдЧрдЗрди рд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ "рддреНрд░реБрдЯрд┐: рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрд░рдЪрдирд╛ / рдПрдирдо рдЖрдЗрдЯрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ"ред рд╕рдВрдХрд▓рдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдВрднрд╡ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдЬреАрдм) рд▓рдХреНрд╖рдг рдкрд░ "рд╡реНрдпреБрддреНрдкрдиреНрди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХреНрдпрд╛ рдореИрдВ рдпрд╣рд╛рдВ рднрд╛рдЧреНрдп рд╕реЗ рдмрд╛рд╣рд░ рд╣реВрдВ?

@ рдХреНрд░рд┐рдХреЛрдореЗрдВрдЯ рджрд┐рд▓рдЪрд╕реНрдк! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЬ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореЗрдВ рдПрдХ рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрднреА рднреА #[derive] рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдерд╛ ...

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рддрдХ _stabilize_ derive-on-traits рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд┐рд░ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ @ рдЬрдВрдЧ-рд▓рдВрдЧ / рд▓рдВрдЧрдбрд╝рд╛?

@alexcrichton custom_derive рдХреЗ рдПрдХ рдкрд╣рд▓реВ рд╕реЗ рд▓рдХреНрд╖рдг рдФрд░

@KalitaAlexey рдХреЛрдИ рдирд╣реАрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ derive рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдХреГрддреНрд░рд┐рдо рд╕реАрдорд╛ рд╣реИ

@alexcrichton рдХреНрдпрд╛ рд╣рдо рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ , рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рдХрднреА рднреА рд▓рдХреНрд╖рдг рдкрд░ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рдереА, рдФрд░ рдпрд╣ RFC рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡реНрдпреБрддреНрдкрдиреНрди-рдСрди-рдЯреНрд░реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рдкрд╣рд▓реЗ рдкрд╛рд╕ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдЕрд▓рдЧ рд╕реБрд╡рд┐рдзрд╛ рджреНрд╡рд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди-рдСрди-рдЯреНрд░реЗрд▓ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреНрд╖реЗрддреНрд░ рдХреА рд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред (рдЬреИрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ #[derive] рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рддрд╛ рд╣реИ)

рдореИрдВ рдирд┐рдпрдорд┐рдд рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╕рдорд╛рди рд╕рдЯреАрдХ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд╣рдо _might_ рдХреЛ рдмрд╛рдж рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ RFC'ed рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдореИрдВ рд╡рд┐рдЪрд╛рд░, tbh рдкрд░ рдмрд╣реБрдд рдардВрдбрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рдПрдХ рд╕рднреНрдп рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред )ред

@alexcrichton

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрднреА рддрдХ рд╡реНрдпреБрддреНрдкрдиреНрди-рдкрд░-рд▓рдХреНрд╖рдг рдХреЛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд┐рд░ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ @ рдЬрдВрдЧ-рд▓рдВрдЧ / рд▓рдВрдЧрдбрд╝рд╛?

ЁЯСН рдореБрдЭрд╕реЗред

рдареАрдХ рд╣реИ, рдЕрд╕реНрдерд┐рд░ рд╕реБрд╡рд┐рдзрд╛ рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд┐рд░ (рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдмрд┐рдирд╛) рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ macro!(тАж) рд╕рд┐рдВрдЯреИрдХреНрд╕ "рдореИрдХреНрд░реЛрдЬрд╝ 1.1" рджреНрд╡рд╛рд░рд╛ рднреА рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдВ?

рдореИрдВ рдЦрд░реАрдж рдореИрдХреНрд░реЛ RFC рдХреА рдкреБрди: рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡рд╣рд╛рдВ рдпреЛрдЬрдирд╛ рдпрд╣ рдереА рдХрд┐ рдореИрдХреНрд░реЛ рдХреНрд░реЗрдЯреНрд╕ рд╕реНрд╡рдпрдВ рдХреЛ #[cfg(macro)] рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред рд╣рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреЛрдХрд░реЗ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреЛ рддрдВрддреНрд░ рдХреБрдЫ рд╣рдж рддрдХ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реИрдВ - рдкрд╣рд▓рд╛ рд╕рдВрдХрд▓рди рдХреЗ рдЪрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЯреЛрдХрд░рд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ред рд▓реЗрдХрд┐рди рд╡реЗ рднреА рдХреБрдЫ рд╣рдж рддрдХ рдЕрддрд┐рд╡реНрдпрд╛рдкреА рд╣реИрдВ - рдпрд╣ рдмрд╛рдж рдореЗрдВ рдкреВрд░реНрд╡ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИред рдкреВрд░реНрд╡ рднреА рдПрдХ рд╣реА рдмрдХреНрд╕реЗ рдореЗрдВ рдЦрд░реАрдж рдореИрдХреНрд░реЛ рдФрд░ рдЧреИрд░-рдореИрдХреНрд░реЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░рд╛рдЬреВ, рдЬрдмрдХрд┐ рдмрд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рд╢рд╛рдпрдж рдореИрдХреНрд░реЛрдЬрд╝ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдореЗрдВ рд╣реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд▓реЛрдбрд┐рдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рддрдВрддреНрд░ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЯреЛрдХрд░рд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП)ред рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫред

@kriomant рд╕рд╣реА, рд╣рд╛рдБ

@nrc рдЕрднреА рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ cfg(rustc_macro) (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрд▓реНрдж рд╣реА proc_macro рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЗ рд░реВрдк рдореЗрдВ proc-macro рд╕рд╛рде рдФрд░ рдПрдХ рдмрд╛рд░ рдЯреЛрдХрд░рд╛ рдкреНрд░рдХрд╛рд░ rlib , рдФрд░ рдмрд╛рдж рдореЗрдВ libsyntax рдпрд╛ рдХреБрдЫ рднреА рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЙрд╕ред

рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ _require_ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдХреА рддрд╛рд░реАрдЦ рдореЗрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рд╕рдорд░реНрдерди рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛? (рджреЛ рдмрд╛рд░ рдЯреЛрдХрд░рд╛ рд╕рдВрдХрд▓рди)

@alexcrichton #[proc_macro_derive] рдЕрд░реНрде рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЙрд╕реА рддрд░рд╣ #[test] рдХрд╛ рддрд╛рддреНрдкрд░реНрдп #[cfg(test)] ред
(рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдЕрднреА рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо cfg рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдЖрдЗрдЯрдо рдЪреЗрддрд╛рд╡рдиреА рд╣реИред)

@eddyb extern crate proc_macro; рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рднреА рдЯреВрдЯ рдЬрд╛рдПрдВрдЧреЗред

@ рдорд┐рд╕реНрдЯрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЯреЛрдХрд░рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЭреБрдВрдб рд╣реЛрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ libsyntax рд╕реЗ рднреА рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рдЯреЛрдХрд░рд╛ рдПрдХ proc_macro рдЯреЛрдХрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рди рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рд╕рдВрдХрд▓рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рднреА рдкрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?

@ рд╣реЗрдбреНрдбреА рд╣рд╛рдБ #[proc_macro_derive] рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ _also_ рдХреЛ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдХрд╛рд░рддреНрдордХ рд░реВрдк рд╕реЗ рдкрд╣реБрдВрдЪрддреА рд╣реИрдВ (рдЬреИрд╕реЗ extern crate proc_macro )ред рдпрджреНрдпрдкрд┐ рдпрд╣ "рдмрд╕ рдПрдХ рдЯреЛрдХрд░рд╛" рд╣реИ, рдЗрд╕рдореЗрдВ рдЧрдВрднреАрд░ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рднрд╛рд╡ (рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХрд┐рдВрдЧ, рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЖрджрд┐) рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ #[cfg(test)] , рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рднреА рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП #[cfg(proc_macro)] ред

@alexcrichton _Ideally_, рдЯреЛрдХрд░реЗ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХрд┐рдВрдЧ рдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреЗрд╡рд▓ libstd ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрд╕реЗ #![no_std] рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ред

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рд╕рдм рдХреБрдЫ рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рд╢реБрд░реВ рд╕реЗ рд╣реА рдбрдмрд▓-рдХрдВрдкрдЯреАрд╢рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдЕрдкреЙрдЗрдВрдЯрдореЗрдВрдЯ :ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рд░реБрдХреЛ, рдореИрдВ рднреА рдХреНрдпрд╛ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ? рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХреНрд░реЗрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдбрдмрд▓-рд╕рдВрдХрд▓рди _ рдЕрдирд┐рдпрдорд┐рдд_ рдХреНрд░реЗрдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ _also_ рдирд┐рд░реНрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ / рд╡рд┐рд╢реЗрд╖рддрд╛ / рд╡реНрдпреБрддреНрдкрдиреНрди / рдЖрджрд┐ред рддреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рд╣рдо рдХрдо рд╕реЗ рдХрдо #[cfg(proc_macro)] рдХреЛ рд╣рдореЗрд╢рд╛ рдирдП рдЯреЛрдХрд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

To рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЗрд╕ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣реА рд╣реИ! ЁЯФФ

рд╕реНрдерд┐рд░реАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдЕрдм рд╣реИ:

  • рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдПрдкреАрдЖрдИ рд╕рддрд╣, рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛, _extremely_ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реИред рдЙрд╕реА рд╕рдордп рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ-рд╕рдВрдЧрдд рд╣реИ
  • рд╕рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЬрд▓реНрдж рд╣реА рдбреАрдЬрд▓ - рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ _client_ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
  • рдореЗрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ FCP рдЕрдм рд╣рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рддреАрди рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рджреЗрддрд╛ рд╣реИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд┐рд░, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рд╢реЗрд╖ рдореБрджреНрджреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд╛рдо рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдкрд╣рд▓реЗ рдЖрдо рд╕рд╣рдорддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ proc_macro рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рдо рдЗрд╕ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдареАрдХ рдЕрдВрдХ рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЯреЛрдХрд░рд╛ рдХреЛ рджреЛ рдмрд╛рд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рдХреНрд░реВрдб рд▓рдЧрддрд╛ рд╣реИ: рд╕реНрдХреВрдкрд┐рдВрдЧ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ extern! crate needed_for_my_inline_proc_macros; рдЬреИрд╕рд╛ рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред

@aturon рдХреНрдпрд╛, рд▓реЛрдЧ рдЕрднреА рдЗрд╕ рджрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@Emon2314 рдпрд╣ рдЙрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ FCP рдЯрд┐рдкреНрдкрдгреА рдмрддрд╛рддреА рд╣реИ, рд╕реНрдерд┐рд░ рдЪреИрдирд▓ рдкрд░ рд╢рд┐рдкрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ _minimum_ рд╕рдордп рдЕрдм тАЛтАЛрд╕реЗ рддреАрди рдорд╣реАрдиреЗ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрддреНрдпрдВрдд рд╕рдВрдХреАрд░реНрдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ FCP рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ 6 рд╕рдкреНрддрд╛рд╣ рдХрд╛ рд▓рдВрдмрд╛ рдЪрдХреНрдХрд░ рд╣реИ рдЬреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рднреА рдбрд╛рд▓ рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЕрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ, рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ 3 рдорд╣реАрдиреЗ рдореЗрдВ рдЬрд╣рд╛рдЬ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рдЖрд╣ рдЕрдЪреНрдЫрд╛ред рдореБрдЭреЗ 3 рдорд╣реАрдиреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╛рдж рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕реНрдерд╛рди рдХреЛ рднреВрд▓ рдЧрдП FCP рдЙрди 3 рдореБрдВрд╣ рдХреЗ рднреАрддрд░ --- рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ 22 рдЕрдЧрд╕реНрдд рд╕реЗ 3 рдореМрди рдерд╛ред рдлрд┐рд░ рднреА рд╕рдордп рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдЪрд░рдгрдмрджреНрдз рдореБрджреНрджреЗ рдЙрдард╛рдП рд╣реИрдВ, рд╡реЗ рдЦрд░реАрдж рдореИрдХреНрд░реЛ рдХрд╣рд╛рдиреА рдХреЗ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рднреА рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрди рд╕рдВрдмреЛрдзрд┐рдд рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

@alexcrichton rustc_copy_clone_marker рдФрд░ рдЕрдиреНрдп rustc_attrs рдЕрднреА рднреА рд╣рдореЗрдВ рдХрд╛рдЯ рд░рд╣реЗ рд╣реИрдВред Https://github.com/serde-rs/serde/issues/577 рджреЗрдЦреЗрдВ

#[derive(Copy, Clone)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct MyStruct {
    value: i64,
}

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдСрд░реНрдбрд░ рд╕реНрд╡реИрдк рдХрд░рдирд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рд╣реИред

#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[derive(Copy, Clone)]
pub struct MyStruct {
    value: i64,
}

рдореИрдВрдиреЗ рдореИрдЧреНрд░реЛрд╕ 1.1 рдкрд░ https://github.com/sfackler/rust-postgres-derive рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рджрд░реНрдж рд░рд╣рд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдХрдИ рд╡реНрдпреБрддреНрдкрддреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рджрд░реНрдж рд╣реИред рд╕рд░реНрдб рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛрдиреЛрдВ рд╡реНрдпреБрддреНрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬреАрдм рддрд░реНрдХ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/sfackler/rust-postgres-derive/blob/master/postgres-derive-internals/ src / lib.rs # L26

рдпрд╣ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦрдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмрдбрд╝рд╛ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдореБрджреНрджрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд╢рд╛рдпрдж рдЬрд▓реНрдж рд╣реА рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдлреИрдВрд╕реА macro_rules! -рд╕реНрдЯрд╛рдЗрд▓ рд░рд┐рдкреАрдЯреАрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде quote 0.3.0 рдЬрд╛рд░реА рдХрд┐рдпрд╛ (рдзрдиреНрдпрд╡рд╛рдж nudge рдХреЗ рд▓рд┐рдП

pub fn enum_body(name: &str, variants: &[Variant]) -> Tokens {
    let num_variants = variants.len();
    let variant_names = variants.iter().map(|v| &v.name);

    quote! {
        if type_.name() != #name {
            return false;
        }

        match *type_.kind() {
            ::postgres::types::Kind::Enum(ref variants) => {
                if variants.len() != #num_variants {
                    return false;
                }

                variants.iter().all(|v| {
                    match &**v {
                        #(                           // \
                            #variant_names => true,  //  |----- new feature
                        )*                           // /
                        _ => false,
                    }
                })
            }
            _ => false,
        }
    }
}

рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдБ, рдХреНрдпреЛрдВ # рдФрд░ $ ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рд╣рдореЗрд╢рд╛ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЙрджреНрдзрд░рдг рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ ${...} рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рдЕрднреА рднреА ES6 рдЯреЗрдореНрдкрд░реНрдб рд╢рд╛рдмреНрджрд┐рдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдпрд╣ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╣реЛред \{...} рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╣реАрдВ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдХреЛрдИ рдХреЛрд╖реНрдардХ рд╕реНрдкреЙрдЯ рдХрд░рдирд╛ рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдБ, рдХреНрдпреЛрдВ # рдФрд░ $ ?

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдореИрдХреНрд░реЛ_рд░реБрд▓реНрд╕ рдореИрдХреНрд░реЛ рд╣реИ рдФрд░ рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛: рдореБрд╕реНрдХрд╛рди:ред $v рдПрдХ рдЯреЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрд░ v рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $v рд╕реЗ рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд #v рджреЛ рдЯреЛрдХрди рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдорд┐рд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдкрд╣рдЪрд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

macro_rules! demo {
    ($tt:tt) => {};
}

fn main() {
    demo!($v);
}

рд░реБрдХреЛ рд╕рдм рдХрд┐ macro_rules рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ! рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рднреВрд▓ рдЧрдпрд╛ рдерд╛ рдХреЗрд╡рд▓ рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕ рдиреЗ рдХрд╣рд╛, $x рдПрдХ рдЯреЛрдХрди рд╣реЛрдирд╛ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рджреЛрд╖ IMO рд╣реИред cc @jseyfried

@dtolnay

@alexcrichton рдкрд░ рдЬрдВрдЧреА_рдХреЛрдкреА_рдХреНрд▓реЛрди_рдорд╛рд░реНрдХрд░ рдФрд░ рдЕрдиреНрдп рдЬрдВрдЧреА_рдХрдЯреНрд╕ рдЕрднреА рднреА рд╣рдореЗрдВ рдХрд╛рдЯ рд░рд╣реЗ рд╣реИрдВред рджреЗрдЦреЗрдВ serde-rs / рд╕рд░реНрдб # 577

рд╣реЗ рдкреНрд░рд┐рдп, рдпрд╣ рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИ! рдореИрдВ рд╢реАрд░реНрд╖ рдкрд░ рд╕реВрдЪреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред @nrc рдпрд╛ @jseyfried рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд┐ рд╣рдо рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рд╕рдм рдХреБрдЫ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдЖрджреЗрд╢ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ #[derive] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ, рддреЛ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдФрд░ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@sfackler

рдХрдИ рд╡реНрдпреБрддреНрдкрддреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рджрд░реНрдж рд╣реИ

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдХрд╛рдлреА рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛, рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@alexcrichton рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реАрдЬрд┐рдП

#[derive(ToSql, FromSql)]
enum Foo {
    #[postgres(name = "bar")]
    Bar
}

#[postgres] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ ToSql рдФрд░ FromSql рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдВрддрд┐рдо рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЫреАрди рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдпрдерд╛ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ToSql рдФрд░ FromSql рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рднреЛрд▓реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреАрди рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рджреВрд╕рд░реА рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрдиреБрдХреВрд▓рди рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЗрд╕ рд╕рдордп рдХреЗ рдЖрд╕-рдкрд╛рд╕ рд╕рд░реНрдб-рдбреЗрд░рд┐рд╡ рдФрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ-рд╣реИрдХ рд╣реИрдХ рджреЛрдиреЛрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЙрд╕ #[derive] рдЙрд╕ рдПрдХ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕реНрдЯреНрд░рд┐рдкреНрд╕ рдХреЗ рдмрд╛рдж рд╕реЗ рд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬреЗрдВ: https://github.com/sfackler/rust-postgres-derive/blob /master/postgres-derive/src/lib.rs#L18

@sfackler I _think_ рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреАрдирдХрд░ рднреА рдЗрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдПрдХ рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ рд╕реЗ рдХреЛрдИ рд╡реНрдпреБрддреНрдкрдиреНрди рдирд╣реАрдВ рдмрдЪрд╛ рд╣реЛред рдЖрдкрдХрд╛ рд░рд╛рд╕реНрддрд╛ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ _shrug_ред

@sfackler рдЖрд╣ рдареАрдХ рд╣реИ, рд╕рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡рд╣ рддрд░реНрдХ рднрдВрдЧреБрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ToSql рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ FromSql рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛? рдпрд╣ #[cfg] рдкреАрдЫреЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ @dtolnay рд╢рд╛рдпрдж рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ? рддреЛ рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

@alexcrichton рд╣рд╛рдБ рдпрд╣ рднрдВрдЧреБрд░ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╛рдзрд╛рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред

рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реЗ рдкрд╣рд▓реЗ #[cfg] рдФрд░ #[cfg_attr] рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ?

рдЪреВрдВрдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдПрдкреАрдЖрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рддреАрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

  1. рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
  2. рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
  3. рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдореЛрдВ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ

рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ / рд╡рд┐рдкрдХреНрд╖ рд╣реИрдВред
con 1: рдЗрд╕ рдмреАрдЪ рдХреЗ рд▓рд┐рдП рднрдВрдЧреБрд░ workarounds
рдХрд╛рдВрдЧреНрд░реЗрд╕ 2: рдХреБрдЫ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдХреЙрди 3: рдПрдХ рдЕрдВрддрд░рд┐рдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдПрдкреАрдЖрдИ рд╕рддрд╣

рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ #[used(...)] рдореЗрдВ рд░реИрдкрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдлреЗрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдФрд░ рдмрд╣реБрдд рд╣реА рдЗрдВрд╕реНрдЯрд╛-рд╕реНрдерд┐рд░ рд╣реИред

@alexcrichton

рдЬрдм рдПрдХ #[derive] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдЪреВрдБрдХрд┐ #[cfg] s рдФрд░ #[cfg_attr] s рдХреЛ #[derive] s рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, #[cfg] - #[derive] s рдХреЛ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реНрдЯреНрд░рд┐рдкрд┐рдВрдЧ рдЗрд╢реНрдпреВ рдХреЗ @sfackler рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП)ред

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг @sfackler рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдмрдирд╛ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @eddyb рдХрд╛ рд╕реБрдЭрд╛рд╡ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛)ред

рдирд┐рдпрдВрддреНрд░рдг рдЧреБрдг рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдХреБрдЫ рд╣рдж рддрдХ рд╕рдорд╛рди рд╣реИ: https://github.com/sfackler/rust-postgres-derive/blob/master/postgres-derive-codegen/src/libред rs # L23 -L50

рдЖрдкрдХреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдк рдХрдВрдЯреНрд░реЛрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЖрдк рдПрдХ рдкрд╛рд╕ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд╛рдж рд╕рд╛рдл рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рддрд╛ рд╣реИред

рдбреАрдЬрд▓ рднреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред https://github.com/diesel-rs/diesel/blob/master/diesel_codegen/src/lib.rs#L101 -L112

@dtolnay рдХрдИ #[derive] рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЪрд┐рдВрддрд╛ @jseyfried рдХреЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рддрдп рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП

рдореИрдВрдиреЗ syn рдФрд░ quote рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдирд╛рдЯрдХ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрдиреБрднрд╡ рдерд╛ред рдЬрдм рдпрд╣ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреАред

рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ serde рд╡реНрдпреБрддреНрдкрдиреНрди рддрд░реНрдХ рдХреЗ рдиреАрдЪреЗ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореЗрд░реЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреЛ рдХрд╛рдЯ рд░рд╣реА рд╣реИред

рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдЕрдиреБрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛, рдпрд╛ рджреЗрд░ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЬреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдкрдЯреНрдЯреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддреЗ рд╣реИрдВред

рдпрд╣ рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдкрд╛рд╕ рдореВрд▓ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рдХреЛ рдореНрдпреВрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛, рдпрд╣ рдПрдХ рдЦрддрд░рдирд╛рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдЕрдВрдд рдореЗрдВ рдЕрдм рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдХреЗ рдмреАрдЪ рдЬрдВрдЧрд▓реА рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдмрд╛рдж рдореЗрдВ рдирд┐рдХрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЗрдиреЗрд░рд┐рдХ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрде рдореЗрдВ рдПрдХ рд▓рд╛рдкрддрд╛ рдЕрд░реНрдз-рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдерд╛, рдФрд░ рдЬрдВрдЧ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛ред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд╕ рд╕реНрдереВрд▓ рд╕реНрдереВрд▓ рдХреЗ рдХрд╛рд░рдг lex рддреНрд░реБрдЯрд┐ рд╣реБрдИ, рдХрд┐рд╕ рдЯреЛрдХрди рдиреЗ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рдЖрджрд┐ред

error: custom derive attribute panicked
  --> src/simple.rs:69:1
   |
69 | struct C(u64);
   | ^^^^^^^^^^^^^^
   |
   = help: message: Failure parsing derived impl: LexError { _inner: () }

рдореИрдВрдиреЗ LexError рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рдмрдирд╛рдпрд╛, рдпрд╣ 13 рдЕрдХреНрдЯреВрдмрд░ рдХреА рд░рд╛рдд рдХреЗ рд╕рд╛рде рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рд░рд╕реНрдЯрдЕрдк рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдерд╛) https://github.com/keeperofdakeys/proc_macro_derive_testред

@ рдЬрдВрдЧ-рд▓реИрдВрдЧ / рд▓реИрдВрдЧ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрдкрдиреЗ рдПрдиреЛрдЯреЗрдЯ рдЖрдЗрдЯрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЙрдкрд╛рдп рд╣реИ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╛рдлреА рдЕрд▓реЛрдХрдкреНрд░рд┐рдп рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рднреА рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ - рд╕рд╛рджрдЧреА рдЕрдЪреНрдЫреА рд╣реИ, рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореБрдЭреЗ рдмреЗрддрд╣рд╛рд╢рд╛ рдмреЗрд╣рддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдбрд╝рддрд╛рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдпрджрд┐ рдЖрдЗрдЯрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдЗрдЯрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ (рднрд╡рд┐рд╖реНрдп рдореЗрдВ) рдЧреИрд░-рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд░ рд╕рдХреЗрдВред

рдХрд┐рд╕реА рдХреЛ "рд╕рдВрд╢реЛрдзрд┐рдд" рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рд╕рд┐рд░реНрдл рд╣рдо рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдкрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдпрджрд┐ рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╕рдВрднрд╡рддрдГ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдВрд░рдЪрдирд╛-рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдереВрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдп рд╕рднреА рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдкрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдореИрдХреНрд░реЛ рддрдВрддреНрд░ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдмрдЬрд╛рдп рдХрд┐ рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╡реЗрдХ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗред

рдХреИрд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рд╡реНрдпреБрддреНрдкрдиреНрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрдиреНрдп рд╡реНрдпреБрддреНрдкрдиреНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рднреА рд╕рдВрд▓рдЧреНрди рдкреНрд░рдХрд╛рд░ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЕрдЧрд░ рд╣рдо рдЙрд╕ рдкрд░ рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рд╡рд╛рд▓ рдмрди рдЬрд╛рддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдВ, рдпрд╛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╣рд╛рдБ, рджреЛ рд╡рд┐рдкрд░реАрдд рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИрдВ:

  • рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдиреБрдмрдВрдз рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдЬрдВрдЧ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
  • рдЙрд╕ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП serde рдФрд░ deisel рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╣реИрдВред

рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдиреЛрдЯреЗрдЯ рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрд╣реБрдд рд╕реА рднреВрдорд┐рдХрд╛рдПрдВ рднрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЕрдиреНрдпрдерд╛ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@sgrif рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдбреАрдЬрд╝рд▓ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд░реНрдб рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреНрд░рдорд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдореИрдХреНрд░реЛ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдпрд╛ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ deisel рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ "рдПрдиреЛрдЯреЗрдЯ рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛ рджреЗрдВ," рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдк рдЖрдЗрдЯрдо рдкрд░ рдПрдХ рдмрд╣реБрдд рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред

@ рдЗрд╕рдХреЗ рд╕рд╛рде 90% рдпрд╣ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд╣реАрдВ рдЫреВрддреЗ рд╣реИрдВред рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмреИрдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрдЯ рдЖрдЗрдЯрдо рд╣рдЯрд╛рддреЗ рд╣реИрдВред https://github.com/diesel-rs/diesel/blob/master/diesel/src/macros/macros_from_codegen.rs#L12 -L18ред рдЗрд╕рд╕реЗ рдкрд░реЗ, рдХреЗрд╡рд▓ рд╕рдордп рд╣рдо рдЗрдирдкреБрдЯ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рдкрд░ рдХреБрдЫ рднреА рд╕реНрдкрд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдПрдиреЛрдЯреЗрд╢рди рд╕реНрдЯреНрд░рд┐рдк рдХрд░рдирд╛ рд╣реИред https://github.com/diesel-rs/diesel/blob/master/diesel_codegen/src/lib.rs#L109 -L120

@sgrif рдореИрдВрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдмреИрдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рднреА рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдмреИрдВрдЧ рдореИрдХреНрд░реЛ рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рдмрд╣реБрдд рдкрд╕рдВрдж рдХрд░реВрдБрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рд╕рдХрд▓ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рд╛рд╕реНрддрд╛ рднреА рд╕рдорд╛рди рд╕рдорд╕рд╛рдордпрд┐рдХ рдзрдорд╛рдХреЗрджрд╛рд░ рдореИрдХреНрд░реЛ рд╕реНрдЯреЛрд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ (рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рднрд╛рд░реА рд╣рд╛рде рд╕реЗ рд▓реЗрдХрд┐рди рд╕рд░рд▓ рд╕реНрд╡рдЪреНрдЫрддрд╛ рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ рдХрд┐ рд╕рднреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдореИрдХреНрд░реЛ рдХреЛ рджрд┐рдП рдЧрдП рдЯреЛрдХрдирд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдЪреНрдЫрддрд╛ рдХреЗ рд╕рд╛рде рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВ? рдореИрдВ? рдареАрдХ рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпрд╛ рд▓рдЧреЗрдЧрд╛) рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣ рд╣рдо рдФрд░ рднреА рдЕрдзрд┐рдХ рдмрдХреНрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрдХреНрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реЗрдВрд╕ рдмрдирд╛рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди рд░рдЦрдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдБред

рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХрд╛ рд▓рдХреНрд╖реНрдп рдХрдо рд░рдЦрд░рдЦрд╛рд╡ рдмреЛрдЭ рдХреЗ рд╕рд╛рде рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рддрдХ рд╕реНрдЯреЙрдкрдЧреИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╛рдЗрди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЙрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рдЬреЛ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереА, рддреЛ рдореИрдВ рдЗрд╕рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд░реЛрдз рдХрд░реВрдВрдЧрд╛

рд╢рд╛рдпрдж рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрд░рдПрдлрд╕реА рдХрд╛ рдореЗрд░рд╛ рдкрдврд╝рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИред рдпрд╣реА рд╣реИ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ TokenStream рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдЬрд╛рдПрдВрдЧреА, рд▓реЗрдХрд┐рди рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдЗрд╕ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдиреЛрдЯреЗрдЯ рдЖрдЗрдЯрдо рдкрд░ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдФрд░ рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ deisel рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ )ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдирдХрд╛рд░рд╛рддреНрдордХ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ macro_rules рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде, рдЕрдкрджрд╕реНрде рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИ, рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдХреЗ рддрд╣рдд рдПрдХ рдЕрд▓рдЧ рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдкреАрдЖрдИ рдЬреЛ рдЕрдзрд┐рдХ рд╕рдВрдпрдорд┐рдд рд╣реИ, рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдПрдЧреА, рдореИрдВ рд╣реВрдБ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд░рд╛рджрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдХреЛрдИ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╡рдЧрдд рдХрд░рд╛рдпрд╛ред

@woutoutboats : рд╕рд░реНрдк рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдпрд╛ рдЕрдиреНрдпрдерд╛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕рдВрдХрд▓рдХ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЦреБрдж рдХрд░рдиреЗ рдХреА рдмрдЬрд╛рдп, рд╣рдорд╕реЗ рдЫреАрди рд▓рд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред

@ рд╣реЗрдбреНрдбреА рдореИрдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдЬрд╛рд╡рдЯ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╕рдЬреНрдЬрд╛рдХрд╛рд░ (рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ) рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд╣реАрдВред

@ рд╣реЗрд░рд┐рдХ рд░рд╛рдЗрдЯред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдиреЛ-рдСрдк рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЫреАрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпреБрддреНрдкрдиреНрдиред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдиреЛ-рдСрдк рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЫреАрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпреБрддреНрдкрдиреНрдиред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдВрдЯрд░реНрдирд▓реНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдЬреЛ рдЗрд╕реЗ рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ рдЕрд╕рд░рджрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреЗрд╢ рдХрд░реЗ, рдЬреЛ рд╕реНрдЯреНрд░рд┐рдк рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИред рдореВрд▓ рдЖрдЗрдЯрдо?

рдореИрдВ рдпрд╣ рднреА рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдбреАрдЬрд▓ рдЕрдкрдиреЗ рд╕рднреА рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдПрдХ рдирд╛рдо рдХреЗ рддрд╣рдд рд╕рд░реНрдбреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ #[serde(rename = "name")] рдбреАрдЬрд▓ рдХреЗ #[table_name = "name"] рд╡рд┐рдкрд░реАрддред) рдХреНрдпрд╛ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдоред рдПрдХ рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?

рдирд┐рдпрдВрддреНрд░рдг рдЧреБрдг рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдХреБрдЫ рд╣рдж рддрдХ рд╕рдорд╛рди рд╣реИ: https://github.com/sfackler/rust-postgres-derive/blob/master/postgres-derive-codegen/src/libред rs # L23 -L50

рдЖрдкрдХреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдк рдХрдВрдЯреНрд░реЛрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЖрдк рдПрдХ рдкрд╛рд╕ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд╛рдж рд╕рд╛рдл рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рддрд╛ рд╣реИред

рдореИрдВрдиреЗ post-expansion рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ-рдПрдХреНрд╕рдкреЗрдВрд╢рди рдХреЙрд▓рдмреИрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЖрдкрдХреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдк рдХрдВрдЯреНрд░реЛрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЖрдк рдПрдХ рдкрд╛рд╕ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд╛рдж рдЪрд▓рддрд╛ рд╣реИред

рд╣рдордиреЗ рдЖрдЬ рд▓реИрдВрдЧ рдЯреАрдо рдХреА рдмреИрдардХ рдореЗрдВ рд╕рдВрд╢реЛрдзрди / рдЖрджреЗрд╢ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА, рдФрд░ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП (рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрддрд░рд┐рдд рдХрдИ рд╣реИрдХреНрд╕ рдирд╣реАрдВ рдереЗ, рдФрд░ рд╕рдЦреНрдд / рдбреАрдмрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рд╡рд┐рд╖рдп рдирд╣реАрдВ рдерд╛)ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рднрд▓реЗ рд╣реА рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрд╢реЛрдзрди рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рднреА рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рд╢реБрджреНрдзрддрд╛ рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдЬреЛ рд╕реНрд░реЛрдд рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЙрд╕ рдореЙрдбрд▓ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ FCP рдЕрд╡рдзрд┐ред рд╣рдордиреЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдкрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдВрддреНрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд▓реНрдХрд┐, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдХрд▓рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЙрд╕реЗ рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдмрдиреЗ рд░рд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред RFC 1755 рдХреЛ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдХреБрдЫ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдореЗрдВ рджреЗрд░реА рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдЯреВрд▓рдЪреИрди рд╕реЗ рджреВрд░ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ) рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реНрдб рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд▓реНрдж рд╣реА рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдЪрдХреНрд░ рд▓рдВрдмрд╛ рд▓рдЧ рдЬрд╛рдПрдЧрд╛ _ рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдо рдХреЗрд╕_ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

cc @alexcrichton , @dtolnay , @sgrif , @erickt - рд╡рд┐рдЪрд╛рд░?

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рд╕рд░реНрдб рдФрд░ рдбреАрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЖрдорддреМрд░ рдкрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдмрд╕ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ, рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд░реНрдб рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдбреАрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреАрдЬрд╝рд▓_рдХреЛрдбреЗрдЬ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдореИрдк рдХрд░рддрд╛ рд╣реИред

рдХрд╣рд╛ рдХрд┐, рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдореБрдЭреЗ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдЬреАрдм рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдереЛрдбрд╝реА рджреЗрд░ рддрдХ рдЕрд╕реНрдерд┐рд░ рд░рд╣рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рднреА рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рднрд▓реЗ рд╣реА рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрд╢реЛрдзрди рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдЖрдк рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖рдг рдЬреЛ рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рд╕рдЯреАрдХ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░реЗ asn1 рдЯреЛрдХрд░реЗ рдХреЛ рднреА рдХреБрдЫ рднреА рд▓реЗрдХрд┐рди рддреБрдЪреНрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рднреВрдорд┐ рддрдХ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ rfc рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛?

  1. рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрдХрди рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░рдПрдлрд╕реА (рд╕реНрдерд┐рд░ рдореЗрдВ рдиреЛ-рдСрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐)ред
  2. рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░рдПрдлрд╕реА, рдФрд░ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдореИрдХреНрд░реЛрдЬрд╝ рдЪрд▓рд╛рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╢рдмреНрджрд╛рд░реНрдеред

рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдореИрдХреНрд░реЛрдЬрд╝ рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓реЗрд╢рд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреЛ rfc рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рд╕реНрдерд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд╛рдо-рд╕реНрдерд╛рди, рдФрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ (рдЬреИрд╕реЗред рдПрдХ рдЯреЛрдХрд░реЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдЯреЛрдХрд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред рдореИрдВ рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреНрд░реЗрдЯ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреБрдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ name! рдореИрдХреНрд░реЛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рд╕рд╛рдзрд╛рд░рдг рдореИрдХреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ TokenStream , TokenStream рд╕рд╛рдорд╛рдиреНрдп рдХреАрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рд╕рдордп 30 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

@dragostis rfc рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЖрдЬ рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╕реНрд▓рд┐рд╡рд░ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ, рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛рдо рдЬреИрд╕реА рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЕрдВрддрддрдГ рдПрдХ рд╕реНрдерд┐рд░ рдПрдкреАрдЖрдИ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпреЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╕рдВрдХрд▓рдХ рдкрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХрд╛ рдмреЛрдЭ рдирд╣реАрдВ рдбрд╛рд▓реЗрдВрдЧреА, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде "рд╕рдВрдкреВрд░реНрдг рдореИрдХреНрд░реЛ рд╕рд┐рд╕реНрдЯрдо" рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреАред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрд╣ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ "рдореИрдХреНрд░реЛрдЬрд╝ 2.0" рдХреА рдУрд░ рдПрдХ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдХрджрдо рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╣реЛрдВрдЧреЗ рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ рдХреНрд▓реЛрдЬрд░ рд╕рд┐рд╕реНрдЯрдо рдЬрд┐рд╕реЗ рдЕрдм рд╣рдордиреЗ рдмрдирд╛рдпрд╛ рд╣реИред serde рдФрд░ diesel рдЬреИрд╕реЗ рд╕рдореБрдЪрд┐рдд рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд┐рдирд╛ рдЧрдВрднреАрд░ рдкреНрд░рдпреЛрдЬреНрдп рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реИрдВ, рддреЛ рдЪрд▓рд┐рдП рдЕрдм рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреЙрдк-рдЧреИрдк рдЙрдкрд╛рдп рдХрд░реЗрдВ - рдпрд╣ рднреА рд╕рдВрднрд╡ рдХреЗ рд╕рд╛рде рдЯреВрд▓реАрдВрдЧ рдФрд░ рдЕрдиреБрднрд╡ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рд╕рд┐рд╕реНрдЯрдоред syn рдФрд░ quote рдХреНрд░реЗрдЯ рдЗрд╕рдХреЗ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

@keeperofdakeys рд╣рд╛рдВ, рд╡рд╣ рдорд┐рд▓рд╛ред рдореИрдВ рдореИрдХреНрд░реЛрдВ 2.0 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмреЛрдЭ рд╢рд╛рдорд┐рд▓ рд╣реИ, proc_macro рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡реНрдпреБрддреНрдкрдиреНрди рдбрд┐рдЬрд╛рдЗрди рдХреЛ рджрд░реНрдкрдг рдХрд░рддрд╛ рд╣реИред рдХреАрдЯ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░реНрд╕рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдПрдХ struct рдХреЗрд╡рд▓ рдЗрд╕реЗ рд╕реЗ рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ struct рдЦреБрдж рд▓реЗрдХрд┐рди рдмреАрдЪ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╕рд░рд▓ рд╡реНрдпрд╛рдХрд░рдг рд╕реЗ {} ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдореГрдд рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рд╣рд╛рд▓рд╛рдВрдХрд┐!

@dragostis рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдЗрдВрдЯрд░реНрдирд▓ рдкрд░ рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд▓рд╛рдпрд╛ рдерд╛ред рдЖрдк рд╡рд╣рд╛рдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: https://internals.rust-lang.org/t/pre-rfc-extend-macros-1-1-to-support-foo-style-macros/3921

@nrc

рдпрд╣ рднреА рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдкрд╡рд┐рддреНрд░рддрд╛ рдХреА рдУрд░ рдкреНрд░рд╡реГрддреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкрд░ рдПрдХ рдзреНрдпрд╛рди рджреЗрдВ: рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдХрдареЛрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдкрдбрд╝рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рд░рдорд╛рд░реНрдерд┐рдХрддрд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ "рд╢реБрджреНрдзрддрд╛" рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдзрд╛рд░рдгрд╛ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ / рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реАрдзрд╛ рд╣реИ, рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдордЬрдмреВрдд рд╕рд░рд▓реАрдХрд░рдг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╕реНрдерд┐рд░рддрд╛ рдЬрд╛рддреА рд╣реИ, рд╣рдо рдЕрднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд┐рд░ рддрдВрддреНрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛрдЧрд╛ (рдЗрд╕рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЛ рдЯреВрдЯрдиреЗ рдХрд╛ рдЦрддрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛) рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рд╣рдо рдРрд╕реЗ рд╕рд╛рдЗрдб-рдЪреИрдирд▓ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рддрдВрддреНрд░ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рдпрд╛ рд╣рдо @keeperofdakeys рдХреЗ рд╕реБрдЭрд╛рд╡ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рддрддреНрдХрд╛рд▓ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛ред

рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрди рдЪрд┐рдВрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЛ рд╕рд░реНрдб рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрдо рд╕реЗ рдХрдо "рдбреА рдлреИрдХреНрдЯреЛ" рд╕реНрдерд┐рд░ (рдпрд╛рдиреА, рдмреНрд░реЗрдХрд┐рдВрдЧ рдирд╣реАрдВ) рд╣реИред

@sgrif

рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рдЬреЛ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереА, рддреЛ рдореИрдВ рдЗрд╕рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд░реЛрдз рдХрд░реВрдВрдЧрд╛

рдореИрдВ @withoutboats рдХреА рдЧреВрдВрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рдореИрдХреНрд░реЛрдВ 2.0 рдХреЛ рдЬрд╣рд╛рдЬ рдХрд░рддреЗ рд╕рдордп рднреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ - рд╣рдо рдЗрд╕реЗ рдЖрдЬ рдХреЗ рдореИрдХреНрд░реЛ_рд░рд▓реНрд╕ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд┐рдо рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдПрдХ рдмрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдкрджрд╛рд╡рдирдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред

рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдореЗрд░реА рдзрд╛рд░рдгрд╛ @jimmycuadra рдХреА рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рдорд╛рди рдереА, рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ (рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЛ) рдХрд┐ рдбреАрдЬрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдереАрдВред

рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рдореИрдВ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд░рд╛рдд рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ (рднрд▓реЗ рд╣реА рдпрд╣ "рд░рд╛рддреНрд░рд┐рдХрд╛рд▓реАрди рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░" рд╣реЛ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЗ рддреНрд╡рд░рд┐рдд рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдЧрд░ рд╣рдо рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╣реБрдордд рдХреЛ рдирд╣реАрдВ рдЦреАрдВрдЪ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░рд╕реНрдЯ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдХреЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдПрдХ рдмрд┐рдВрджреБ рдЬреЛ рдореБрдЭреЗ рдердХрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рдФрд░ рдореМрдЬреВрджрд╛ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рддрд░реНрдХрд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдореЗрдВ рджрд┐рдЦреЗрдЧреАред рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди RFC рдореЗрдВ рдЯреЛрдХрд░реЗ рдХреЛ рдПрдХ рдЯреЛрдХрд░рд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╢реНрд╡реЗрддрд╕реВрдЪреАрдмрджреНрдз рдирд╛рдорд╕реНрдерд╛рди рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╣реАрдВ рдФрд░ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдЙрд╕ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдиреЗ рдореБрдЭреЗ рдПрдХ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдФрд░ "рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп" рдХреЗ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдХрд░ рджрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдпрд╣ рднреА рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрд░рдПрдлрд╕реА рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЛрд░реНрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ (рдЬреИрд╕реЗ рдХрд┐ рдЕрдЧрд░ рдореИрдВ serde рдЯреЛрдХрд░рд╛ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рдд: рд╢реНрд╡реЗрддрд╕реВрдЪреА рд╕рд░реНрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ) )ред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдкреВрд░реНрдг рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдареАрдХ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЬ рд╣реИред рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЗрд╕ рддрдереНрдп рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдпрджрд┐ рд╡реЗ рдЗрд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рд╕рд░рд╕рд░рд╛рд╣рдЯ-рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╕реЗ рд╕рд░реНрдб_рдмреЗрдХреНрдпреВ_ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реВрдВ, рд╕рд░реНрдб рдХреА рдХреЛрдб рдЬрдирд░реЗрд╢рди рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рд╣рдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдХрдореА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбрд┐рдЯреНрдЯреЛ @jimmycuadra рдФрд░ @sfackler, рдЧреБрдг @nrc рд╕реЗ Serde рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИрдВ рдХреА рдЯрд┐рдкреНрдкрдгреА рдЙрдиреНрд╣реЗрдВ рдзреНрд╡рдирд┐ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд▓рдЧрднрдЧ рд╕рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рд╕рд░рд╕рд░рд╛рд╣рдЯ-рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рджреНрд╡рд╛рд░рд╛ рд╣реА рдкрд░реЛрд╕рд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдЧрд░ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рд░рд╛рдд рдореЗрдВ рдЙрддрд╛рд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рд╕рд░реНрдб рдХреЛ рд╕рд░рд╕рд░рд╛рд╣рдЯ-рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдпрд╣рд╛рдВ рд╕рд╣реА рдХрджрдо рдкрд░ рдПрдХ рд░рд╛рдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд┐рд░ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрд░рджрд╛рд░ рдбреЙрдХреНрд╕ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

#[serde(skip_serializing)]

.. рдХреЗ рдмрдЬрд╛рдп:

/// <!-- serde(skip_serializing) -->

@tomaka

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖рдг рдЬреЛ рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рд╕рдЯреАрдХ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдХ рд╕рдВрддреЛрд╖рдЬрдирдХ рдкреИрдЯрд░реНрдиред

рдореИрдВ рдПрдХ рдмрд╛рдд рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рдХрд╕реНрдЯрдо рдХреЛ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдкреНрд░рдореБрдЦ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд╕реНрдЯрдо рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛?

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ foo! рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИрдХ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @ рдПрд╕рдЖрдИрдЖрд░рдЖрдИрдПрдл рдиреЗ рдбреАрдЬрд▓ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @tomaka рдиреЗ рдПрдХ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ) - рд╡реЗ рдХреЗрдВрджреНрд░реАрдп рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ ?

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ: рдореБрдЭреЗ рд▓рд╛рдн рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рддрдВрддреНрд░ рдХреЗрд╡рд▓ Add'l рдкреНрд░рддреНрдпрд╛рд░реЛрдкрдг рдХреА рд╕реВрдЪреА рд╡рд╛рдкрд╕ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкреИрди рд╕реНрд╡рдпрдВ рд╕рд╣реА рд╣реЛрдЧрд╛ред рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджреЗ рдПрдкреАрдЖрдИ рдХреЛ рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреЛрдбрд╝рдирд╛, рдЬреЛ рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдлрд┐рд░ рднреА рд╣рдо рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ рд╣реИрдВ ... рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ, рдЬрдм рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ), рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВ рд╢рд╛рдпрдж рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ "рдХрдЪреНрдЪреА рдмрд╛рдЗрдЯреНрд╕" рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдКрдВрдЧрд╛ рддрд╛рдХрд┐ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд▓рд┐рдЦрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ (рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рд▓реЛрдЧреЛрдВ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рди рдХрд░реЗрдВ рд╡реИрд╕реЗ рднреА рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╕рд╣реА; рд▓реЗрдХрд┐рди рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо?) рд╣рдо рд╢рд╛рдпрдж рдПрдкреАрдЖрдИ рдХреЛ рдереЛрдбрд╝рд╛ рдХреНрд▓рд┐рдВрдХрд░ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ =)

@nikomatsakis рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрди рд╕рднреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИрдВ рди рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рд╣реИрдХред

рд╣рд╛рдБ, рдореИрдВ рдЗрд╕ рдкрд░ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмреАрдЪ рдлрдЯрд╛ рд╣реБрдЖ рд╣реВрдБ, рджреЛрдиреЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдЧрд┐рд░рд╛рд╡рдЯ рд╣реИ:

  1. "рд╕рд░рд▓ рд╡реНрдпреБрддреНрдкрдиреНрди" рджреГрд╖реНрдЯрд┐рдХреЛрдг - рдПрдкреАрдЖрдИ рдХреЛ рдХреЗрд╡рд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрднреА рднреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд┐рд░ рдмрдирд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЫреЗрдж рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдбреАрдЬрд▓ рдФрд░ рдЕрдиреНрдп рдмрдХреНрд╕реЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреВрдж рд░рд╣реЗ рд╣реИрдВред
  2. "рдирд┐рдпреЛрдЬрд┐рдд рдЕрдкреНрд░рдЪрд▓рди" рджреГрд╖реНрдЯрд┐рдХреЛрдг - рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рджрд┐рди рд╕рдВрднрд╡рдд: рдирд┐рдХреЛ рдирд╛рдордХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдЫреЛрдЯреЗ рд╕рдорд╛рдпреЛрдЬрди рдХреЗ рд╕рд╛рде, рдЗрд╕реЗ рдХрд┐рд╕реА рджрд┐рди рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдХрд┐рд╕реА рджрд┐рди рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЕрдВрддрд░рд┐рдо рдЕрд╡рдзрд┐ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреАред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд▓реЗрдХрд┐рди @eddyb рдХрд╛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рднреА рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ @nrc рдХреБрдЫ рдЕрд▓рдЧ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ IIRC рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЛрдХрд░реЗ рдореЗрдВ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ), рдФрд░ рдпрд╣ "рдорд╛рд░реНрдХрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рднреА рдПрдХ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рд╣реЛрддрд╛ рд╣реИред

рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдЬрд┐рд╕реЗ рдореИрдВ рдореИрдХреНрд░реЛ 1.1 рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЬрдВрдЧ-рд╕реАрдкреАрдкреА рдХреЗ рд▓рд┐рдП рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬреЛ рдХреЗрд╡рд▓ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ рдЙрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдкрд░реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣реИрдХ рдХреЗ рдХреМрди рд╕реЗ рд░реВрдк @sgrif рдбрд┐рд╕реЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ _possible_ рдРрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╣рдо рд╕реНрд╡рдпрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдЗрдЯрдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

@Sfackler рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП

#[derive(Debug, Clone, Serialize(field("bar", rename = "baz")))]
pub struct Foo {
  pub bar: String,
}

рдЗрд╕ рдлреЙрд░реНрдо рдХреЛ рдмрд╛рдж рдореЗрдВ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдмрд╛рд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рдмрд╛рджред

рд╕рд░реНрдб рдФрд░ рдореЗрд░реЗ рдЯреЛрдХрд░реЗ рджреЛрдиреЛрдВ рдХреЛ рдлрд╝реАрд▓реНрдб / рд╡реИрд░рд┐рдПрдВрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡реНрдпреБрддреНрдкрдиреНрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЬреЛ рднреА рдирд┐рд░реНрдгрдп рд╣рдо рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрдм / рдпрджрд┐ рд╣рдо рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдкреАрдЖрдИ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ (рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓реЗрдЦрдХ)ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд╕рдордЭрджрд╛рд░ рдирд┐рд░реНрдгрдп рд╕рдВрдХрд▓рдХ рдХреЛ рдЕрдкрдиреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд▓рд┐рдП рдкрдЯреНрдЯреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ, рд╡реЗ рдХреЗрд╡рд▓ _all_ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЫреАрди рд▓рд┐рдП рдЧрдП рд╣реИрдВред рд╕рд░реНрдб, рдбреАрдЬрд╝рд▓, рдФрд░ рдореЗрд░реЗ рдЯреЛрдХрд░реЗ рд╕рднреА рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдкрд░ рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдореБрджреНрджрд╛ рд╣реИред

рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдкреЛрд╕реНрдЯ-рд╡рд┐рд╕реНрддрд╛рд░ рдЯреЛрдХрд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдЬреЛ @dtolnay рдиреЗ рдПрдХ рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИ, рдмрд╛рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдЯреНрд░рд┐рдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреАрдирдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдПрдЪрдЖрдИрдЖрд░ рдХреЛ рдкрддрд▓рд╛ рд░рдЦрдирд╛ рд╣реИ - рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╣реИ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдореБрдЦреНрдп рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдлреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИрдХ рд╣реИрдВ! рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @sgrif рдиреЗ рдбреАрдЬрд▓ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @tomaka рдиреЗ рдПрдХ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ) - рд╡реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд┐рддрдиреЗ рдХреЗрдВрджреНрд░реАрдп рд╣реИрдВ?

рдореИрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реВрдВ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЕрдХреНрд╕рд░ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рджреЗрдЦрд╛ рддреЛ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдЕрд╡рд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рддрд░реНрдХ рдирд╣реАрдВ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдХреЛ рдХреБрдЫ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╡реАрдирддрдо рд░рд╛рдд рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИред рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ

Queryable рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рдзрд╛ рд╣реИ

рдЬрдм рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рдиред

#[derive(Queryable)]
pub struct Post {
    pub id: i32,
    pub title: String,
    pub body: String,
    pub published: bool,
}

@sgrif рдЬреЛ # 37198 рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдерд╛, рдЬрд┐рд╕рдиреЗ рдЕрдиреНрдп рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рдорд╛рди рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдмрджрд▓ рджрд┐рдпрд╛ (рддрд╛рдХрд┐ bang!() рдореИрдХреНрд░реЛрдЬрд╝, #[attribute] рдореИрдХреНрд░реЛрдЬрд╝, рдФрд░ #[derive(custom)] рдореИрдХреНрд░реЛ рд╕рднреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рдПрдХ рд╣реА рдирд╛рдорд╕реНрдерд╛рди)ред

рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, #[macro_use] extern crate diesel; рдПрдХ рдмреИрдВрдЧ рдореИрдХреНрд░реЛ рдХрд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо Queryable рдФрд░ #[macro_use] extern crate diesel_codegen; рд╣реИ, рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдХрд╛ рднреА рдирд╛рдо Queryable , рдЬреЛ рдЪреБрдкрдЪрд╛рдк рдмреИрдВрдЧ рдореИрдХреНрд░реЛ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ (рдПрдХ рддрд░рдл) - #[macro_use] рдЪреБрдкрдЪрд╛рдк рдУрд╡рд░рд░рд╛рдЗрдЯрд┐рдВрдЧ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рд╣рдо рд╕рд╛рде рдирд┐рд░реНрд╡рд╛рд╕рди рдХреНрд░реЗрдЯ рд╕реЗ рдореИрдХреНрд░реЛ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ use рдХреЗ рдмрдЬрд╛рдп #[macro_use] , рдЬрд▓реНрдж рд╣реА)ред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рдореИрдХреНрд░реЛ рдордВрдЧрд▓рд╛рдЪрд░рдг рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ Queryable!(); рдХрд╕реНрдЯрдо рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХрд╕реНрдЯрдо рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдкрд░ рд▓реЗ рдХрд░ diesel_codegen рд╕реЗ рдмрдЬрд╛рдп рдзрдорд╛рдХреЗ рдореИрдХреНрд░реЛ diesel ред

@jseyfried рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рднреА рддреАрди "рдкреНрд░рдХрд╛рд░" рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИ? рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдореИрдХреНрд░реЛ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдЕрдм рдпрд╣ рдЙрд╕реА рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ (рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рднреА рдХрдо)

@withoutboats рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рдЙрдкрдорд╛ рд╣реИ, рдореИрдВ рдпрд╣ рд╕реЛрдЪрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдХреНрд░реЛрдЬрд╝ рдПрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдХреЙрд╕реНрдЯ)ред рдирд╛рдо рд╕реНрдерд╛рди рд░рдЦрдиреЗ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓рддрд╛ рд▓рд╛рдЧрдд рд╣реИ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд┐рддрдирд╛ рдХрдо рдмреЗрд╣рддрд░ рд╣реИ, рдЙрддрдирд╛ рд╣реА рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреИрдХ рдХрдореНрдпреВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрд╕рд▓реА рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЪреБрдирд┐рдВрджрд╛ рдЖрдпрд╛рдд, рдпрд╛ рдореИрдХреНрд░реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП use рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рддреЛ рдПрдХ рдЯреЛрдХрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдореИрдХреНрд░реЛ рдирд╛рдо рдХреНрд▓реИрд╢ рдкрд╛рдиреЗ рдХреА рдХреЛрдИ рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрд╕реА рд╕рдордп, рдореИрдВ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдореИрдХреНрд░реЛ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ ProcMacro рдЯреЛрдХрд░рд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП - рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдВ рдиреЗ derive_ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА рд╣реИ?

рдирд╛рдо рд╕реНрдерд╛рди рд░рдЦрдиреЗ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓рддрд╛ рд▓рд╛рдЧрдд рд╣реИ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд┐рддрдирд╛ рдХрдо рдмреЗрд╣рддрд░ рд╣реИ, рдЙрддрдирд╛ рд╣реА рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред consts рдФрд░ fns рдПрдХ рд╣реА рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ idents рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рдХрд╛рд░ рдФрд░ рд▓рдХреНрд╖рдг рдПрдХ рд╣реА рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред

рдпреЗ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдХреНрд░реЛрдЬрд╝ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдХреНрд░рдордг рдореЗрдВ рдХрднреА рдХреЛрдИ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрдЯрд┐рд▓рддрд╛ рд▓рд╛рдЧрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрдирдХреЛ рдЕрд▓рдЧ рд╕реЗ рдирд╛рдорд╛рдВрдХрд┐рдд рдХрд░рдХреЗ _use_ рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдЧрдд рд╣реИред рдЬрдм рдореИрдВ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд▓рд╛рдЧрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВред


рдХреНрдпрд╛ рдЖрдк рдХрд╣реЗрдВрдЧреЗ рдХрд┐ _all_ рдЖрдЗрдЯрдо рдПрдХ рд╣реА рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдпрд╣ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдерд╛? рдЕрдкрдиреА рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ред

рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП, рдореИрдВ рдпрд╣ рдХрд╣рдХрд░ рдареАрдХ рд░рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреЗрд╡рд▓ 1 рдирд╛рдо рд╕реНрдерд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рднреА рдЖрдЗрдЯрдо рд╣реИрдВ - рдореИрдВ рднреА рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ; рд╕рдВрдкреВрд░реНрдг "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛" рдкреИрдЯрд░реНрди рдереЛрдорд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ IMO рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреИрд░-рдореИрдХреНрд░реЛ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЬрдВрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдФрд░ рдореИрдХреНрд░реЛ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдЕрд╕рд▓реА рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЪреБрдирд┐рдВрджрд╛ рдЖрдпрд╛рдд рдпрд╛ рдореИрдХреНрд░реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЖрдк рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдХреЗ рд╕рд╛рде рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдпрд╣рд╛рдВ рдореЙрдбрд▓ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдЯреЙрдк-рдЧреИрдк рд╣реИрдХ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдВ рдиреЗ derive_ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА рд╣реИ?

рдпрд╣ рдкреБрд░рд╛рдиреА рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдгрд╛рд▓реА рдереА, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрдЯрд┐рд▓рддрд╛ рд▓рд╛рдЧрдд рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдЧрдд рд╣реИ

рдЙрдкрдпреЛрдЧ рдХреА рдХреБрдЫ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЧрдд рд╣реИ - рдпрд╣ рдЬреАрд╡рди рдХреЛ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдИ рдЬреНрдпрд╛рджрд╛ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрддрдиреА рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╛рдорд╕реНрдерд╛рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ) рдХреНрдпреЛрдВрдХрд┐ рднрд╛рд╖рд╛ рдЬрдЯрд┐рд▓рддрд╛ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рджрд╕реНрддрдХ рд╣реИ рд╕реНрд╡рдЪреНрдЫрддрд╛ рдФрд░ рдЫрд╛рдпрд╛рдВрдХрди рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдкрд░ рдкреНрд░рднрд╛рд╡, рдЖрдЧреЗ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЗрдВред

рдХреНрдпрд╛ рдЖрдк рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рд╕рднреА рдЖрдЗрдЯрдо рдПрдХ рд╣реА рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╣ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдерд╛? рдЕрдкрдиреА рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ред

рдореИрдВ рдмрд╣реБрдд рджреВрд░ рддрдХ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреЗ рд▓рд╛рдн рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдПрдХрд▓ рдирд╛рдо рд╕реНрдерд╛рди рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реЛрдЧреАред

рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛ рдЧреИрд░-рдореИрдХреНрд░реЛ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдХрд╛рдЙрдВрдЯрд░рдкреЙрдЗрдВрдЯ: рдореЙрдбреНрдпреВрд▓ рдФрд░ рдлрд╝реАрд▓реНрдб рд╡реИрд▓реНрдпреВ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрд┐рди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдЙрди рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@keeperofdakeys

рдЕрд╕рд▓реА рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЪреБрдирд┐рдВрджрд╛ рдЖрдпрд╛рдд, рдпрд╛ рдореИрдХреНрд░реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП use рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ

рд╣рдо рдЬрд▓реНрдж рд╣реА (~ 1 рд╕рдкреНрддрд╛рд╣) cf https://github.com/rust-lang/rfcs/pull/1561 рдкрд░ рдПрдХ рдлрд╝реАрдЪрд░ рдЧреЗрдЯ рдХреЗ рдкреАрдЫреЗ use рдореИрдХреНрд░реЛ extern crate рдкрд╛рдПрдВрдЧреЗред рдФрд░ # 35896ред рд╣рдо рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдмрдХреНрд╕реЗ рдХреЗ рд╕рд╛рде use рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдВ рдиреЗ derive_ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА

рдпрд╣ рдкреБрд░рд╛рдиреА рд╢реИрд▓реА рдХреЗ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд▓рд┐рдП рд╕рдЪ рдерд╛ред рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╕рд╛рде, #[derive(Serialize)] (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Serialize рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

@withoutboats

рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рднреА рддреАрди "рдкреНрд░рдХрд╛рд░" рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИ?

  • рд╡рд░реАрдпрддрд╛: рдмреИрдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдПрдЯреНрд░реАрдмреНрдпреВрдЯ рдореИрдХреНрд░реЛрдЬрд╝ рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдПрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддрдм рддрдХ рдХрд╕реНрдЯрдо рдирд╛рдо рдХреЛ рднреА рдЙрд╕ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛: рдпрджрд┐ рд╣рдо рдПрдХ рдПрдХрд▓ рдореИрдХреНрд░реЛ рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдХрдИ рдореИрдХреНрд░реЛ рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕рд╛рде рдЕрдЯрдХ рдЬрд╛рддреЗ рд╣реИрдВред
  • рд╕рд░рд▓рддрд╛: рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдореИрдХреНрд░реЛ "рддрд░рд╣" рдХрд╛ рдЕрдкрдирд╛ рдирд╛рдорд╕реНрдерд╛рди рд╣реЛрддрд╛, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрд▓ рдкрд╛рдВрдЪ рдирд╛рдорд╕реНрдерд╛рди рд╣реЛрддреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, https://github.com/rust-lang/rfcs/pull/1561 рднреВрдорд┐ рдХреЗ рдмрд╛рдж, use foo::bar; _five рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдЗрдЯрдо рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ_ рдиреЗ bar (рдПрдХ рдорд╛рди, рдПрдХ рдкреНрд░рдХрд╛рд░, рдПрдХ рдмреИрдВрдЧ рдореИрдХреНрд░реЛ) , рдЖрджрд┐), рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рднреА рд╕рд░рд▓ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрдВрдЧ рдореИрдХреНрд░реЛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдирд╣реАрдВ рдпрд╛ рдХреЗрд╡рд▓ baz рд░реВрдк рдореЗрдВ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдХрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВред

рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛: рдпрджрд┐ рд╣рдо рдПрдХ рдПрдХрд▓ рдореИрдХреНрд░реЛ рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдХрдИ рдореИрдХреНрд░реЛ рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕рд╛рде рдЕрдЯрдХ рдЬрд╛рддреЗ рд╣реИрдВред

рдпрд╣ рд╕рдореНрдореЛрд╣рдХ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 1.1 рдХреЗ рдмрд╛рдж рд╕реЗ рд╕реНрдЯреЙрдкрдЧреИрдк рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред : +1:

рдХреНрдпрд╛ рдпрд╣ рдмреНрд░реЗрдХ рдХреЛрдб рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореИрдХреНрд░реЛ_рд░реБрд▓реНрд╕ рдореИрдХреНрд░реЛ рд╣реИ, рдЬрд┐рд╕реЗ PartialEq! рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдирд╣реАрдВ, PartialEq рдХреЛ рд╕реНрдереВрд▓ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реИред
#[derive(Foo)] рдкрд╣рд▓реЗ рдЪреЗрдХ рдЕрдЧрд░ Foo рдПрдХ "рдмрд┐рд▓рд┐рдпрди рд╡реНрдпреБрддреНрдкрдиреНрди" ( PartialEq , Copy , рдЖрджрд┐) рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди Foo рдореИрдХреНрд░реЛ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ derive рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд╣рд╛рд░реНрдб-рдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рдо рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдЕрдВрддрддрдГ PartialEq рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд┐рд▓реНрдЯрдЗрди рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдПрдХ рдореЙрдбрд▓ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП):

  • рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ, рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ MultiItemModifier ред рдпрд╣ рдпреЛрдЬрдирд╛ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ рдФрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдВрддреНрд░ рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдиреЛрдЯреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдореИрдХреНрд░реЛ рд╣реИ, рд╡рд╣ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдо рдкреНрд▓рдЧрдЗрди рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЕрд╡рд░реЛрд╣реА рд╣реИред
  • рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд▓рд┐рдП CustomDerive рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд┐рднрд╛рдЬрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдереВрд▓ рд▓реЗрдЦрдХ рдЗрд╕реЗ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ рдЧреБрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕ рдкрдВрдЬреАрдХрд░рдг рддрдВрддреНрд░ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
  • рд╣рдо declare_attributes CustomDerive Vec<String> ред рдЗрд╕рдореЗрдВ рдЦрд╛рд▓реА vec рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИред
  • рдпрджрд┐ рдореИрдХреНрд░реЛ рд▓реЗрдЦрдХ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд▓реМрдЯреЗ рд╣реБрдП рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдХреНрд░реЛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реА рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдореИрдХреНрд░реЛ рдХреА рддрд░рд╣ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд┐рдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЧреБрдг рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╕реНрддрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕реА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛ рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЫреБрдЖ рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рднреА рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд┐рдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧреА (рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд┐рдВрдЯ рдирд╣реАрдВ)ред
  • рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ scoped рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╕рд╣рд┐рдд рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпреЗ _in рдЬреЛрдбрд╝_ рд╕реЗ declare_attributes рдФрд░ рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рдкрджрд╛рд╡рдирдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рд╡реИрдХрд▓реНрдкрд┐рдХ: declare_attributes рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ declare_attributes рдиреЗ vec!["foo::bar"] рд▓реМрдЯрд╛рдП, рддреЛ #[foo::bar::baz] рдФрд░ #[foo::bar::qux] рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреАред

рд╡рд┐рдЪрд╛рд░? cc @alexcrichton @jseyfried @dtolnay @sgrif @erickt @ рдЬрдВрдЧ-рд▓рдВрдЧ-рд▓рдВрдЧ

@nrc рдХреНрдпрд╛ рд╡рд╣ рддрдВрддреНрд░ _used_ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ #[cfg(..)] рдЬреИрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ - рдпрд╛ рддреЛ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдпрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ? рдФрд░ рдХреНрдпрд╛ рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@nrc рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрди рдмрд╛рдзрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХреИрд╕рд╛ рд▓рдЧреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрд╛ рдирд╣реАрдВред

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд▓рдХреНрд╖рдг рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдПрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд▓рдХреНрд╖рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╣рд╛рдВ рдмрдирд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?

@nrc рдпрд╣ рдЬрд░реВрд░реА рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдбрд╛рдЗрд╡рд┐рдВрдЧ рдПрдХреНрд╕рдкреЗрдВрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ? рдЬреИрд╕реЗ #[proc_macro_derive(Serialize, uses_attrs(serde_foo, serde_bar))] рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ред

@ colin-kiegel рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡реНрдпреБрддреНрдкрдиреНрди рдЖрд╡реЗрджрди рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореИрдХреНрд░реЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд╣рд▓реЗ рд╕реАрдПрдлрдЬреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИред рдмрдирд╛рдо рдкрд╣рд▓реЗ)ред

@alexcrichton

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд▓рдХреНрд╖рдг рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдПрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд▓рдХреНрд╖рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╣рд╛рдВ рдмрдирд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?

рд╣рдореНрдо, рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдХреЗ рд▓рд┐рдП рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛

@ рд╣реЗрдбреНрдбреА рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХрд╛ рдореЗрд░рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдореИрдХреЗрдирд┐рдЬреНрдо рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ рд╣рдо рдЖрд╕рдкрд╛рд╕ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЕрдЯрдХрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред ред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдм рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдЯрдХрд╛ рд╣реБрдЖ рдПрдХ рдмреБрд░реА рдЪреАрдЬ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рд╢рд░реНрдд рд╣реЛ рд╕рдХрддреА рд╣реИред

рдкрдХрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдореИрдВ рджреЗрд╢ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдмреАрдорд╛рд░ рд╣реВрдВред рдореИрдВ https://github.com/rust-lang/rust/pull/37198 рдкрд░ рдлрд┐рд░ рд╕реЗ рдЖрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рднреА рдореИрдХреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдореИрдВ рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдБ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдЙрд╕ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ derive_Foo , рдпрд╛ рдЗрд╕реА рддрд░рд╣ рд╣реЛред рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рднреА рд╕рдорд╛рди рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ (рдЬреИрд╕реЗ #[cfg] рдФрд░ cfg! )

рдореБрдЭреЗ рд╕рд╛рдЭрд╛ рдирд╛рдорд╕реНрдерд╛рди рднреА рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдЕрдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдпрд╣ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдирд┐рдордп, рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдпрд╛ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЪрд▓ рд░рд╣рд╛ рд╣реЛ - рдЬреЛ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА 'рдпрд╛рджреГрдЪреНрдЫрд┐рдХ' рд╕реАрдорд╛рдПрдВ рднрд╛рд╖рд╛ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдереЛрдбрд╝реА рдХрдард┐рди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЕрднреА рднреА рдмрд┐рдирд╛ рддреЛрдбрд╝-рдлреЛрдбрд╝ рдХреЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@sgrif @ colin-kiegel рдореИрдВрдиреЗ https://github.com/rust-lang/rust/issues/35900#issuecomment -256247659 рдореЗрдВ рдПрдХрд▓ рдореИрдХреНрд░реЛ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдФрдЪрд┐рддреНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдмреИрдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдПрдЯреНрд░реАрдмреНрдпреВрдЯ рдореИрдХреНрд░реЛрдЬрд╝ рдиреЗ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдирд╛рдорд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ; # 37198 рд╕рд┐рд░реНрдл рдЗрд╕ рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЪрд▓реЗ рдЧрдПред

рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рднреА рдПрдХ рд╣реА рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ (рдЬреИрд╕реЗ #[cfg] рдФрд░ cfg! )

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, cfg рдХреЛ рдПрдХ рдПрдХрд▓ рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдзрдорд╛рдХреЗ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрд╣реНрд╡рд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрдмрдХрд┐ рдЖрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдореИрдХреНрд░реЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдзрдорд╛рдХреЗ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдордВрдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ,) рд╣рдо рдЗрд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЕрдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдирд┐рдордпрд╢реАрд▓рддрд╛ рдерд╛

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рджреЛ рдореИрдХреНрд░реЛрдЬрд╝ рд╕рдВрдШрд░реНрд╖ (рдореИрдВ рдЖрдЬ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░реВрдБрдЧрд╛) рдХреЛ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЕрднреА рднреА рдмрд┐рдирд╛ рддреЛрдбрд╝-рдлреЛрдбрд╝ рдХреЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдХреНрд░реЛ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ (рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЛ)ред рдпрд╣ рдЖрдЬ рдПрдХ рдПрдХрд▓ рдореИрдХреНрд░реЛ рдирд╛рдо рд╕реНрдерд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдореБрдЦреНрдп рдкреНрд░реЗрд░рдгрд╛ рд╣реИ - рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рд╕рдВрдЧрдд рд╣реЛред

рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдзрдорд╛рдХреЗ / рд╡рд┐рд╢реЗрд╖рддрд╛ рдореИрдХреНрд░реЛ рдмрдирд╛рдо рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рд╕рдВрдШрд░реНрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рджреБрд░реНрд▓рдн рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдмреИрдВрдЧ / рд╡рд┐рд╢реЗрд╖рддрд╛ рдореИрдХреНрд░реЛрдЬрд╝ рдЖрдорддреМрд░ рдкрд░ рдХрдо рдорд╛рдорд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЖрдорддреМрд░ рдкрд░ рдКрдкрд░реА рдорд╛рдорд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдирд╛рдо рд╕реНрдерд╛рди рд╣реИрдВ рдЬрдм рдЙрди рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреВрдЯрдирд╛ (https://github.com/diesel-rs/diesel/issues/485) рд╕рдорд░реНрдерди рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ Queryable! { struct S; } рдФрд░ рд╕рд╛рде рд╣реА #[derive(Queryable)] struct S; ред рдПрдХ рдмрд╛рд░ рдЬрдм рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ Queryable! { struct S; } рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдм рдПрдХ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣реИ рдирд╛?

рдЗрд╕ рдмреАрдЪ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдо diesel рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐

  • Queryable! рдЕрднреА рднреА #[macro_use] extern crate diesel_codegen; рдмрд┐рдирд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдФрд░
  • #[derive(Queryable)] , рд▓реЗрдХрд┐рди Queryable! , #[macro_use] extern crate diesel_codegen; рд╕рд╛рде рд╕рдорд░реНрдерд┐рдд рд╣реИред

рдмреЗрдЭрд┐рдЭрдХ рдореБрдЭреЗ рдЖрдИрдЖрд░рд╕реА рдкрд░ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ - рдореБрдЭреЗ рдПрдХ рдкреАрдЖрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

@nrc @alexcrichton

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд▓рдХреНрд╖рдг рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдПрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд▓рдХреНрд╖рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╣рд╛рдВ рдмрдирд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?

рдореИрдВ @eddyb рд╕реЗ рд╕рд╣рдордд рд╢реАрдШреНрд░рддрд╛ рдХреЗ рд╣рд┐рдд рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо _did_ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВрдиреЗ рдХрд▓реНрдкрдирд╛ рдХреА рдереА рдХрд┐ рд╣рдо рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЙрди рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ Self рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ:

trait CustomDerive {
     fn foo(); // note: no self
     fn bar(); // again, no self
}

рддрдм рдЖрдк рдЗрд╕реЗ struct my_annotation_type; рдЬреИрд╕реЗ рдПрдХ рдбрдореА рдкреНрд░рдХрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ (рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?), рдФрд░ рд╣рдо <my_annotation as CustomDerive>::foo (рд╢рд╛рдпрдж рдЬреИрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ) рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред рдмрд┐рдВрджреБ рд╣реИ, рд╣рдо my_annotation рдХрд╛ рдЙрджрд╛рд╣рд░рдг (рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛) рдХрднреА рдирд╣реАрдВ рдмрдирд╛рдпреЗрдВрдЧреЗ, рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╕рдореВрд╣рди рддрдВрддреНрд░ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдЪреАрдЬ рдХрднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╢реБрднрддрд╛ рдареАрдХ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпреЛрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред =)

рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, @sgrif #[cfg] рдФрд░ cfg! рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ #[derive(SomeTrait)] рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдореИрдХреНрд░реЛ рднреА рд╣реИрдВ рдЬреИрд╕реЗ SomeTrait! { ... } ... рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред =) рд▓реЗрдХрд┐рди @jseyfried рднреА рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИ - рдЬрдм рддрдХ рд╣рдо рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдорд╛рд░ рд░рд╣реЗ рд╣реИрдВ _ рдкрд╣рд▓реЗ рд╕реЗ рд╣реАред

рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдо рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрд╕ рджрд░реНрдж рдХреЗ рдХрд╛рд░рдг рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рди / рдкреНрд░рдХрд╛рд░ рдирд╛рдо рд╕реНрдерд╛рди рд╡рд┐рднрд╛рдЬрди рд╣рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬреНрдЮрд╛рдд рджрд░реНрдж рдмрд┐рдВрджреБ рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ:

  • рдкреНрд░рдХрд╛рд░ / рдореВрд▓реНрдп рд╡рд┐рднрд╛рдЬрди рдирд╛рдо рд╕рдВрдХрд▓реНрдк рдореЗрдВ рдПрдХ рджрд░реНрдж рд╡рдЬрд╣ рд╕реЗ рд╣реИ use foo::bar рдПрдХ рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдирд╛рдорд┐рдд bar , рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХреА рддрд░рд╣ рдПрдХ рдирд╛рдо рд╕рдВрдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ bar::baz ;
  • рдкреНрд░рдХрд╛рд░ / рдореВрд▓реНрдп рд╡рд┐рднрд╛рдЬрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд░реНрдж рдХреА рддрд░рд╣ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рджрд░реНрдж рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рдХрд╛рд░рдг рднреА рд╣реИред

рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд╣рдж рддрдХ, рдЬрдм рд╕реЗ рд╣рдордиреЗ рдкреБрд▓ рдкрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди" рдЕрдкрдиреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд░рд╣рддреЗ рд╣реБрдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЪреБрдиреМрддреА рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛?

рд╣рдо рдЙрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рдореЗрдВ derive_ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЫрджреНрдо рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдЧрд░ рд╣рдо рдЙрд╕ рдмрджрд▓рд╛рд╡ рдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдЕрдм рд╕рдордп рд╣реЛрдЧрд╛ред

@keeperofdakeys рдХреНрдпрд╛ рдпрд╣ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬреЛ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдирд╛рдо derive_* ? рднрд▓реЗ рд╣реА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ derive_* рдирд╛рдо рдЕрдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИрдВред

@nikomatsakis

рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд╣рдж рддрдХ, рдЬрдм рд╕реЗ рд╣рдордиреЗ рдкреБрд▓ рдкрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди" рдЕрдкрдиреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд░рд╣рддреЗ рд╣реБрдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЪреБрдиреМрддреА рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛?

рдЖрдпрд╛рдд рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХрдИ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкреНрд░рдорд╛рдгрд┐рдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрд╛рдд I рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдирд╛рдорд╕реНрдерд╛рди S , рдпрд╣ рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди I S (cf https: //ithub) рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред com / рдЬрдВрдЧ-рд▓реИрдВрдЧ / RFCs / рдкреБрд▓ / 1560 # issuecomment-209,119,266)ред рдЗрд╕ рдкреНрд░рдорд╛рдг рдХреЛ рдЕрдХреНрд╕рд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдЖрдпрд╛рдд рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЧреНрд▓реЛрдм рдЖрдпрд╛рдд рдЧреНрд░рд╛рдл (рдЬрд┐рд╕рдореЗрдВ рдХреЛрдиреЗ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдХрд┐рдирд╛рд░реЗ рдЧреНрд▓реЛрдм рдЖрдпрд╛рдд рд╣реЛрддреЗ рд╣реИрдВ) рдХреЗ рдбреАрдПрдлрдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐-рдирд╛рдорд╕реНрдерд╛рди рдХрд╛рд░реНрдп рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд╝рд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (cf https://github.com/rust-lang/rfcs/pull/1560#issuecomment-209119696) рдорд╛рдореВрд▓реА рдкреНрд░рддрд┐рдмрдВрдз рдЬреЛ рдХреЗрд╡рд▓ рдореИрдХреНрд░реЛ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреЗред

рдореИрдВрдиреЗ # 37198 рдореЗрдВ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рдЦреБрд▓реЗ рд░рд╣реЗрдВ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕реАрдорд┐рдд рд╣реЛрдЧрд╛ред рдЕрдЧрд░ рд▓реЛрдЧ рдЖрдЬ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ @ рдЬрдВрдЧ-рд▓рдВрдЧ / рд▓рдВрдЧрдбрд╝рд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдореИрдХреНрд░реЛ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИ, рддреЛ рдореБрдЭреЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред

@nikomatsakis

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рдБ рдЖрдкрдХреА рд░рдгрдиреАрддрд┐ рдХрд╛рдо рдХрд░реЗрдЧреА, рднрд▓реЗ рд╣реА рд╡рд╣ рд╡рд┐рдЬрдпреА рд╣реЛред рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╖рдорддрд╛ рдЙрд╕рдХреЗ рд╡рдЬрди рдХреЛ рдирд╣реАрдВ рдЦреАрдВрдЪрддреА рд╣реИ (рдЬреИрд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдЬ рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рд╣реИ), рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@alexcrichton рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдореБрдЭреЗ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЦреБрд╢реА рд╣реИ рдЬрдм рддрдХ рд╣рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ (рдпрджрд┐ рдХрднреА рднреА) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдФрд░ рдлрд┐рд░ рд╣рдо рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛ рд╢рд╛рдпрдж рдХреБрдЫ рдмреЗрд╣рддрд░ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрднреА рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ fn рд▓рд┐рдП рд▓рд╛рдЧреВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реЛ рдЧрдпрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ (proc_macro рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЗрдЯрдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП)ред

рдореИрдВрдиреЗ рд╕рд╛рдл рдХрд┐рдпрд╛ рд╣реИ FCP рдЯреИрдЧ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо _quite_ рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЕрднреА рддрдХ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдореИрдВ рдмрд╛рддрдЪреАрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдЕрднреА рднреА рджреГрдврд╝ рдирд┐рд░реНрдгрдп рдФрд░ / рдпрд╛ рдХреЛрдб рдпреЛрдЧрджрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдкреНрд░рд╢реНрди 1: рдХреНрдпрд╛ рдХрд╕реНрдЯрдо-рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛ рдХреЛ рдЙрд╕ рдЖрдЗрдЯрдо рдХреЛ рдореНрдпреВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡реЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ?

  • рдХрд┐рд╕реА рдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
  • рдпрд╣ рдПрдХ рдФрд░ рд╡рд┐рдзрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╢реБрд░реВ рдореЗрдВ YAGNI рдХреА рднрд╛рд╡рдирд╛ рд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
  • рдХреНрд╖реЗрддреНрд░ рдирд╛рдо рдЖрджрд┐ рдХреЗ рд╕реЗрдЯ рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд░рдЪрдирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрд╡реЗрджрди рдХрд╛ рдХреНрд░рдо рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ;
    рдЙрд╕ рдЦрддрд░реЗ рдХреЛ рджреЛ рдЪреАрдЬреЛрдВ рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  • рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рдХреЗрд╡рд▓ рдирдП рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

    • рдЕрд╡рдзрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдмреЗрд╣рддрд░ рд╣реИ

    • рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИрдВ

  • _But_ рдХрдИ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрдкрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЪреЗрддрд╛рд╡рдиреА / рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ

    • рд╡рд░реНрддрдорд╛рди рддрдХрдиреАрдХ рдЙрдиреНрд╣реЗрдВ рдПрдПрд╕рдЯреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИ

  • _Also: _ рд╣рдо ASAP рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓рдВрдмрд╛ рдкреНрд░рдпреЛрдЧ рдпрд╛ рдХрдареЛрд░ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдкреНрд░рд╕реНрддрд╛рд╡:

  • рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд░рдЦреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

    • рд╕рдореАрдЪреАрди, рдХреБрдЫ рд╣рдж рддрдХ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг

  • рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЗ рд╕рд╛рде #[proc_macro] рдмрдврд╝рд╛рдПрдВ, рдЙрдиреНрд╣реЗрдВ "рдЙрдкрдпреЛрдЧ" рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ рдЦрд╛рдПрдВ

    • рд╕рд░рд▓, рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ

    • рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ( рд╢рд╛рдпрдж @keeperofdakeys! )

рдкреНрд░рд╢реНрди 2: рдХреНрдпрд╛ рдХрд╕реНрдЯрдо рдХреЛ рдЕрдиреНрдп рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рдорд╛рди рдирд╛рдорд╕реНрдерд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЗрд╕рдХреЗ рд▓рд┐рдП рддрд░реНрдХ:

рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд╣рд╕:

рдкреНрд░рд╕реНрддрд╛рд╡:

  • "рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди" рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ
  • рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдП рд░рдЦреЗрдВ

рдЕрдиреНрдп рдмрд╛рддреЗрдВ?

рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рдЦреБрд▓рд╛ рд╕рд╡рд╛рд▓ рд╣реИ?

рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди:

рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдмрдЬрд╛рдп TokenStream -> TokenStream рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЙрдирдХреЗ рдкрд╛рд╕ рдЯрд╛рдЗрдк рд╣реЛрдЧрд╛
Item -> TokenStream , рдЬрд╣рд╛рдВ Item рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рд╕рд┐рд░реНрдл рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛:

  • item.tokens() , рдЬреЛ TokenStream рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдЬ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░
  • item.use_attrs(name) , рдЬреЛ рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓реМрдЯреЗ TokenStream рдХреЗрд╡рд▓ рд╡реНрдпреБрддреНрдкрдиреНрди impl s рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
рд╣рдо рдЕрдВрддрддрдГ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде Item API рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдЖрдЗрдЯрдо рдХреЗ рдлрд╝реАрд▓реНрдб / рд╡реЗрд░рд┐рдПрдВрдЯ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐) рдпрд╛ syntax_ext::deriving::generic рдореЗрдВ рдПрдХ рдХреА рддрд░рд╣ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡реНрдпреБрддреНрдкрдиреНрди APIред

рдореБрдЭреЗ #[proc_macro_derive] рдореЗрдВ рд╕рдлреЗрдж рд╕реВрдЪреАрдмрджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА (https://github.com/rust-lang/rust/issues/35900#issuecomment-258315395 рдкрд░ рдкреНрд░рд╢реНрди 1 рдХрд╛ рджреВрд╕рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡) рдореЗрд░рд╛ Item -> TokenStream рдкреНрд░рд╕реНрддрд╛рд╡ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд▓рддреА рд╣реЛрдЧреА рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЖрдЗрдЯрдо рдХреЛ рдореНрдпреВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореНрдпреВрдЯреЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рд╣рдо рдЬрд┐рд╕ рдЕрд╡рдзрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреЗ рд╣реИрдВ, рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣реА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ # 37563 рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ # 36218 рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреА рдЕрдкреАрд▓ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдХреЛрдИ рднреА рдПрдХ usecase рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ / рд╡рд╛рдВрдЫрд┐рдд рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:

#![feature(proc_macro)]

#[proc_macro_derive(Whatever)]
struct Foo {}

@eddyb рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреА рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрдкреАрд▓ рд╣реИ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд▓рд╛рдн
Item -> TokenStream рдпрд╣ рд╣реИ рдХрд┐ рдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ Item API рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╕реЛрдЪрдиреЗ рдкрд░, рдХрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП Item TokenStream , рдЗрд╕рд▓рд┐рдП TokenStream -> TokenStream рдПрдХ рдШреЛрд╖рдгрд╛рдкрддреНрд░ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЗ рд╕рд╛рде

рдХреНрдпрд╛ рдореИрдХреНрд░реЛрдВ 2.0 рдЗрд╕ рдПрдкреА рдХреЛ рд╕реБрдкрд░рд╕реЗрдб рдХрд░реЗрдЧрд╛? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИ, рдФрд░ Item -> TokenStream рдПрдкреАрдЖрдИ рдмрд╣реБрдд рд╕рдореНрдореЛрд╣рдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

Rk рдХреЗ рдЕрдиреБрд╕рд╛рд░

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрд╣ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ "рдореИрдХреНрд░реЛрдЬрд╝ 2.0" рдХреА рдУрд░ рдПрдХ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдХрджрдо рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рднрд╛рд╡рдирд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реЛрдирд╛ рд╣реИ, рдмрд╕ рд╡рд┐рд╢рд╛рд▓ рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдП рдмрд┐рдирд╛ред рдЙрд╕ рд▓рд┐рд╣рд╛рдЬ рд╕реЗ, рдпрд╣ рдПрдХ рдРрд╕рд╛ рдЗрд░рд╛рджрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдПрдХ рд╕реНрдерд┐рд░ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рджрд┐рдпрд╛ рд╣реИ, рд╣рдо рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЫреЗ рдХреА рдУрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдкрд░рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

https://github.com/rust-lang/rfcs/pull/1681#issuecomment -233449053 рдФрд░ https://github.com/rust-lang/rfcs/pull/1681#issuecomment -233708395 рдФрд░ https: // github com / rust-lang / rfcs / pull / 1681 # рдЬрд╛рд░реАрдХрд░рдг -239558657 рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ 2.0 рдЖрдиреЗ рдкрд░ рдХреЗрд╡рд▓ "рд╕реАрдорд┐рдд" deprecations рдХреА рдЙрдореНрдореАрдж рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ: "рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдЗрдлрд┐рдВрдЧ рдЯреЛрдХреЗрди рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдкреИрдЯрд░реНрди рдЧреИрд░-рдкрд╕рдВрджреАрджрд╛ рдмрди рдЬрд╛рдПрдЧрд╛, рдЕрдЧрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛"ред

@eddyb

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреА рдЕрдкреАрд▓ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдХреЛрдИ рднреА рдПрдХ usecase рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реИ?

рдареАрдХ рд╣реИ, рдореИрдВ рдПрдХ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдо рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ (рдкреНрд░рдХрд╛рд░ рдпрд╛ рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╢рд╛рдпрдж?) - рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЙрдиреНрд╣реЗрдВ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреГрддреНрд░рд┐рдо рдХреА рддрд░рд╣ рд╣реИ, рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @jseyfried рдХреА рд╡реИрдХрд▓реНрдкрд┐рдХ рдЕрдкреАрд▓ - рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рдХрд┐ Item API рд╕рдордп рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рдореГрджреНрдз рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрд░реНрдерд╛рдд, рд╣рдо рдмрд╣реБрдд рд╣реА рд╕рдВрд░рдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЦреЗрддреЛрдВ рдХреЗ рд╕реЗрдЯ рдкрд░ рдЪрд▓рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ (рдЬреИрд╕реЗ рдирд╛рдо рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ) рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред

рдмреЗрд╢рдХ, рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ (_eventually_) рдорд╛рдирдХ рдПрдПрд╕рдЯреА рдПрдкреАрдЖрдИ рдХреЗ рдХреБрдЫ рд░реВрдк рд╕реЗ рднреА рдЖрдПрдВрдЧреЗред

рд╕рдордп рдкрд░ рдПрдХ рдиреЛрдЯ: рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЛ рдЕрдЧрд▓реЗ рдЪрдХреНрд░ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛрддреЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рдо рдЬрд┐рд╕ рдЪреАрдЬ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рд╡рд╣ рдЕрдВрддрдд: рдХрд╛рдлреА рдорд╛рдореВрд▓реА рд╣реЛрддреА рд╣реИред

рдЙрд╕ рднрд╛рд╡рдирд╛ рдореЗрдВ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдореБрджреНрджреЛрдВ рдкрд░ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдЬрд╛рддрд╛ рд╣реИ:

  1. рдореИрдВ рдпрд╛ рддреЛ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ #[proc_macro] рдПрдХреНрд╕рдЯреЗрдВрд╢рди _or_ рдХреЗ рд╕рд╛рде Item рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдВред рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рднреА рд╣рдо рдЪреБрдирддреЗ рд╣реИрдВ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрднрд╡рддрдГ рдЕрдкрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╣рд▓реЗ рдЬреЛ рднреА рд▓рд╛рдЧреВ рд╣реЛ, рдЙрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред =)
  2. рдХрдИ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рд▓рд┐рдП, рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХрд╛ рд╕рдВрдпреЛрдЬрди (рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рдЦреБрд▓реЗ рд░рдЦрддреЗ рд╣реИрдВ) рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐ рдкреВрдВрдЬреАрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рд╕реЗ "рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди" рдореИрдХреНрд░реЛ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред #[cfg] cfg! рдХреБрдЫ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рд╣рдо рдЪрд╛рд╣реЗрдВ, рддреЛ рд╣рдо рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╛рдорд╕реНрдерд╛рди _then_ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдПрдХреАрдХреГрдд рдирд╛рдорд╕реНрдерд╛рди рд╣реЛрдиреЗ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рд╣реИ рдЬреЛ рд╣рдо рд╡реИрд╕реЗ рднреА рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд╣реА?

@nikomatsakis рдЖрдкрдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рд╕рдЯреАрдХ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рджреБрдГрдЦ рд╣реИ рдХрд┐ рд╣рдореЗрдВ 1.14 рд░рд╕реНрдЯ 1.14 рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ рдХрд┐ рдпреЗ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдореБрджреНрджреЗ рд╣реИрдВред

рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рднрд╛рд╡рдирд╛ рд╕рдм рдХреБрдЫ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ-рдЬрд╣рд╛рдВ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреАрдирдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рд╣реИред

рдореИрдВ Item -> TokenStream API рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рд▓реМрдЯрд╛ рд╣реБрдЖ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рдЕрднреА рднреА рдореВрд▓ рдЖрдЗрдЯрдо рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╕рд┐рд░реНрдл рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ &mut Item рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

@ est31 рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ @nikomatsakis рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорд╣рддреНрд╡ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рд╡реЗ рдЬреБрдбрд╝реА рд╣реИрдВ, рдЙрд╕реЗ рдореНрдпреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╢рд╛рд╕рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рднреА рдореБрдЭреЗ рдареАрдХ рд▓рдЧрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдПрдХреАрдХреГрдд рдирд╛рдорд╕реНрдерд╛рди рд╣реЛрдиреЗ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рд╣реИ рдЬреЛ рд╣рдо рд╡реИрд╕реЗ рднреА рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд╣реА?

рдпрд╣ рдореБрджреНрджрд╛ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдбреАрдЬрд▓ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдХреНрд░реЛ рд╣реИ, рдЬреИрд╕реЗ Queryable! рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП Queryable рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдИ рд╣реИ рдЬреЛ рди рддреЛ рдЕрднреА рдбреАрдЬрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рди рд╣реА рд░рдЦрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдИ рдРрд╕рд╛ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ: рд╕реНрд╡реЗрдЯ_рд╕реНрдорд╛рдЗрд▓ :), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрднреА рдФрд░ рдбреАрдЬрд▓ рдХреЗ рд▓рд┐рдП 1 рдирд╛рдо рд╕реНрдерд╛рди рд░рдЦрдирд╛ рд╣реИред рдЙрди рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ derive_Queryable! рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫред рдЬрдм рд╡реЗ рд╡реИрд╕реЗ рднреА рд╕реНрдерд┐рд░ рд╣реЛрдВрдЧреЗ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдореИрдВрдиреЗ рд╕реБрдЭрд╛рдП рдЧрдП рдлреАрдЪрд░ рдХреЗ рд▓рд┐рдП PR https://github.com/rust-lang/rust/pull/37614 рдмрдирд╛рдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ #[proc_macro_attributes(..)] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдм рдЖрдкрдХреЛ рджрд┐рдП рдЧрдП TokenStream рдореЗрдВ рдЖрдЗрдЯрдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ # 37637 рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╛рдпрд░ рдХрд┐рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдХреНрд░реЛ рдХреЛ $crate рдЗрд▓рд╛рдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмрд╕ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдпрд╣ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдареАрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рд╣реИ:

рдореИрдВ рдпрд╣рд╛рдВ рдореМрдЬреВрджрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдИ рд╕рдВрд░рдЪрдирд╛рдПрдВ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдореЗрдХрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрдЧрд░ рдмрд╛рдж рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрднреА рд░реЛрдХ рд╕рдХрддрд╛ рд╣реВрдВ (рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд┐рд░реНрдл рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рдкреНрд░рдорд╛рдг рд╣реИ)ред

@TheNeikos

рдореБрдЦреНрдп рдкрд╢реНрдЪрдЧрд╛рдореА рдЕрд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдм рдЖрдк рдЖрдЗрдЯрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдк рдЗрд╕реЗ рдЯреЛрдХрдирд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╡рд╛рдкрд╕ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдирд╛рдо рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдиреНрдп рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЖрдЗрдЯрдо рдкрд░ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреБрди: рдбреАрдЬрд▓ рдореЗрдВ рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рдВрдШрд░реНрд╖ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЙрди рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдирд╣реАрдВ рдПрдХ рдмрд╛рд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕реНрдерд┐рд░ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлреНрд░реА рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХреБрдЫ рд╕реЗ рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рд╕рдВрджрд┐рдЧреНрдз рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛрдирд╛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрдиреЛрдЯреЗрдЯ рд╣рдореЗрдВ рдЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдзрдорд╛рдХреЗрджрд╛рд░ рдореИрдХреНрд░реЛ рднреА рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЙрди рдкрд░ рдЙрд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рдЦреЛрдирд╛ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИред

@ TheNeikos @sgrif рдореЗрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдЬреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╡реНрдпреБрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣рд╛рдБ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдЦрддрд░рдирд╛рдХ (рд╕реНрд╡рдЪреНрдЫрддрд╛ рдХреА рдХрдореА) рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдирд╣реАрдВ рд╣реВрдВред

рдЖрдЗрдЯрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдЗрдЯрдо рдХреА рдЕрд╡рдзрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд░рдЦреА рдЧрдИ рд╣реИ, рдЬреЛ рдЖрдЗрдЯрдо рдкрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдХрд░рддреА рд╣реИ (рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЕрдм рдЖрдЗрдЯрдо рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЕрд╡рдзрд┐)ред рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдЕрдЧрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдЪрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@ Theeikikos рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирдИ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рддрдХ рдЖрдк рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЬреЛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реИ; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдП рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ рдпрджрд┐ рд╡реЗ рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд▓рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдмрджреНрдз рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо IntoIterator рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ - рдЬрд┐рд╕рдореЗрдВ Iterator рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ "рдПрдХ рдирд┐рд╣рд┐рддрд╛рд░реНрде" рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@sgrif

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛрдирд╛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрдиреЛрдЯреЗрдЯ рд╣рдореЗрдВ рдЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдзрдорд╛рдХреЗрджрд╛рд░ рдореИрдХреНрд░реЛ рднреА рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЙрди рдкрд░ рдЙрд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рдЦреЛрдирд╛ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИред

рд╣рдореНрдо, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдиреБрднреВрддрд┐рдкреВрд░реНрдг рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (рдЬреИрд╕рд╛ рдХрд┐ @nrc рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ) рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЦреБрд░рджреБрд░реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рддреБрд░рдВрдд "рдмреИрдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ 1.1" рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдкреАрдЖрд░ рдХреЛ рдорд░реНрдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ рд░рд╛рдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Proc_macro_derive рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрдЗрдЯрдо рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рджреЛ рдмрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рдЬрд╛рдПрдЧреА, рдФрд░ рдЕрдм рдЖрдк рдЗрд╕ #[proc_macro_derive(Derive, attributes(Foo, Bar)] рдЬреИрд╕реЗ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

cc @dtolnay , @sgrif ^

рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЬрд▓реНрдж рд╣реА рдЯреВрдЯрдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛

рд╣рд╛рдВ, рдореИрдВрдиреЗ рд╣рдорд╛рд░реЗ рдЕрдВрдд рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/serde-rs/serde/issues/614 рджрд╛рдпрд░ рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ https://github.com/diesel-rs/diesel/pull/493 рдореЗрдВ рдбреАрдЬрд╝рд▓ рдореЗрдВ рдЯреВрдЯ-рдлреВрдЯ рдХреЛ рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд░рд╛рдд рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЦрд░реАрдж рдореИрдХреНрд░реЛ рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рдВрд▓рдЧреНрди рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдЗрдЯрдо рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдЗрдЯрдо рдореЗрдВ рдЕрдзрд┐рдХ рдПрдиреЛрдЯреЗрд╢рди рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ? (рдореБрдЭреЗ "рд╕рд┐рдмрд▓рд┐рдВрдЧ рдПрдиреЛрдЯреЗрд╢рди" рдХреА рдЕрдиреБрдорддрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдХреБрдЫ рдирд╣реАрдВред)

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ #[derive(newtype)] proc рдореИрдХреНрд░реЛ (рдЫреЛрдЯреЗ, рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд) рдЯреЛрдХрд░рд╛ рд╣реИ рдЬреЛ рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреНрдп #[derive()] s рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдореЗрдВ рдлреИрд▓рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП #[derive(newtype)] struct Foo(u64) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреИрд▓рддрд╛ рд╣реИ #[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] struct Foo(u64); рдЬрдмрдХрд┐ #[derive(newtype)] struct Foo(::semver::VersionReq) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреИрд▓рддрд╛ рд╣реИ #[derive(Clone, Debug, PartialEq)] struct Foo(::semver::VersionReq); ред рдЗрд╕рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЗрд╕ рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд╡реНрдпреБрддреНрдкрдиреНрди рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ (рдпреЗ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдпрд╛ рддреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред

рдХреБрдЫ рджрд░реНрдЬрди рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд╛рдж рджрд╕ рдпрд╛ рддреЛ рдирдП рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА u64 newtypes рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдмрд╕ newtype рдореИрдХреНрд░реЛ рдХреЛрдб рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдкрд░ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдХреЗ рд╕реЗрдЯ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП macro_rules newtype! рдореИрдХреНрд░реЛ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЦрд░реАрдж рдореИрдХреНрд░реЛ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐:

  • рдбреЙрдХреНрд╕ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐, pub рдЙрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐, рдЖрджрд┐ рдореИрдХреНрд░реЛ рдорд┐рд▓рд╛рди рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕рдВрдпреЛрдЬрди рд╕рдВрдЦреНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдореБрдлреНрдд рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░рд┐рдпрд▓ рдореИрдХреНрд░реЛ рдорд╛рдЪрд┐рд╕ рд▓рд┐рдЦреА, рддреЛ рдПрдХ рдРрд╕рд╛ рдСрд░реНрдбрд░ рдвреВрдВрдврд╛ рдЬрд╣рд╛рдВ рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддреЗред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдирд╣реАрдВ, рдЖрдк рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреИрд╕рд╛ рдЖрдк рдХрд░ рд░рд╣реЗ рдереЗред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ "рд╢реБрджреНрдз" рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХреНрд░рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рд░рд╕реНрдЯ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдмрд╣реБ рдереНрд░реЗрдбреЗрдб рд╕рдВрдХрд▓рди?

@ est31 рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реИ рддреЛ рд╣рдореЗрдВ IPC рдЕрд▓рдЧрд╛рд╡ рдХреА рдЪреАрдЬрд╝ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ рдЪрд╛рд░реЛрдВ рдУрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред

рдореИрдВ рд╣рд╛рд▓ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж рд▓рдЧрд╛рддрд╛рд░ рдбреАрдЬрд▓ рдореЗрдВ рдПрдХ ICE рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

ред

@sgrif рдЬреЛ # 37788 рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ # 37793 рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЪрд▓реЛ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд▓ рдХреА рд░рд╛рдд рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ ...)ред

@ est31 рдЗрд╕ рдШрдВрдЯреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд╛рдд рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред

https://github.com/rust-lang/rust/issues/37839 рдПрдХ рдХрд╛рд░реНрдпрдХрд╛рд░реА рдЯреЛрдХрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рд╕реНрд╡рдпрдВ рдПрдХ proc_macro рдЯреЛрдХрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред AFAICT рдХреЛрдИ рднреА рдкрд░реАрдХреНрд╖рдг рдЗрд╕рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдпрд╛ рддреЛ рдХреЗрд╡рд▓ рдЦрд░реАрджреЗ рдЧрдП рдореИрдХреНрд░реЛ рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдПрдХ рдореИрдХреНрд░реЛ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдПрдХ рдмрд┐рди рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рдореИрдХреНрд░реЛ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЕрдм рдареАрдХ рд╣реЛ рдЧрдпрд╛!

@ рдЕрд░рдирд╡рд┐рдпрди # 37839 рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ рдЧрдпрд╛ рдореБрджреНрджрд╛ рдирд┐рдпрдорд┐рдд рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди --target 37 --target рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ

@rfcbot fcp рдорд░реНрдЬ

рдЕрдм рдЬрдм рдХрд┐ рд╢реНрд╡реЗрддрд╕реВрдЪреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд╛рдЧреВ рд╣реЛ рдЧрдИ рд╣реИ , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП! рд╕рд░реНрдб, рдбреАрдЬрд╝рд▓ рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ - рдЕрдм рдЖрдкрдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╣реИ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╝рд╛рдЗрди рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред =)

cc @sgrif @erickt

рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп @nikomatsakis рдиреЗ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреА рд╕рдореАрдХреНрд╖рд╛ рдмрд╛рдХреА рдЯреИрдЧ рдЯреАрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рд╣реИ:

  • [x] @alexcrichton
  • [x] @ рдиреНрдпреВрдЯрди
  • [x] @brson
  • [x] @ рд╣реЗрдбреНрдбреА
  • [x] @ рдЬрдкрд╛рд░рд┐рдХ
  • [x] @michaelwoerister
  • [x] @ рдореБрдиреЛрдордХреЛрддреНрд╕рдХрд┐рд╕
  • [x] @nrc
  • [x] @pnkfelix
  • [x] @vadimcn
  • [x] @withoutboats
  • [x] @wycats

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВред

рдПрдХ рдмрд╛рд░ рдЬрдм рдпреЗ рд╕рдореАрдХреНрд╖рдХ рдЖрдо рд╕рд╣рдорддрд┐ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдкрд░ рдирд╣реАрдВ рдЙрдард╛рдП рдЧрдП рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдЙрдард╛рдПрдВ!

рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдореБрдЭреЗ рдХреНрдпрд╛ рдЯреИрдЧ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред

рдореИрдВ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдзрдорд╛рдХреЗрджрд╛рд░ рдореИрдХреНрд░реЛрдЬрд╝ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВред

@rfcbot рдиреЗ рд╕рдореАрдХреНрд╖рд╛ рдХреА

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрджрд┐ рдПрдХ рдЯреЛрдХрдирд╕реНрдЯреНрд░реАрдо рдПрдХ рдЦрд╛рд▓реА рд▓реЗрдХреНрд╕рдПрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛

рд╣рд╛рдВ, рдореИрдХреНрд░реЛ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рд▓рд┐рдЦрдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдкрдбрд╝рд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреА рд▓рд╛рдн рд╣реЛрдЧрд╛, рдпрджрд┐ рдХреЗрд╡рд▓ рдореИрдХреНрд░реЛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмреЗрд╣рддрд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реИред

Https://github.com/rust-lang/rust/pull/38140 рдкрд░, рд╣рдо рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рджрд┐рди рдирд┐рдЬреА рд╡реНрдпреБрддреНрдкрдиреНрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╣рдо рд╕рдВрднрд╡рддрдГ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╛рд░реЛрд╣ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╣ рдЕрдВрддрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╡рд┐рдХрд▓реНрдк рд╣реИред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рд╡рд┐рд▓рдп рдХреЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдпрд╛ рджреЛ рджрд┐рди рдХреЗ рд▓рд┐рдП рдореИрд░реАрдиреЗрдЯ рдХрд░рдиреЗ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

# 37480 рдмрдВрдж рд╣реИ, рдЬрд┐рд╕реЗ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлрд┐рдХреНрд╕реНрдб

@pnkfelix рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд▓реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк PTO рдкрд░ рд╣реИрдВ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЛрд░реНрдб рдкрд░ рд╣реИрдВред рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ!

: рдШрдВрдЯреА: рдпрд╣ рдЕрдм рдКрдкрд░ рдХреА рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ ред : рдШрдВрдЯреА:

psst @nikomatsakis , рдореИрдВ final-comment-period рд▓реЗрдмрд▓ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рдХреГрдкрдпрд╛ рдРрд╕рд╛ рдХрд░реЗрдВред

рдХреНрдпрд╛ рдЖрд╕рдиреНрди рд╕реНрдерд┐рд░реАрдХрд░рдг рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖ рдкрд░ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдореЗрдВ рд╢реЗрд╖ рдЬреНрдЮрд╛рдд рдХреАрдбрд╝реЗ рдкрд╣рд▓реЗ рддрдп рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ? рдпрд╛ рдХреНрдпрд╛ рд╡реЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИрдВ?

рдЕрднреА рджреЛ рд╣реИрдВ:

  • # 36935 рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рд╣рд▓ рдмрддрд╛рддреА рд╣реИред
  • # 36691 рдореБрдЭреЗ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рджрд┐рди mod foo; рдХрд┐рд╕реА рджрд┐рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдмрд┐рдирд╛ рдХреБрдЫ рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд┐рдП рдореБрдЭреЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрд░реЗ! рдпрд╣ рдПрдХ RFC 1636 рдкреНрд░рд▓реЗрдЦрди рдСрдбрд┐рдЯ рд╣реИред RFC 1636 рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рд▓реА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

RFC рдмрддрд╛рддрд╛ рд╣реИ:

рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдм рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  • рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдВ:

    • рдЬрдВрдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

    • рдж рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

    • рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдЬрдВрдЧ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • рджреЛрдиреЛрдВ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

    • рдЪреИрдВрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди

    • рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬрд╛рд░реА рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд╛ рд╕рд╛рд░рд╛рдВрд╢ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╢реАрд░реНрд╖ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдореЗрдВ 1.15 рд░рд┐рд▓реАрдЬ рддрдХ рдкреЗрдбрд╝ рдореЗрдВ рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

cc @ рдЬрдВрдЧ-рд▓рдВрдЧ / рдбреЙрдХреНрд╕

рдзрдиреНрдпрд╡рд╛рдж @withoutboats ! рдпрд╣ рдкрд╣рд▓рд╛ рдкреНрд░рдореБрдЦ рд╣реИ, рд╣рд╛рдБред рдЖрдЬ рд╕реБрдмрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рд╕реВрдЪреА рдореЗрдВ рдпрд╣ рдерд╛, рдФрд░ рд▓реЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛, рдЖрдкрдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд░рд╛ рджрд┐рдпрд╛ ЁЯШД

рдореЗрд░реА рдпрд╣ рдХрд▓реНрдкрдирд╛ рд╣рдореЗрд╢рд╛ рдереА рдХрд┐ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рдирд┐рд░реНрдгрдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред рдпрд╣реА рд╣реИ, @ рдЬрдВрдЧ-рд▓реИрдВрдЧ / рд▓реИрдВрдЧ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ "рдпрд╣ рд╕реНрдерд┐рд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди рдЧреЗрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рднреА рдкреНрд░рд▓реЗрдЦрди рдореМрдЬреВрдж рд╣реИ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЬрд╣рд╛рдВ рдЕрд╕реНрдерд┐рд░ рдХрд┐рддрд╛рдм рдореМрдЬреВрдж рд╣реИ , рдпрд╣ рд╡рд╣рд╛рдВ рд╕реЗ рдбреЙрдХреНрд╕ рдХреЛ рд╕реНрдерд┐рд░ рдбреЙрдХреНрд╕ рдореЗрдВ рдЦреАрдВрдЪ рд▓реЗрдЧрд╛; рд▓реЗрдХрд┐рди рддрдм рддрдХ, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЕрдЬреАрдм рд╣реИрдВред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╕ рдПрдХ рд░рд┐рд▓реАрдЬ рдереА, рдореЗрд░реА рдпреЛрдЬрдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдереА:

  1. рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ FCP
  2. рднреВрдорд┐ рдХреБрдЫ рдбреЙрдХреНрд╕ред (рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛)
  3. рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреАрдЖрд░ рдХрд░реЗрдВред

рд╕рдВрднрд╡рддрдГ рджреЛ рдФрд░ рддреАрди рдХрд╛ рд╕рдВрдпреЛрдЬрдиред

/ cc @ рдЬрдВрдЧ-рд▓рдВрдЧ / рдХреЛрд░, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдХреНрд░реЙрд╕-рдЯреАрдо рдореБрджреНрджрд╛ рд╣реИред

@steveklabnik рдЬреЛ рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЬрдм рднреА рдФрд░ рд╕рд╛рде рд╣реА (

рдЬрд▓реНрджреА рд╕реЗ рдЗрдирдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо 1.15 рдмреАрдЯрд╛ рд╢рд╛рдЦрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмреИрдХрдкреЛрд░реНрдЯ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХреЗрдВ!

рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╣рд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВ рддреЛ рдпрд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЗрд╕реЗ рдЬреНрдЮрд╛рдд рдмрдЧ рдХреЗ рддрд╣рдд рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ: рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ ICE https://github.com/rust-lang/ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ

https://github.com/rust-lang/rust/pull/38737 рдореИрдХреНрд░реЛрдЬрд╝ рдкреНрд░рдХрд╛рд░ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ ICE: heart:ред рдЗрд╕ backported рдмреАрдЯрд╛ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛? Rationale: рдпрд╣ рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдкреНрд░рдореБрдЦ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ, 1.13 рдореЗрдВ рдЬрд╛рд░реА рдХреА рдЧрдИ рдФрд░ 1.15 рдореЗрдВ рдЬрд╛рд░реА рдПрдХ рд╕рдВрдХрд▓рдХ рдХреЛ рдХреНрд░реИрд╢ рдХрд░рддреА рд╣реИ рдЬрдм рдЖрдк рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ proc_macro рдЯреЛрдХрд░рд╛ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд # 38749 рдмрдирд╛рдпрд╛ред

рдореИрдВрдиреЗ рдХрдИ рдмрд╛рд░ рдкрдврд╝рд╛ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ 1.1 рдХреЛ 1.15 рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рджреЛ рд╕рдкреНрддрд╛рд╣ рдкрд╣рд▓реЗ 1.15.0-рдмреАрдЯрд╛.1 рдХреЛ рднреЗрдЬ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХрдо рд╕реЗ рдХрдо extern crate proc_macro; рдЕрднреА рднреА рдлрд╝реАрдЪрд░-рдЧреЗрдЯреЗрдб рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рд░рд╛рдд рдореЗрдВ рднреА 4ek85beb 2016 -12-28ред рдХреНрдпрд╛ рд╕реНрдерд┐рд░реАрдХрд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ?

@SimonSapin рд╣рд╛рдБ, рдпрд╣ рдпреЛрдЬрдирд╛ рдереА, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!

рдпрд╣ рдЕрднреА рднреА рдпреЛрдЬрдирд╛ рд╣реИ: рдкреА

рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ #[derive(Foo)] #[foo_def = "definition.json"] struct MyStruct; рд▓рд┐рдЦрддрд╛ рд╣реИ рддреЛ рдореИрдХреНрд░реЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ "рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ definition.json рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

рдпрд╣ рдЙрдк-рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИред

рдЖрдк Span -> FileMap -> рдлрд╝рд╛рдЗрд▓ рдирд╛рдо -> рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдм рдЧрд╛рдпрдм рд╣реИ proc_macro рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИред

рдЖрдкрдХреЛ definition.json рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рднреА рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрджрд┐ рдпрд╣ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛ рдЬрд╛рдП рддреЛ рдмрд┐рд▓реНрдб рдЧрдВрджрд╛ рд╣реЛред

рдореИрдХреНрд░реЛ рдордВрдЧрд▓рд╛рдЪрд░рдг рд╡рд╛рд▓реЗ рдЯреЛрдХрд░реЗ рдХреЗ Cargo.toml рдпреБрдХреНрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд░реАрдж рдореИрдХреНрд░реЛ env::var("CARGO_MANIFEST_DIR") рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ foo_def рдЙрд╕ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред Https://github.com/dtolnay/syn/issues/70#issuecomment -268895281 рджреЗрдЦреЗрдВред

@tomaka рдХрд┐ FileMap рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓, рдЬреИрд╕реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдпрд╣ рдХреИрд╕реЗ рд╣реИ include_str! рдореИрдХреНрд░реЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрднрд╡рддрдГ foo_def рдЙрд╕реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Cargo.toml рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдбрд╛рд▓рдирд╛ рдмрд╣реБрдд рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИред

FileMap рдХреЛ рдореНрдпреВрдЯ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреИрд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИ! рдореИрдХреНрд░реЛ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ Item ред рдпрд╣ рдЙрд╕ рдордж рд╕реЗ рдПрдХ рдЕрд╡рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдХреЛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП Item рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рд╣реИрдХ рдЖрдИрдПрдордУ рд╣реЛрдЧрд╛ред

рдЖрдк Span -> FileMap -> рдлрд╝рд╛рдЗрд▓ рдирд╛рдо -> рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпреЗ API (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ FileMap ) рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрде рдкрд░ рд╣реИрдВ?

рд╡реЗ рд╣реЛрдирд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдХрд┐рд╕реА рднреА internals рдХреЛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо Span (рдЬреИрд╕реЗ рд▓рд╛рдЗрди, рдХреЙрд▓рдо, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рд╡рд╛рд▓реЗ API рдХреЛ рд╕реНрдерд┐рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рд┐рд░реНрдл рдПрдХ рдЯреЛрдХрд░реЗ рдореЗрдВ рдорд┐рд▓реАред рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?

`` error: Cannot use #! [рдлреАрдЪрд░ (proc_macro)] and #! [рдлреАрдЪрд░ (custom_attribute)] рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ!
`` ``

@alexreg рдпрджрд┐ рдЖрдк #[derive] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдм рд╕реНрдерд┐рд░ рд╣реИред рдЖрдкрдХреЛ #![feature(proc_macro)] рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@alexreg
proc_macro_derive s (macros 1.1) рдЕрдм рд╕реНрдерд┐рд░ рд╣реИрдВ - рдЖрдк рдХреЗрд╡рд▓ #![feature(proc_macro)] рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

#[proc_macro_attribute] рд╣рд╛рд▓ рд╣реА рдореЗрдВ #![feature(proc_macro)] рдлрд╝реАрдЪрд░ рдЧреЗрдЯ рдХреЗ рдкреАрдЫреЗ рдЙрддрд░рд╛; рдпреЗ #![feature(custom_attribute)] рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рднреВрдорд┐ (https://github.com/rust-lang/rfcs/pull/1755) рдкрд░ #![feature(custom_attribute)] рдХреА рдирд┐рдХрд╛рд╕реА рдХреА рдЬрд╛рдПрдЧреАред

@jseyfried рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдХреЛ proc_macro рдкрд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдВрдж рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВред рдпрд╣ рд╕рдордЭ рдЖрддрд╛ рд╣реИред

@abonander рд╣рд╛рдБ, #![feature(proc_macro)] рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдм # 38356 рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдореБрдЭреЗ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ # 38842 рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордпред рдХреНрдпрд╛ рдЖрдк рдПрдХ PR рд╕рдмрдорд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

GuillaumeGomez picture GuillaumeGomez  ┬╖  300рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

withoutboats picture withoutboats  ┬╖  308рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

withoutboats picture withoutboats  ┬╖  213рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Centril picture Centril  ┬╖  382рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nikomatsakis picture nikomatsakis  ┬╖  412рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ