рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджрд╛-рд▓рдВрдЧ / rfcs # 1681ред
cc @alexcrichton
рд▓рд┐рдЯрдорд╕ рдкрд░реАрдХреНрд╖рдг:
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
proc_macro
proc-macro
#[proc_macro_derive(Foo)]
рд╡рд┐рд╢реЗрд╖рддрд╛proc-macro
рдХреНрд░реЗрдЯреНрд╕ -L
рдФрд░ #[macro_use]
рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПproc-macro = true
рдЬреНрдЮрд╛рдд рдХреАрдбрд╝реЗ:
mod foo
рдЕрд╕рдлрд▓ рдХреЗ рд╕рд╛рде рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо - # 36691proc_macro
- # 38749 рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ[x] - рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдЬреАрд╡рди рдХреЛ рдХрдард┐рди рдмрдирд╛рддреА рд╣реИрдВ - https://github.com/rust-lang/rust/issues/35900#issuecomment -245978831
[x] - рдПрдХ rustc_macro
рдЯреЛрдХрд░рд╛ рдмрдирд╛рдПрдБ
librustc_macro
рд▓рд┐рдВрдХ libsyntax
ред librustc_macro
librustc_driver
рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВrustc_macro
рдЯреИрдЧ рдХрд░реЗрдВредrustc_macro
#![crate_type = "rlib"]
, рдПрдХ dylib рдХрд╛ рдЙрддреНрдкрд╛рджрди рди рдХрд░реЗрдВредrustc_macro
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ libsyntax
s ' TokenStream
рдЖрдВрддрд░рд┐рдХrustc_macro
TokenStream
рд▓рдВрдЧ рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗредrustc_macro_derive
рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВfoo(bar)
рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ, рдХреЛрдИ рдЕрдиреНрдп рддрд░реНрдХ / рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВTokenStream
рд▓рдВрдЧ рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВrustc_macro_derive
рдХреЗ рд╕рд╛рде рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдореЛрдб рдХреЗ рд╕рд╛рдередrustc-macro
рдХреНрд░реЗрдЯ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВrustc-macro
рдмрдХреНрд╕реЗ рдХреЛ рдбрд╛рдпрд▓рд┐рдмреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ#[rustc_macro_derive]
рд╕рд╛рде рдЯреИрдЧ рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ _reachable_ рдЖрдЗрдЯрдо рдирд╣реАрдВ рд╣реИрдВcfg(rustc_macro)
рдХреЛ рдЕрд╕реНрдерд┐рд░ cfg
рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕реЗ rustc-macro
рдХреНрд░реЗрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВrustc-macro
crates рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ libsytnax рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛ#[macro_use]
rustc-macro
рдХреНрд░реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рднрд░реЗрдВrustc-macro
рдХреНрд░реЗрдЯреНрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░рдХреЗ dylib / rlib рд╕реЗ рдЖрдЬ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрдм рдХреНрд░реЗрдЯ рдХрд░рдирд╛rustc-macro
рд▓рд┐рдП рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВdlopen
dylibrustc-macro
рдХреЗ рд╕рдорд╛рди plugin = true
--crate-type=rustc-macro
#[derive]
рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдореЛрдХ рдЯреЗрд╕реНрдЯрдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╡рд░рдг рдХреЛ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдореЗрдВ 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]
рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрд░рдо рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░рдиреЗ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
#[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_ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдкрд╛рдд "рдХреЗрд╡рд▓ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ" рдХреЗ рд╕рд╛рде "рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдЬрд╛рд╡рдЯ" рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рдЕрд▓рдЧрд╛рд╡ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрдардиреАрдпрддрд╛ рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореБрдЭреЗ @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
рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рджреЗрдЦрдХрд░ рднреА рдЦреБрд╢ рд╣реВрдВ рдХрд┐ рдХрд╕реНрдЯрдо рдмрджрд▓рд╛рд╡ рдХреЛ рдХрдбрд╝рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ _ рдмрд╛рдж рдореЗрдВ рд╣реБрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдлред :-)
рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдЗрдЯрдо рдХреЗ рдЗрдВрдЯреАрд░рд┐рдпрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рд╕рд┐рд░реНрдл 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 рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ:
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 рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЗрд╕ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣реА рд╣реИ! ЁЯФФ
рд╕реНрдерд┐рд░реАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдЕрдм рд╣реИ:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд╛рдо рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдкрд╣рд▓реЗ рдЖрдо рд╕рд╣рдорддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 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 рдПрдкреАрдЖрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рддреАрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ / рд╡рд┐рдкрдХреНрд╖ рд╣реИрдВред
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 рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛?
рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдореИрдХреНрд░реЛрдЬрд╝ рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓реЗрд╢рд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреЛ 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 рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрди рд╕рднреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИрдВ рди рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рд╣реИрдХред
рд╣рд╛рдБ, рдореИрдВ рдЗрд╕ рдкрд░ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмреАрдЪ рдлрдЯрд╛ рд╣реБрдЖ рд╣реВрдБ, рджреЛрдиреЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдЧрд┐рд░рд╛рд╡рдЯ рд╣реИ:
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд▓реЗрдХрд┐рди @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 рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ рдФрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдВрддреНрд░ рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдиреЛрдЯреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдореИрдХреНрд░реЛ рд╣реИ, рд╡рд╣ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдо рдкреНрд▓рдЧрдЗрди рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЕрд╡рд░реЛрд╣реА рд╣реИредCustomDerive
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд┐рднрд╛рдЬрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдереВрд▓ рд▓реЗрдЦрдХ рдЗрд╕реЗ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдзреЗ рдЧреБрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕ рдкрдВрдЬреАрдХрд░рдг рддрдВрддреНрд░ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)редdeclare_attributes
CustomDerive
Vec<String>
ред рдЗрд╕рдореЗрдВ рдЦрд╛рд▓реА vec рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИред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_ рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЕрднреА рддрдХ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдореИрдВ рдмрд╛рддрдЪреАрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдЕрднреА рднреА рджреГрдврд╝ рдирд┐рд░реНрдгрдп рдФрд░ / рдпрд╛ рдХреЛрдб рдпреЛрдЧрджрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдкреНрд░рд╕реНрддрд╛рд╡:
#[proc_macro]
рдмрдврд╝рд╛рдПрдВ, рдЙрдиреНрд╣реЗрдВ "рдЙрдкрдпреЛрдЧ" рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ рдЦрд╛рдПрдВрдЗрд╕рдХреЗ рд▓рд┐рдП рддрд░реНрдХ:
#[derive(Foo)]
рдмрдирд╛рдо foo!
) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрджреНрджреЗрд╢реНрдп рдХреА рдкреВрд░реНрддрд┐ рдХрд░рддреЗ рд╣реИрдВuse foo::Bar
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рднреЗрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рднреНрд░рдо рдХреЗ рд▓рд┐рдП рдХрдо рдЬрдЧрд╣ рдЕрдЧрд░ рд╡реЗ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВрдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд╣рд╕:
#[cfg()]
cfg!()
рдЖрдЬ рд╣реЛрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдореИрдХреНрд░реЛ рдХреЛ рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдмрддрд╛рдиреЗ рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдкреНрд░рд╕реНрддрд╛рд╡:
рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рдЦреБрд▓рд╛ рд╕рд╡рд╛рд▓ рд╣реИ?
рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди:
рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдмрдЬрд╛рдп 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 рдХреЛ рдЕрдЧрд▓реЗ рдЪрдХреНрд░ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛрддреЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рдо рдЬрд┐рд╕ рдЪреАрдЬ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рд╡рд╣ рдЕрдВрддрдд: рдХрд╛рдлреА рдорд╛рдореВрд▓реА рд╣реЛрддреА рд╣реИред
рдЙрд╕ рднрд╛рд╡рдирд╛ рдореЗрдВ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдореБрджреНрджреЛрдВ рдкрд░ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдЬрд╛рддрд╛ рд╣реИ:
#[proc_macro]
рдПрдХреНрд╕рдЯреЗрдВрд╢рди _or_ рдХреЗ рд╕рд╛рде Item
рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдВред рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рднреА рд╣рдо рдЪреБрдирддреЗ рд╣реИрдВ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрднрд╡рддрдГ рдЕрдкрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╣рд▓реЗ рдЬреЛ рднреА рд▓рд╛рдЧреВ рд╣реЛ, рдЙрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред =)#[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 рдиреЗ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреА рд╕рдореАрдХреНрд╖рд╛ рдмрд╛рдХреА рдЯреИрдЧ рдЯреАрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рд╣реИ:
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВред
рдПрдХ рдмрд╛рд░ рдЬрдм рдпреЗ рд╕рдореАрдХреНрд╖рдХ рдЖрдо рд╕рд╣рдорддрд┐ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдкрд░ рдирд╣реАрдВ рдЙрдард╛рдП рдЧрдП рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдЙрдард╛рдПрдВ!
рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдореБрдЭреЗ рдХреНрдпрд╛ рдЯреИрдЧ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред
рдореИрдВ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдзрдорд╛рдХреЗрджрд╛рд░ рдореИрдХреНрд░реЛрдЬрд╝ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВред
@rfcbot рдиреЗ рд╕рдореАрдХреНрд╖рд╛ рдХреА
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрджрд┐ рдПрдХ рдЯреЛрдХрдирд╕реНрдЯреНрд░реАрдо рдПрдХ рдЦрд╛рд▓реА рд▓реЗрдХреНрд╕рдПрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛
рд╣рд╛рдВ, рдореИрдХреНрд░реЛ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рд▓рд┐рдЦрдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдкрдбрд╝рд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреА рд▓рд╛рдн рд╣реЛрдЧрд╛, рдпрджрд┐ рдХреЗрд╡рд▓ рдореИрдХреНрд░реЛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмреЗрд╣рддрд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реИред
Https://github.com/rust-lang/rust/pull/38140 рдкрд░, рд╣рдо рдХрд╕реНрдЯрдо рд╡реНрдпреБрддреНрдкрдиреНрди рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рджрд┐рди рдирд┐рдЬреА рд╡реНрдпреБрддреНрдкрдиреНрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╣рдо рд╕рдВрднрд╡рддрдГ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╛рд░реЛрд╣ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╣ рдЕрдВрддрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╡рд┐рдХрд▓реНрдк рд╣реИред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рд╡рд┐рд▓рдп рдХреЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдпрд╛ рджреЛ рджрд┐рди рдХреЗ рд▓рд┐рдП рдореИрд░реАрдиреЗрдЯ рдХрд░рдиреЗ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
# 37480 рдмрдВрдж рд╣реИ, рдЬрд┐рд╕реЗ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдлрд┐рдХреНрд╕реНрдб
@pnkfelix рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд▓реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк PTO рдкрд░ рд╣реИрдВ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЛрд░реНрдб рдкрд░ рд╣реИрдВред рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ!
: рдШрдВрдЯреА: рдпрд╣ рдЕрдм рдКрдкрд░ рдХреА рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ ред : рдШрдВрдЯреА:
psst @nikomatsakis , рдореИрдВ final-comment-period
рд▓реЗрдмрд▓ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рдХреГрдкрдпрд╛ рдРрд╕рд╛ рдХрд░реЗрдВред
рдХреНрдпрд╛ рдЖрд╕рдиреНрди рд╕реНрдерд┐рд░реАрдХрд░рдг рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖ рдкрд░ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдореЗрдВ рд╢реЗрд╖ рдЬреНрдЮрд╛рдд рдХреАрдбрд╝реЗ рдкрд╣рд▓реЗ рддрдп рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ? рдпрд╛ рдХреНрдпрд╛ рд╡реЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИрдВ?
рдЕрднреА рджреЛ рд╣реИрдВ:
mod foo;
рдХрд┐рд╕реА рджрд┐рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдмрд┐рдирд╛ рдХреБрдЫ рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд┐рдП рдореБрдЭреЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВредрдЕрд░реЗ! рдпрд╣ рдПрдХ RFC 1636 рдкреНрд░рд▓реЗрдЦрди рдСрдбрд┐рдЯ рд╣реИред RFC 1636 рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рд▓реА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
RFC рдмрддрд╛рддрд╛ рд╣реИ:
рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдм рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
- рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдВ:
- рдЬрдВрдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдж рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдЬрдВрдЧ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рджреЛрдиреЛрдВ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдЪреИрдВрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди
- рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬрд╛рд░реА рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд╛ рд╕рд╛рд░рд╛рдВрд╢ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╢реАрд░реНрд╖ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдореЗрдВ 1.15 рд░рд┐рд▓реАрдЬ рддрдХ рдкреЗрдбрд╝ рдореЗрдВ рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
cc @ рдЬрдВрдЧ-рд▓рдВрдЧ / рдбреЙрдХреНрд╕
рдзрдиреНрдпрд╡рд╛рдж @withoutboats ! рдпрд╣ рдкрд╣рд▓рд╛ рдкреНрд░рдореБрдЦ рд╣реИ, рд╣рд╛рдБред рдЖрдЬ рд╕реБрдмрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рд╕реВрдЪреА рдореЗрдВ рдпрд╣ рдерд╛, рдФрд░ рд▓реЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛, рдЖрдкрдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд░рд╛ рджрд┐рдпрд╛ ЁЯШД
рдореЗрд░реА рдпрд╣ рдХрд▓реНрдкрдирд╛ рд╣рдореЗрд╢рд╛ рдереА рдХрд┐ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рдирд┐рд░реНрдгрдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред рдпрд╣реА рд╣реИ, @ рдЬрдВрдЧ-рд▓реИрдВрдЧ / рд▓реИрдВрдЧ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ "рдпрд╣ рд╕реНрдерд┐рд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди рдЧреЗрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рднреА рдкреНрд░рд▓реЗрдЦрди рдореМрдЬреВрдж рд╣реИ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЬрд╣рд╛рдВ рдЕрд╕реНрдерд┐рд░ рдХрд┐рддрд╛рдм рдореМрдЬреВрдж рд╣реИ , рдпрд╣ рд╡рд╣рд╛рдВ рд╕реЗ рдбреЙрдХреНрд╕ рдХреЛ рд╕реНрдерд┐рд░ рдбреЙрдХреНрд╕ рдореЗрдВ рдЦреАрдВрдЪ рд▓реЗрдЧрд╛; рд▓реЗрдХрд┐рди рддрдм рддрдХ, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЕрдЬреАрдм рд╣реИрдВред
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╕ рдПрдХ рд░рд┐рд▓реАрдЬ рдереА, рдореЗрд░реА рдпреЛрдЬрдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдереА:
рд╕рдВрднрд╡рддрдГ рджреЛ рдФрд░ рддреАрди рдХрд╛ рд╕рдВрдпреЛрдЬрдиред
/ 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 рд╕рдмрдорд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдареАрдХ рд╣реИ, рдореИрдВ рдЖрдЬ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдХрд┐рддрдирд╛ рджреВрд░ рдЬрд╛рдирд╛ рд╣реИред