ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ rust-lang / rfcs # 1681.
cc @alexcrichton
ΠΠ°ΠΊΠΌΡΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΡΡ:
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ:
proc_macro
proc-macro
#[proc_macro_derive(Foo)]
proc-macro
Ρ -L
ΠΈ #[macro_use]
Π΄Π»Ρ ΠΈΡ
Π·Π°Π³ΡΡΠ·ΠΊΠΈproc-macro = true
ΠΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ:
mod foo
fail - # 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"]
, Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄ΠΈΠ»ΠΈΠ±.rustc_macro
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ libsyntax
TokenStream
Π²Π½ΡΡΡΠΈrustc_macro
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ TokenStream
lang, ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π» ΠΎΠ± ΡΡΠΎΠΌ.rustc_macro_derive
foo(bar)
, Π½ΠΈΠΊΠ°ΠΊΠΈΡ
Π΄ΡΡΠ³ΠΈΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² / ΡΠΎΡΠΌΠ°ΡΠΎΠ²TokenStream
lang, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅rustc_macro_derive
Π² ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ.rustc-macro
Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΡΠΈΠΊΠΎΠ²rustc-macro
crates Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½Ρ ΠΊΠ°ΠΊ dylibs.#[rustc_macro_derive]
cfg(rustc_macro)
ΠΊΠ°ΠΊ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ cfg
, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π΅ Π΄Π»Ρ ΡΠΈΠΏΠ° ΡΡΠΈΠΊΠ° rustc-macro
rustc-macro
ΡΡΠΈΠΊΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ libsytnax#[macro_use]
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ rustc-macro
ΡΡΠΈΠΊΠΎΠ²rustc-macro
ΡΡΠΈΠΊΠΎΠ² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ dylib / rlib, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΡΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΈΠΊΠΎΠ²rustc-macro
ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡΡ
ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² Π²ΡΠ²ΠΎΠ΄Π°.dlopen
Π΄ΠΈΠ»ΠΈΠ±rustc-macro
ΠΏΠΎΡ
ΠΎΠΆΠ΅Π΅ Π½Π° plugin = true
--crate-type=rustc-macro
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠΎΠ³ΠΎ#[derive]
traitΠ― ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ Π½Π΅ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ, Π½ΠΎ, Π½Π°Π΄Π΅ΡΡΡ, ΠΎΠ½ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΌ ΠΏΡΠΎΠΉΡΠΈ 90% ΠΏΡΡΠΈ.
Π₯ΠΎΡΠΎΡΠΎ, Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΈΠ·ΡΡΠΈΡΡ ΡΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΠ»ΡΡ.
cc https://github.com/rust-lang/rust/pull/35957 , ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
ΠΠ· # 35957: ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΅ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠΌΡ ΡΡΠΈΠΊΠ° librustc_macro. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΠΈΠΊ-Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΡΠ΅Π»Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π°Π²ΡΠΎΡΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ rustc_macro (ΡΡΠΎ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅) ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ΄Π΅ΠΈ 1.1, ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠ»ΠΎΡ
ΠΈΠΌ. Π Π°Π½ΡΡΠ΅ Ρ Ρ
ΠΎΡΠ΅Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ libmacro, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ macro
- Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ (ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ
ΠΎΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ), ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. @cgswords ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ libproc_macro, ΠΈ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎΠ΅ ΠΈΠΌΡ, Ρ
ΠΎΡΡ Ρ Π½Π΅ Π½Π° 100% Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ ΡΡΠΈΠΌ.
@nrc : Π₯ΠΎΡΠΎΡΠΎ, ΠΌΠΎΠΈ ΠΌΡΡΠ»ΠΈ ΠΏΠΎ
extern crate macros;
- ΠΊΠΎΡΠΎΡΠΊΠΎ ΠΈ ΠΌΠΈΠ»ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠ°ΠΊΡΠΎΡΡ, Π° Π½Π΅ ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΈΡ
Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡextern crate macro_runtime;
- ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° Π±Π°Π½ΠΊΠ΅extern crate metarust;
- Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Rust ΠΎ Rust Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° Rustextern crate bikeshed;
- Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ²Π΅Ρ Rust, ΠΊΠ°ΠΊΠΎΠΉ Π·Π°Ρ
ΠΎΡΠΈΡΠ΅!extern crate macrame;
- Π·Π²ΡΡΠΈΡ ΠΊΠ°ΠΊ "ΠΌΠ°ΠΊΡΠΎΡ make [r]"; Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π»ΡΡΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΡΡ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ Β«Ρ
ΠΎΡΠΎΡΠ΅Π³ΠΎΒ» API Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.@nrc ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ Π²Π°ΠΆΠ½ΡΠΌ Π°ΡΠΏΠ΅ΠΊΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
Π½Π°ΡΠΈΡ
ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΡΠΈΠ»Π΅ΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² - Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Ρ libproc_macro
, ΠΌΡ Π±Π΅ΡΠ΅ΠΌ Π½Π° ΡΠ΅Π±Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ "ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ" ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ. Π£ ΠΌΠ΅Π½Ρ Π½Π΅Ρ ΡΠ²Π΅ΡΠ΄ΠΎΠ³ΠΎ ΠΌΠ½Π΅Π½ΠΈΡ Π·Π΄Π΅ΡΡ, Π½ΠΎ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ Π»ΠΈ ΠΌΡ ΠΎΡΠΊΡΡΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.
Π§ΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΡΡΠ½ΠΎ, Π΄ΡΠΌΠ°Π΅ΡΠ΅ Π»ΠΈ Π²Ρ, ΡΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠ΅ macro_rules
Π±ΡΠ΄ΡΡ ΠΏΡΠΎΡΡΠΎ Β«ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈΒ», ΡΠΎ Π΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΠΌ ΠΏΠΎΠ΄ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Β«ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡΒ»? ΠΠ½Π΅ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ°Π·ΡΠΌΠ½ΡΠΌ ΠΏΠ»Π°Π½ΠΎΠΌ. Π Π² ΡΡΠΎΠΌ ΠΌΠΈΡΠ΅ Ρ Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ libproc_macro
Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ libmacros
.
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π²ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ - ΡΡΠΎ Β«ΠΌΠ°ΠΊΡΠΎΡΡΒ», ΠΈ ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π΄Π»Ρ Π²ΡΠ΅Ρ Π²ΠΈΠ΄ΠΎΠ²), ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Β«ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡΒ» ΠΏΡΠΎΡΠΈΠ² Β«ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°Β». Π― Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ "ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°" ΠΈ "ΠΏΠ»Π°Π³ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°" (ΠΈ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π΄Π»Ρ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²).
ΠΠΎ Π΄Π°, Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΡ ΠΎΡΠΎΡΠ²Π°ΡΡΡΡ ΠΎΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Β«ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ°Β».
@nrc ΠΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π΄Π»Ρ ΠΌΠ΅Π½Ρ! Π₯ΠΎΡΡ Β«ΠΌΠ°ΠΊΡΠΎΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅Β» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΎΠΊ, ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ΅Π½Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠΈΠΉΡΡ / ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΡΠ΅ΡΠΌΠΈΠ½. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ ΠΌΠ΅Π½Ρ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ Β«ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²Β», ΡΠ°ΠΊ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Β«ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°Β» Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠ°Π² Rust. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π΅ΡΡΡ Π»ΠΈ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΡΠ·Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΡΠΌΠΎΠΉ. Β«Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡΒ» Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ, Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ?
ΠΠ°, ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ, Π½ΠΎ, ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ / ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΠΌΠΈΠ½ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ Rust, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°. "ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ" Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, Π½ΠΎ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ "ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ".
Π’Π΅ΡΠΌΠΈΠ½ Perl Π΄Π»Ρ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ° Β«ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΒ» - ΡΡΠΎ Β«ΡΠΈΠ»ΡΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°Β», ΡΡΠΎ (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠΌ ΠΎΡ AST ΠΊ ΡΠΎΠΊΠ΅Π½Π°ΠΌ) ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Β«ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°Β» ΠΈΠ»ΠΈ Β«ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡΒ» ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½? ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ.
ΠΡΠ΄ΠΈ ΡΠΆΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΡΠΎ Β«ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌΒ», ΠΈ Ρ Π΄ΡΠΌΠ°Ρ, ΠΎΠ½ ΡΡΠ½ΠΎ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Β«ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅Β». Π― Π±Ρ Π½Π΅ ΡΡΠ°Π» Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π½Π°ΠΉΡΠΈ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΠΌΡ.
ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½ Β«ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡΒ» Π΄Π»Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (ΠΈΠ»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Β«ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΌΠ°ΠΊΡΠΎΡΒ»). ΠΠ½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»ΠΎΠ²ΠΎ _macro_, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ (Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ...) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ "ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ". ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠ°Π²ΡΡΡΡ Β«ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡΒ» (Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ ΡΠΈΠ»ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅, Π° Π½Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΡ , Ρ ΠΎΡΡ Ρ Π·Π½Π°Ρ, ΡΡΠΎ ΡΡΠΎΡ ΡΠ΅ΡΠΌΠΈΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ ).
ΠΠ΅Π½Ρ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ libproc_macro
ΠΈΠ»ΠΈ libmacros
. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π² ΠΈΠΌΠ΅Π½Π°Ρ
ΡΡΠΈΠΊΠΎΠ² Π΅ΡΡΡ _
ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΠ³ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ. Π·Π½Π°ΠΊ ΡΠ°Π²Π½ΠΎ
ΠΠ΄ΠΈΠ½ Π²ΠΎΠΏΡΠΎΡ: ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π»ΠΈ ΠΌΡ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π°Π»ΠΈΡΠΈΡ Β«ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈΒ», ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ· Π½Π΅ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ
ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²? Π― Π½Π΅ Π·Π½Π°Ρ ΡΠ°ΠΊΠΈΡ
ΠΏΠ»Π°Π½ΠΎΠ², Π½ΠΎ Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΈ Ρ
ΠΎΡΠ΅Π»ΠΈ Π±Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠΈΠΊΠ΅, ΡΠΎΠ³Π΄Π° libmacros
Π±ΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ. Π·Π½Π°ΠΊ ΡΠ°Π²Π½ΠΎ
(Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΠΌΠ°Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ @dherman ΠΈΠ· RFC Ρ Π½Π΅ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅ΠΌ
@nikomatsakis : Π‘Π²ΡΠ·Π°Π½Π½ΡΠΉ, Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ - ΡΡΠΎ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΠΎΠ΄Π½ΡΠ» Π² https://github.com/rust-lang/rfcs/pull/1561#discussion_r60459479 - Ρ ΠΎΡΠΈΠΌ Π»ΠΈ ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΌΠΎΠ³Π»ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²?
Π― Π»Π΅Π³ΠΊΠΎ Π²ΠΈΠΆΡ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ, ΠΈ ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠΈ, ΡΠ΄Π΅Π»Π°Π»ΠΎ Π±Ρ ΡΠ°ΠΌΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΊΠΈΡ Β«ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈΒ».
ΠΠΎ Π΄Π°, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ gensym
@dherman Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅Π»Π΅Π½. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΡΠ²Π΅Ρ Π½Π° ΠΌΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ Π²ΡΡΠ΅ - Β«Π΄Π°Β», gensym ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ (ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
) ΠΈ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ (ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ).
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ PR ΠΏΠΎ Π³ΡΡΠ·Π°ΠΌ https://github.com/rust-lang/cargo/pull/3064, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΡΠΌΠ΅ΡΠ΅Π½Ρ Π²ΡΠ΅ ΡΠ»Π°ΠΆΠΊΠΈ "ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π³ΡΡΠ·Π°" Π² ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅.
Π― ΠΎΡΡΠ°Π²ΠΈΠ» ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΊ PR Π³ΡΡΠ·Π°, Π½ΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΏ _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_rules
ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΡΠΈΠΊΠ° macro_dec
.
@nrc , ΠΊΠΎΠ³Π΄Π° Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ ΠΎ "ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°Ρ ", Π²ΠΊΠ»ΡΡΠ°Π΅ΡΠ΅ Π»ΠΈ Π²Ρ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ metacollect ΠΈ clippy , ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ rustw , rustfmt ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ·ΡΠΊΠ° Rust , ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΡΡ-ΡΠΎ Π΄ΡΡΠ³ΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ?
ΠΠ°ΠΊ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ, ΠΌΠ½Π΅ ΠΌΡΠ³ΠΊΠΎ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ "ΠΏΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡ" (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ $foo
Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ "ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ"). ΠΠ»Ρ ΠΌΠ΅Π½Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π·Π²ΡΡΠΈΡ Π»ΡΡΡΠ΅.
ΠΠ³ΡΠ°Ρ Ρ ΡΡΠΈΠΌ, Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ» ΠΎΠ΄Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Rust ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π΅Ρ, ΡΡΠΎΠ±Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠ΅ΡΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅. Π― Π±Ρ ΠΎΠΆΠΈΠ΄Π°Π», ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π·Π°Π΄Π°Π½Π½Π°Ρ ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ, Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ° #[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) ΠΌΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΡΡΡΠΎΠΊ, ΡΡΠΎ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π±ΡΠ»ΠΈ Π»ΠΈ ΡΡΠΈ ΡΠΊΡΡΡΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π² AST ΡΠ°ΠΊΠΎΠΉ ΠΏΠ»ΠΎΡ ΠΎΠΉ Π²Π΅ΡΡΡ Π² ΠΌΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 2.0? ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ, ΠΊΡΠΎ Π·Π½Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΠ·Π½ΡΡΡΠΈ, ΡΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ. ΠΡΠ»ΠΈ ΡΡΠΈ ΡΠΊΡΡΡΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ» Π² ΡΡΠΎΠΌ Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΠΈΡΠ΅, Ρ Π±Ρ ΠΏΠΎΡΠΏΠΎΡΠΈΠ» Ρ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΠΌ ΠΏΡΡΠ΅ΠΌ, ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎ ΡΠΆΠ΅ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
@ colin-kiegel Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π²Ρ ΠΏΡΠ°Π²Ρ Π² ΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΅ΠΉΡΠ°Ρ, _Π½Π΅_ Π±ΡΠ΄ΡΡΠ΅Π΅. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
#[derive(Eq, Foo, PartialEq)]
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Eq
, Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Foo
, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ PartialEq
. Π‘ΡΡΡΠΊΡΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ _Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ_ ΠΌΠ΅ΠΆΠ΄Ρ Eq
ΠΈ PartialEq
, ΠΏΠΎΡΡΠΎΠΌΡ #[structural_match]
Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ Eq
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Foo
.
Π ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΡΠΈΡΠ°Π½Ρ Π½Π° Π±ΡΠ΄ΡΡΠ΅Π΅!
ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ±ΡΡΠ°ΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ , ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ ΡΠΎΡΠ΅ΡΠ°ΡΡΡΡ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΡΠΈΡ ΡΠΊΡΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². Π‘ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ v2.0 ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ?
ΠΠ°, Ρ Π²Π΅ΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ (ΠΏΡΠΈΡΡΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ TokenStream -> TokenStream), Ρ
ΠΎΡΡ Ρ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Ρ, ΡΡΠΎ Π»ΡΠ±Π°Ρ ΡΠ°Π·ΡΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ #[derive]
ΡΠΎΡ
ΡΠ°Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ.
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» ΡΠ°ΠΌΡ ΡΡΡΡΠΊΡΡΡΡ, ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ? ΠΡ ΠΎΠ΄Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° TokenStream Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ? ΠΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠ°ΠΆΠ΄ΡΠΉ # [derive ()] ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, # [derive (Foo)] ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡ Foo_), Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΌΡ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΡΠΈ Π°ΡΡΠΈΠ±ΡΡΡ?
@mystor, Π΄Π°, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΡΠΈΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ - Π½Π΅ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½Π½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π° Π²Ρ ΠΎΠ΄Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²ΡΡ ΡΡΡΡΠΊΡΡΡΠ°. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎ, ΡΠ΅ΠΌ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ / ΡΡΡΡΠΈΠΊΡ / ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ / ΠΈ Ρ. Π.
ΠΡΠ»ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ Π²Π΅ΡΡΠΈΡ v2.0 ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΊΠ°ΠΊ _ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅_, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, IMO ΠΌΠΎΠΆΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΡΠ΅ΠΌΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
. ΠΡΠ»ΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ v2.0 Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π΅ΠΌΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ API, Π½ΠΎ Π½Π΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ #[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.
Π₯ΠΌ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ custom derive Ρ #[structural_eq]
- ΡΡΠΎ ΡΠΎ, ΠΎ ΡΠ΅ΠΌ Ρ ΡΠ°Π½ΡΡΠ΅ Π½Π΅ Π΄ΡΠΌΠ°Π». ΠΠ΅Π½Ρ ΡΡΠΎ ΡΠΊΠΎΡΠ΅Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ!
ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Β«Π΄ΠΎΠ±Π°Π²ΠΈΡΡΒ» ΡΠ΅ΠΊΡΡ Π² ΠΏΠΎΡΠΎΠΊ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² ... ΠΎΠ½ ΡΠΎΡ ΡΠ°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌ ΠΈΠΌΠ΅ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ Π² ΠΏΠΎΠ»ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ°. ΠΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΌΠ½Π΅ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π²ΠΎΠΏΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠΎΠΌΡ, Ρ ΠΎΡΠΈΠΌ Π»ΠΈ ΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ Π±ΡΠ» Β«ΠΏΡΠΎΡΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌΒ», ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ (Π³Π΄Π΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ). ΠΠ»ΠΈ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ) ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ».
ΠΠ°ΠΌΠ΅ΡΡ, ΡΡΠΎ Π² ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ ΠΈ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΠΈ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π²ΡΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π½Π°Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΡΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅. ΠΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΎΡ ΠΎΡΠ½ΠΎ ΠΈΠ΄Ρ ΠΏΠΎ ΠΏΡΡΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΠ΅ΠΌ-ΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠΌ (ΠΎΠ±ΡΡΠΆΠ΄Π°Π²ΡΠ°ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° - ΡΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²ΡΠ²ΠΎΠ΄, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ).
@nrc Π½Ρ, ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ tokenstream -> tokenstream, Π³Π΄Π΅ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ new
ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π½ΡΠ»Ρ, Π²Π΅ΡΠ½ΠΎ?
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π² ΠΏΠΎΠ»ΡΡ
, ΡΡΠΎΠ±Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅Π» ΡΠΌΡΡΠ». ΠΠΎ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² ΡΡΠΈΠ»Π΅ Β«Π΄ΠΎΠ±Π°Π²ΠΈΡΡΒ» - ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ. Π― ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΡΡΠΈΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΌΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠ°ΠΊΡΠΎΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΡΠ΅ΠΌΡΠΌΠΈ, ΠΏΠ»ΡΡ ΡΡΠΎ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ #[structural_eq]
. ΠΠΠ, ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Ρ.
ΠΡΠ»ΠΈ Π»ΡΠ΄ΡΠΌ Π½Π΅ Π½ΡΠ°Π²ΠΈΠ»Π°ΡΡ ΡΡΠ° ΡΡΠ΄ΡΠ±Π°, Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΡΠΏΡΠΎΡΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΡΠΈΠ½, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΡΠ°Π½ΡΡΠ΅, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
(Π― ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ», - ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΡΠ΅ΡΠ°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ.)
Π ΠΌΠΎΠΈΡ
ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ
Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ Π²ΠΈΠ΄Π° foo!(Bar, parameters...)
, ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Bar
ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ IRC Ρ Π½Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ #[derive(Foo)] #[params] struct Bar;
ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ foo!
Π½Π° #[derive(Foo)]
ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π»ΠΎ ΡΡΡΡΠΊΡΡΡΡ.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π½Π΅ ΡΠΈΠ»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π½ΠΎ ΠΌΠ½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»Π°ΡΡ ΡΡΠ° ΠΈΠ΄Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π°ΡΡ #[structural_match]
ΡΡΠΎΠ±Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π΅Π³ΠΎ Π² ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ impl.
(ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ)
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠ°ΠΊ Serde, ΡΠ°ΠΊ ΠΈ Diesel ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π² ΠΏΠΎΠ»ΡΡ , ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°ΠΌΠ΅Π½Ρ.
Π’Π°ΠΊ ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π΄ΡΠΌΠ°Ρ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ #[structural_match]
. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ?
#[structural_match]
, ΠΎΠ½Π° Π½Π΅ ΠΏΡΠΎΠΉΠ΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΡΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ! (ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΈΡΡΠ²Π°Ρ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΈ Π΄ΡΡΠ°ΡΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΌΠ΅Π½Ρ ΡΡΠΎ Π½Π΅ ΡΠ΄ΠΈΠ²ΠΈΡ.)ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° ΡΠΎ, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π» ΠΌΠ°ΡΡΡ ΠΌΠ΅Π»ΠΊΠΈΡ
ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΈ ΠΏΠΎΠ΄ΡΠΌΠ°Π» Π²ΡΠ»ΡΡ
, Π½ΠΎ Π΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΎ. Π₯ΠΎΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Β«ΠΏΠΎΠ΄Π΄Π΅Π»Π°ΡΡΒ» Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ #[structural_match]
(ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½Π° Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π±Π΅Π· Β«Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Β»), ΡΡΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π»ΡΠ±ΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎ ΠΏΡΠΈΡΠΊΠΎΡΠ±Π½ΠΎ. ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈΠ» @ colin-kiegel, Π½ΠΎ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ Π² ΠΏΠΎΠ»Π΅ΡΠ΅.
(ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡΡ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΡΡΠΎΠ±Ρ ΡΡΠ΄ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», ΠΏΠΎΡΠ΅ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΈΡΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.)
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬: ΠΠ, ΡΠΈΡΠ°Ρ Π½Π°Π·Π°Π΄, Ρ Π²ΠΈΠΆΡ, ΡΡΠΎ Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ» ΡΠΎ, ΡΡΠΎ ΡΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠΈΠ»
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π³ΡΡΠ±ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΡ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΠΌ Π΄Π΅ΡΠ°Π»ΠΈ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ. ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π±Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ·Π½Π°Π» ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ #[structural_match]
.
@nikomatsakis ΠΡ, ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°Π»ΠΎΠΆΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π»ΠΈ ΠΌΠ°ΠΊΡΠΎΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ (ΠΈ Π΄ΡΡΠ³ΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ) Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
@ colin-kiegel
Π― ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΡΡΠΈΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΌΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠ°ΠΊΡΠΎΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΡΠ΅ΠΌΡΠΌΠΈ, ΠΏΠ»ΡΡ ΡΡΠΎ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ # [structure_eq]. ΠΠΠ, ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Ρ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°ΡΡ, Ρ ΠΎΡΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠ»ΠΎΠ²ΠΈΡ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΠ΅. Π―ΡΠ½ΠΎ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π°Π±ΠΎΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΠΏΠΎΡΡ-ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ. ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΌΡΡΠ°ΡΠΈΠΉ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΡΠ°ΠΉΠ½ΠΎΡΡΠ΅ΠΉ Π² ΡΠΏΠ΅ΠΊΡΡΠ΅ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π·Π΄Π΅ΡΡ Π²ΡΠ±ΡΠ°ΡΡ, ΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌ ΡΠΏΠΎΡΠΎΠ±Ρ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΌΡΠ³ΡΠ΅Π½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²). Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π² ΡΠ΅Π»ΠΎΠΌ ΠΌΡ Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»ΠΈ ΡΠ°ΠΌΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΠΎΡΠΎΠ±ΠΎΠΌΡ ΠΎΠ±ΡΡΠ°Ρ.
ΠΡΠ»ΠΈ Π»ΡΠ΄ΡΠΌ Π½Π΅ Π½ΡΠ°Π²ΠΈΠ»Π°ΡΡ ΡΡΠ° ΡΡΠ΄ΡΠ±Π°, Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΡΠΏΡΠΎΡΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΡΠΈΠ½, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΡΠ°Π½ΡΡΠ΅, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ Π±ΡΠ»Π° ΡΠΈΠ»ΡΠ½Π°Ρ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈ Β«ΠΊΠ°Π·Π°Π»ΠΎΡΡ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉΒ». ΠΠ³ΠΎ Π½Π΅ Π»ΡΠ±ΠΈΠ»ΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΌΠ΅Π½Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΠ»ΠΈ ΡΠΊΡΠ°ΡΠ°ΡΡ.
Π― Π±Ρ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΌΡ Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ 1.1 ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΡΠ΅Π΅ ΠΌΡΡΡΡ Π²ΠΎΠ΄Ρ Π·Π΄Π΅ΡΡ, ΠΈ ΠΌΡ ΡΠ΅ΡΡΠ΅ΠΌ ΠΈΠ· Π²ΠΈΠ΄Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠ΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅.
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ @jimmycuadra Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΆΠ΅ΡΡΠΊΠΈΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. @nikomatsakis ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ°Π² Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° #[derive(PartialEq, Eq)]
Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ, ΠΈ ΠΌΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΅Π³ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Ρ @mystor Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π°ΠΆΠ΅ Π·Π½Π°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠΌ Π°ΡΡΠΈΠ±ΡΡΠ΅. ΠΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Ρ
ΠΎΡΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, ΠΈ Ρ Π½Π΅ Ρ
ΠΎΡΡ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΎΡΡ 1.1 ΠΏΠΎΠΌΠ΅ΡΠ°Π»ΠΈ Π½Π°ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ.
Π’Π°ΠΊΠΆΠ΅ ΠΡΠΎΡΡ @nrc Β«s Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΎ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
DERIVE, Ρ Π΄ΡΠΌΠ°Ρ, ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΎ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ #[derive]
Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠ»ΠΈ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ @nrc ΠΈΠΌΠ΅Π΅Ρ Ρ
ΠΎΡΠΎΡΠΈΠΉ ΡΠΌΡΡΠ» ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ², Π½ΠΎ #[derive]
ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ, Π° ΡΠΊΠΎΡΠ΅Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΡΡΡ ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ.
ΠΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅ΡΡΡ ΡΡΡΠΎΠ³ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² #[derive]
. ΠΡΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π² ΡΠΈΠΊΠ»Π΅, ΠΈ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ, ΠΌΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌ, ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΊ ΡΡΠ°ΠΏΡ 1. ΠΡΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π°ΡΡΠΈΠ±ΡΡ #[derive]
_ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°_. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π²ΠΎΠ»ΠΎΡΠ°ΡΠΎΡΡΠΈ.
Π£ ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ - Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΡΠΊΡΡΡΠΈΡ #[derive]
:
#[derive(Clone, Foo)]
ΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ Foo
Π³Π΄Π΅ Ρ ΡΡΡΡΠΊΡΡΡΡ Π΅ΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ #[derive(Clone)]
. ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΎΡ #[derive]
ΡΠΎΡ
ΡΠ°Π½ΠΈΠ»ΡΡ, ΠΌΡ Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Clone
.#[derive_Bar]
. ΠΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠ»ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»ΠΈΡΡ, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ.#[derive]
ΠΡΠΎ Π΄Π°Π΅Ρ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ: Π²Ρ Π½Π΅ ΡΠ°ΡΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ, Π½ΠΎ ΠΎΠΏΡΡΡ ΠΆΠ΅ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ #[derive]
. ΠΡΠΎ Π΄Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°Π½ΠΈΡ ΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡ, ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° ΡΠΈΠΏΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ.
ΠΠ°ΠΊ ΡΡΠΎ Π·Π²ΡΡΠΈΡ? Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π΄Π΅ΡΡ?
@nikomatsakis Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° Π² impl
Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ°ΠΊΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ, Π΄Π°ΠΆΠ΅ ΡΠΈΠΏΡ ΠΏΠΎΠ»Π΅ΠΉ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π°ΡΡΡΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΈ.
ΠΡΠ» Π»ΠΈ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΏΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅, ΠΊΠ°ΠΊ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ, ΡΠ΅ΡΠ΅Π· ΡΡΡΠ»ΠΊΡ Π½Π° Rust ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅? Π ΡΠ΅Π»ΠΎΠΌ, ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²? ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈ Π°Π²ΡΠΎΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ»ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΠ»Π΅ΠΊΡΠ° ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΌΡΡΠ».
Π― ΠΏΡΠΎΡΡΠΎ Ρ
ΠΎΡΠ΅Π» Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΈΠ΄Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΌΠ°ΠΊΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ. Π― Π±Ρ Ρ
ΠΎΡΠ΅Π» ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ, ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ #[derive(Trace)]
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ rust-gc
.
#[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]
Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ, ΡΡΠΎΠΈΡ Π·Π°ΡΡΠ°Ρ.
ΠΠ½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ Ρ Π½Π΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π΅ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΏΠΎΠ»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ»Ρ Π² ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ, ΠΈ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ' t, Π½ΠΎ Π½Π΅ ΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ).
Π£ ΠΌΠ΅Π½Ρ ΠΏΠ»ΠΎΡ ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ²ΡΡΠ²ΠΈΠ΅, ΡΡΠΎ Ρ ΠΏΠΎΠ·Π²ΠΎΠ»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ @mystor - ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρ, ΠΊΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠ» ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ... Π½Π° Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ Π±ΡΠ» Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅ΡΠΌΠΈΠ½).
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π»ΡΠ΄ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠΈΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ. Π ΡΡΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ°Π·ΠΌΡΡΠ»ΡΡΡ ΠΎ Π΄Π΅ΡΠ°Π»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π― Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π», ΡΡΠΎΠ±Ρ Ρ ΠΌΠΎΠ³ ΡΠΊΠ°Π·Π°ΡΡ Β«ΡΠΉ, Ρ Π½Π΅ Π·Π½Π°Ρ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅, Π½ΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ Π΄ΡΡΠ³ΠΎΠ΅Β» Π±Π΅Π· Π²Π·Π°ΠΈΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π±ΠΎΠ»Ρ Π² ΠΏΠ°Π»ΡΡΠ΅ Π½ΠΎΠ³ΠΈ, ΠΈ Ρ Π²Π΅ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ, Π΄Π΅Π»Π°ΡΡΠΈΠΉ ΡΡΠΎ-ΡΠΎ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎΠ΅, ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ? Π Π»ΡΠ±ΠΎΠΌ ΡΡΠΈΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ, ΡΠ΅Π³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΠΎΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π½Π΅ ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΏΡΡΠ°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°, ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈ Ρ. Π.
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΊΡΠ΅ΠΉΡΡ Π±ΡΠ΄ΡΡ ΠΏΡΡΠ°ΡΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅, ΡΠΊΠΎΡΠ΅Π΅ Ρ ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Β«ΡΠΌΠ½ΡΠΌΠΈΒ» ΠΈ Π±ΡΠ΄ΡΡ Π΄Π΅Π»Π°ΡΡ ΠΈΠ·ΡΡΠ½ΡΠ΅ ΡΡΡΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΈ ΡΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ»ΠΎΠΌΠ°Π»ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. Π― Π½Π΅ Π±ΡΠ» Π±Ρ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΈΠ²Π»Π΅Π½, Π΅ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ Π½Π°ΡΠ½ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ»Ρ Π² ΡΡΡΡΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΡΡΠ°ΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ Trace.
@mystor ΠΡΠΎ Π·Π²ΡΡΠΈΡ ΡΠΌΠ΅ΡΡΠ½ΠΎ Π² ΡΠ΅ΠΎΡΠΈΠΈ, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ ΡΡΡΡΠΊΡΡΡΡ Π² Rust, ΠΏΠΎΡΡΠΎΠΌΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½Π΅Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ ΡΠΈΡ ΠΎ, ΡΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² C ++.
@alexcrichton
Π£ ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ - Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΡΠΊΡΡΡΠΈΡ
#[derive]
ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΡΠ° ΠΈΠ΄Π΅Ρ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°ΡΠ²ΠΈΡΡ, ΡΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΡΠΊΡΡΡΠΈΡ Β«Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Β». Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΌ Π΄ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΡΠ°ΡΡΠΈΡΡΡΡ PartialEq / Eq, Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅Ρ ΡΡΡΠΎΠ³ΠΈΡ ΠΏΡΠΈΡΠΈΠ½.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ, Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π·Π²ΡΡΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠ½ΠΊΠΎ, Π½ΠΎ ΠΌΠ΅Π½Ρ ΡΡΠΎ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ. Π― Π±Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΡΡΠΎ Β«Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π²ΡΡΠ°Π²ΠΊΠ°Β» ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ, Π½ΠΎ Ρ Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π», ΡΡΠΎΠ±Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π±ΡΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ, Π° Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π»ΠΈΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ Π»ΡΠ΄ΠΈ ΠΏΠΎΠ»Π°Π³Π°Π»ΠΈΡΡ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΉΡΠ°Ρ.
PS. Π― Π±Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ) ΠΠ‘Π§, Π·Π°ΡΠ΅ΡΠ½Π½ΠΎΠ³ΠΎ Ρ Π΅ΡΠ΅ΠΌ ΡΡΠΈΠΊΠ°, ΠΈΠ»ΠΈ ΡΠ΅Π³ΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , ΡΡΠΎΠ±Ρ Π»ΡΠ΄ΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. Π― Π²ΡΠ΅Π³Π΄Π° Ρ ΠΎΡΠ΅Π» ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π½Π΅ΡΠ²Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π½ΠΎ Ρ ΠΌΠ΅Π½Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ;)
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬: Ρ ΠΏΠ΅ΡΠ΅Π΄ΡΠΌΠ°Π» ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π²ΠΈΠΆΡ ΠΏΡΠΈΡΠΈΠ½ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ, Π½ΠΎ Π²ΠΎΡ ΠΌΠΎΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
ΠΡΠ°ΠΊ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ
#[derive]
ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ:
- ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ (Π½Π΅ Π²ΠΈΠ΄Π΅Π» ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π½ΠΎ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π΅ΡΡΡ)
- ΠΡ Ρ ΠΎΡΠΈΠΌ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π°Π»ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π°Π²ΡΠΎΡΠ°ΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
Π₯ΠΎΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌ
#[derive]
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΈΠΌΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΏΠΎΠ»Ρ / ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ Π² ΡΡΡΡΠΊΡΡΡΠ΅ ΠΎΡΡΠ°Π²Π°Π»ΠΈΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅):
- ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠ΄Ρ, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ
#[derive]
Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΠΏΠ°, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ Π΄Π»Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,#[derive(Trace)]
ΠΈΠ· rust-gc, ΠΊΠΎΡΠΎΡΡΠΉ _Π΄ΠΎΠ»ΠΆΠ΅Π½_ Π²ΠΈΠ΄Π΅ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ ΠΏΠΎΠ΄Π»ΠΎΠΆΠΊΠΈ, ΠΈΠ»ΠΈ ΡΡΠΎ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎΠ½ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ)- ΠΡΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ Π½Π΅ΡΠ²Π½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΡΡΡΡΠΊΡΡΡΡ
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π²ΡΠΊΠΎΠ²ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ
unsafe trait
impls ΠΈΠ»ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π΅ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ( Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ»Ρ ΡΡΡΡΠΊΡΡΡΡ) Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Π½Π΅Ρ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΈΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ rust-gc, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π΄Π²Π΅ ΠΈΠ΄Π΅ΠΈ:ΠΠ΄Π΅Ρ 1
ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΈΡΠ΅ ΠΈΠΌΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡ ΠΎΠ΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ ΠΈ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Π»ΠΈ ΠΈΠΌΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Π»ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ (ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅ΠΉ). Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΄Π°ΠΉΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ ΠΈ Π·Π°Π²Π΅ΡΡΠΈΡΠ΅ ΡΠ±ΠΎΡΠΊΡ.
ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ , ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, Π±ΡΠ΄ΡΡ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ, Π½Π΅ Π±ΡΠ΄ΡΡ Π½Π°ΡΡΡΠ΅Π½Ρ, ΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π·Π²ΡΠΊΠΎΠ²ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ, ΡΡΠΎ ΠΎΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΎΠ½ Π½Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΈ Π²Π·Π»ΠΎΠΌΠ°ΡΡ ΡΠ΅ΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠ°ΠΊ ΠΈ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
ΠΠ΄Π΅Ρ 2
ΠΠ°ΠΉΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡ ΠΏΠ»Π°Π³ΠΈΠ½Ρ Π΄Π΅ΡΠΈΠ²Π°ΡΠΈΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ TokenStream (ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅). ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π·Π°ΠΏΠΈΡΠΈΡΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅. ΠΡΠ»ΠΈ Π°ΡΡΠΈΠ±ΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ², ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ Π½Π° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π°ΡΡΠΈΠ±ΡΡ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ), Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΈΡΠΏΠΎΡΡΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°. ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΡΠ° ΠΈΠ΄Π΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ°Π·ΡΠΌΠ½ΠΎ, Π³Π΅Π½Π΅ΡΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² Π»ΡΠ±ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
TL; DR
ΠΠΎΠ΄Π²ΠΎΠ΄Ρ ΠΈΡΠΎΠ³, Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠ½ΡΡΡ, Π² ΡΠ΅ΠΌ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΡΡΠΈΡΡΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΡ
#[derive(Trace)]
ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ#[derive(Serialize)]
ΠΈ Ρ. Π. Π― ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠΉΠ΄Π΅ΠΌ ΠΏΠΎ ΠΌΠ°ΡΡΡΡΡΡ ΠΌΡΡΠΈΡΡΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΠΊΠ°Ρ ΠΏΡΠΈΡΠΈΠ½Π°, Π½ΠΎ ΠΌΠ½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ Π³ΡΡΡΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠΌΡ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Trace Π½Π°#[derive(unsafe_Trace)]
.
Π― ΡΡΠΈΡΠ°Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ @alexcrichton Ρ ΠΎΡΠΎΡΠΈΠΌ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠΎΠΌ. Π― ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π» Π±Ρ, ΡΡΠΎ Π»ΡΠ±ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π²Π½Π΅ΡΠ΅Π½Π½ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ, Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΠΊ Π½ΠΈΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ @mystor ΠΈΠΌΠ΅Π΅Ρ Ρ
ΠΎΡΠΎΡΡΡ ΡΠΎΡΠΊΡ Π·ΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΠΌ ΡΡΡΠΏΡΠΈΠ·Π°ΠΌ, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ struct
ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠΈΠΊΠΈ, ΡΠΎΡΠ΅ΡΠ°ΡΡΠΈΠ΅ Π² ΡΠ΅Π±Π΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ
ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΠΆΡΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΈΠΌΠΈ.
ΠΠ΅ ΠΏΠΎ ΡΠ΅ΠΌΠ΅: ΡΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ?
ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΈΠ΄Π΅Ρ @nikomatsakis ΡΠ°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ . ΠΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ Β«ΠΏΠ»ΠΎΡ ΠΈΡ Β» ΠΎΠ±ΡΡΠ°Π΅Π² - ΠΈ Π½Π΅ ΡΡΠΎΠΈΡ ΠΏΡΠΈΠ»Π°Π³Π°ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»ΠΈΠΉ.
@mystor ΡΡΠ΅ΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ - Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ . ΠΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ 100% -Π½ΡΠΌ Π·Π²ΡΠΊΠΎΠΌ (Π΄Π²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΠΎΠ»Π΅), Π½ΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ²ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠ΅ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π»ΡΠ±ΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π² Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ.
Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Π²ΠΈΠΆΡ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²Π° ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ. ΠΠΎΠ»Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ, ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΊΠΎΠ΅-ΡΡΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΠ΅ΡΡ ΠΎΠ± ΡΡΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ Π²ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ.
@sgrif, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π²Π΅ΡΠ΅Π½ Π² _ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅_ ΡΠ»ΡΡΠ°Π΅Π², Π½ΠΎ Π½Π΅ ΡΠ°ΠΊ ΡΠΈΠ»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅.
@sgrif PS: ΠΡΠΎ ΠΏΡΠ°Π²Π΄Π°, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π°Π²ΡΠΎΡΠΎΠ² ΡΠΆΠ°Π²ΡΠΈΠ½Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠ΄ΠΈΠ²ΠΈΡΡΡΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ.
ΠΠ±ΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΊ ΡΡΡΡΠΊΡΡΡΠ°ΠΌ - ΡΡΠΎ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ + Π΄Π΅ΠΊΠΎΡΠ°ΡΠΈΠΉ. ΠΠΎ Ρ ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΅ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Β«ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠ°ΡΠ΅Π½ΠΈΠΉΒ» Ρ Β«Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈΒ». ΠΠ΄Π΅ΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠ»ΡΡΡΠ°Π΅Ρ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΡ.
ΠΡΠ°ΠΊ, Ρ ΠΎΡΡ Ρ ΡΡΠΈΡΠ°Ρ ΡΡΡ ΡΠ°ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° @mystor ΡΠ±Π΅Π΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ:
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠ΄Ρ, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ # [derive], Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΠΏΠ°, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ Π΄Π»Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, # [derive (Trace)] ΠΈΠ· rust-gc, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΈΠ΄Π΅ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, ΠΈΠ»ΠΈ ΡΡΠΎ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎΠ½ΠΊΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ)
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠ° Π½Π°Π²ΡΠ·Π°ΡΡ ΡΡΠΎ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½Π°ΠΌ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ (Π΄Π°, ΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΌ, Π½ΠΎ ΡΡΠΎ Ρ ΡΠΎΠ³ΠΎ). ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ "Π·Π΄ΠΎΡΠΎΠ²ΡΡ" Trace
ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π°, ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ _ Π΄ΡΡΠ³ΠΈΠΌ_ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π»ΠΈ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ ΡΠ½ΠΈΠ·Ρ Π²Π²Π΅ΡΡ
:
#[mangle] // <-- custom decorator that does bad things to struct definition
#[derive(Trace)]
struct Foo {
x: T, y: U
}
ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ Trace
impl ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ _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]
ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΡΡΠΈΡΡ Π²Π°Ρ impl, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΡΡΠ²ΠΎΠ»ΡΡΠΊΠΈΠΉ. =) ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ.
ΠΠ°ΠΊ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ Π·Π° ΡΡΠΈΠΌΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°ΠΌΠΈ, Ρ Π±ΡΠ» Π±Ρ ΡΡΠ°ΡΡΠ»ΠΈΠ² ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ #[derive]
ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π±Π»ΠΎΠΊΠΈ impl
ΠΈ Π²Π²ΠΎΠ΄ΠΈΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠΎΠ² ( #[mangle(Foo, Bar)]
Π·Π²ΡΠΊΠΈ Ρ
ΠΎΡΠΎΡΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ πΈ), ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΠΏΠ°. #[mangle]
ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΡΠ΅Π½ΠΊΠΈ.
ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΠΌΠ΅ΠΆΠ΄Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΡΠ΅Π½ΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠΈ ΠΌΠ½Π΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΡΠΌΡΠ³ΡΠΈΠ»ΠΈΡΡ. @nikomatsakis Ρ
ΠΎΡΠΎΡΠΎ let Foo{ ... }
ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΠΌΠ°ΠΊΠ΅ΡΠ° Π² Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ
ΡΠ»ΡΡΠ°ΡΡ
. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π°ΠΌ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π³Π΄Π΅-ΡΠΎ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ΠΌ Π½Π΅ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
@nikomatsakis
ΠΠΎ Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π΄ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Π΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΡΠΊΡΠ΅ΠΏΠΈΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. :-)
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΠ°ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ, Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π½Π°ΡΠΊΠ½ΡΠ»ΡΡ Π½Π° Π²Π΅ΡΠΊΡ Β«ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ Π΄Π»Ρ Qt Ρ RustΒ» Π² u.r-l.o
ΠΈ Π½Π°ΠΏΠΈΡΠ°Π» ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅:
https://users.rust-lang.org/t/pre-implementation-feedback-for-qt-with-rust/7300/19
ΠΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΠΏΠ΅ΠΊΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π·Π΄Π΅ΡΡ Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ #[derive]
(ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ) ΠΊ _trait_, Π° Π½Π΅ ΠΊ ΡΡΡΡΠΊΡΡΡΠ΅ - ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ const
trait. .
ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π³ΡΡΠ·Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΠΎΠ΄Π½ΡΠ» Π²ΡΡΠ΅, Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½ Π²
#[macro_use]
extern crate double;
ΠΈΠΌΠΏΠΎΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ
ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΈΠ· ΡΡΠΈΠΊΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ double
. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΊΠ°ΠΊ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Ruest) Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΈΠΌΠΏΠΎΡΡΠ° Ρ ΡΠ°Π·ΠΎΠ²ΡΠΌ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ Racket (require (for-syntax ...))
. [ΠΠΎΠΊΡΠΌΠ΅Π½Ρ Racket: https://docs.racket-lang.org/reference/require.html#% 28form ._% 28% 28lib._racket% 2Fprivate% 2Fbase..rkt% 29._for-meta% 29% 29, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ²ΡΠ·Π°ΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΠ°Π·Π΄Π΅Π».]
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠ³Π΅ http://blog.ezyang.com/2016/07/what-template-haskell-gets-wrong-and-racket-gets-right/ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π² Template Haskell, ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ: - Π― Π½Π΅ Ρ ΠΎΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΡΠ΅ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π² Rust.
@ Ericson2314 Π Π°Π·Π½ΠΈΡΠ° Π² Rust Π² ΡΠΎΠΌ, ΡΡΠΎ double
ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ _ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π·Ρ_.
Π’ΠΎ Π΅ΡΡΡ ΡΡΠΈΠΊ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ°ΠΊΡΠΎΡΠ° / ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, macro_rules
.
ΠΡΠ»ΠΎ Π±Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ, ΡΠ°ΠΊ ΠΈ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Rust (ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ), Π½ΠΎ ΠΏΠΎΠΊΠ°, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΡΡΠΎΡΡΠ΅ΠΌΡΡΡ ΡΡΠΈΠΊΡ ΡΠ°ΠΌΠΎΠΌΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ, ΡΡΠΎ ΠΈ ΠΊΠ°ΠΊ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ, Π½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Π²ΡΠ±ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠΏΡΠΎΠΌ ΠΈΠ· LISP Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΡΠΌ.
ΠΠ°, @eddyb. Π― ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΡΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ Β«create Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½ΠΈΠΆΠ΅ ΠΏΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡΒ». ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΈΠ· ΡΡΠ°ΠΏΠΎΠ² Π΄Π»Ρ Π½Π°Ρ Π²Π°ΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ Racket, ΠΈΠ·-Π·Π° Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ (Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ Racket ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ), ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.
ΠΡΠ΄Π²ΠΈΠ½ΡΡΠ° Π΄Π»Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π² ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅ ΠΏΠ»Π°Π½Π° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ serde, Π²ΠΎΡ ΠΊΡΠ°ΡΠΊΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ Π½Π΅ΡΠ΅ΡΠ΅Π½Π½ΡΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ Macros 1.1 Π΄Π»Ρ Π²ΡΠ΅Ρ
Π½ΠΎΡΠ½ΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ: https://github.com/serde-rs/serde/issues/545. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡ Rust, - ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ # 36211. ΠΠΎ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΌΡ Π±ΡΡΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌ.
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΉ PR, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π½Π°Ρ rustc_macro Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ syntex, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ https://github.com/serde-rs/serde/pull/548.
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬: Π½Π΅Π²Π°ΠΆΠ½ΠΎ, # 36211 ΠΏΠΎΠ²Π»ΠΈΡΠ» ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠ°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ syntex
Π― ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡ ΠΏΠΎΡΡ Π΄ΠΈΠ·Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΏΠ»ΠΈΠ²Π° ΠΊ ΠΏΡΡΠ½ΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ, ΡΡΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ Π²ΡΠ΅, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ.
@dtolnay, ΡΡΠΈΡΡΠ²Π°Ρ
@sgrif ΠΊΡΡΡΠΎ , ΡΠΏΠ°ΡΠΈΠ±ΠΎ! ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ (ΠΈΠ»ΠΈ ΡΠ°Π½ΡΡΠ΅), Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π΄Π΅ΡΡ Π»ΡΠ±ΡΠ΅ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ?
ΠΠ°, Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½.
ΠΠΎ Π²ΡΠΎΡΠ½ΠΈΠΊ, 27 ΡΠ΅Π½ΡΡΠ±ΡΡ 2016 Π³., 19:29 Alex Crichton [email protected]
Π½Π°ΠΏΠΈΡΠ°Π»:
@dtolnay https://github.com/dtolnay Ρ ΡΡΠ΅ΡΠΎΠΌ serde-rs / serde # 548
https://github.com/serde-rs/serde/pull/548 , ΠΎΡΡΠ°Π»ΠΈΡΡ Π»ΠΈ
Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΄Π΅?@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
Π£ΡΠΈΡΡΠ²Π°Ρ serde-rs / serde # 548, Π΅ΡΡΡ Π»ΠΈ Π΅ΡΠ΅ Π±Π»ΠΎΠΊΠ°ΡΠΎΡΡ Π΄Π»Ρ serde?
ΠΠ΅Ρ, Π΅ΡΠ»ΠΈ @ oli-obk ΠΈΠ»ΠΈ @erickt ΠΏΡΠΎΠ²Π΅ΡΠΈΡ ΡΡΠΎΡ PR ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π·Π°Π²ΡΡΠ°, ΡΠΎ Ρ ΠΌΠΎΠ³Ρ Π²ΡΠ»ΠΎΠΆΠΈΡΡ Π²ΡΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π΄Π΅Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Rusoto.
@dtolnay ΠΠ΅Π»Π°Ρ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ serde_macros Π² Π ΡΠΌΠ΅ ΠΈ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΡΠ΅ΡΡ serde_derive , Π° ΡΠ°ΠΊΠΆΠ΅, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π³Π»Π°Π·.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Ρ ΡΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ diesel_codegen, ΡΠ°ΠΊ ΡΡΠΎ Ruma - Ρ ΠΎΡΠΎΡΠ°Ρ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ° Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ Macros 1.1 ΠΎΠ±Π΅ΠΈΡ ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Π― Π²ΡΠΏΡΡΡΠΈΠ» Serde 0.8.10, ΠΎΠ±ΡΡΠ²ΠΈΠ², ΡΡΠΎ serde_macros ΡΡΡΠ°ΡΠ΅Π» Π² ΠΏΠΎΠ»ΡΠ·Ρ Macros 1.1.
ΠΠΎΠ±Π°Π²ΠΈΠΌ Π³Π°Π»ΠΎΡΠΊΡ Π΄Π»Ρ "Cargo doc works" - https://github.com/rust-lang/cargo/issues/3132.
@dtolnay Π³ΠΎΡΠΎΠ²ΠΎ!
ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ serde_derive ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ rustc / rustdoc, Π½ΠΎ Ρ Π·Π°ΠΌΠ΅ΡΠ°Ρ Π΄Π²Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°Ρ :
Deserialize
ΠΈ Serialize
Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ²Β» Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅.ΠΠΈΡΠ΅ΡΠ°Π» Β«///Β» ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΠΎΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΡΠΎ Π±ΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° syn
. Π― Π²ΡΠΏΡΡΡΠΈΠ» 0.8.2 Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ cargo update
ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ Π·Π°Π±ΡΠ°ΡΡ.
ΠΠ°ΡΡΠ΅Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ Ρ Π½Π΅ Π·Π½Π°Ρ, ΠΎΡΡΠ°Π²Π»Ρ ΡΡΠΎ @alexcrichton.
@jimmycuadra
Deserialize
ΠΈSerialize
Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ²Β» Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠ²ΡΡΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ! ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π² rustdoc, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Π½ΠΎΠ²Π°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, rustdoc Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠΎΠ³ΠΎ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Copy
:
#[derive(Clone)]
pub struct Point {
x: i32,
y: i32,
}
const _FOO: () = {
impl Copy for Point {}
()
};
ΠΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ serde-derive Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΠΌΠΏΡ. @dtolnay Π±ΡΠ»Π° Π»ΠΈ Ρ serde_macros
ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΡΠΎΡΠΌΠ° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ? ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ?
@jimmycuadra Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠΊΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ rustdoc?
@dtolnay Π±ΡΠ»Π° Π»ΠΈ Ρ
serde_macros
ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΡΠΎΡΠΌΠ° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ?
ΠΠ°.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ?
ΠΠ΅Ρ. ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΠΎΠ±ΠΎΠΈΠΌ ΡΡΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌ:
::serde
. ΠΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΠΊΠΎΠ³Π΄Π° Π»ΡΠ΄ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ serde impls Π·Π° ΡΠ»Π°Π³ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅.ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° https://github.com/serde-rs/serde/issues/159 .
@dtolnay Π°Ρ , Ρ ΠΎΡΠΎΡΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡΠ½ΠΈΡΡ, @jimmycuadra ΡΡΠΎ Π½Π΅ ΡΠ΅Π³ΡΠ΅ΡΡ, Π²Π΅ΡΠ½ΠΎ?
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π³ΠΎΡΠΎΠ²ΠΎ Ρ ΠΏΠΎΡΡΠΎΠΌ, Π½ΠΎ ΠΏΠΎΡΡΠΈ Π³ΠΎΡΠΎΠ²ΠΎ. ΠΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΡΠΎΠΌΠ΅ Π²Π΅ΡΠ΅ΠΉ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠ°Π», ΠΈΠ»ΠΈ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ, ΠΊΠ°ΠΊ ΠΌΡ Π·Π½Π°Π»ΠΈ, ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½Π΅ΠΌΡΡ. ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π³Π°Π»ΠΎΡΠΊΡ Π² ΠΏΠΎΠ»Π΅ Β«ΠΠΈΠ·Π΅Π»Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΒ», Π·Π°Π²ΡΡΠ° Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΡΡΠΊ Macros 1.1, Π΅ΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π²Π΅ΡΠ΅ΡΠΎΠΌ.
ΠΠ»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΠΌΠ½ΠΎΠΉ, Ρ ΠΎΡΠΊΡΡΠ» # 36945 ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π» rustc_macro
Π² proc_macro
ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅Π·Π΄Π΅, ΡΡΠΎ, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡΠΎΠΌ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ°.
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ΅ΠΉΡΠΎΠ² Π² rustdoc (ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅) Π½Π΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ Macros 1.1. ΠΠΎΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ.
Π― ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ mockers
ΠΈΠ· ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π² ΠΌΠ°ΠΊΡΠΎΡΡ 1.1 ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» Β«ΠΎΡΠΈΠ±ΠΊΡ: Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ struct / enumΒ». Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (Ρ
ΠΎΡΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½Π½ΠΎ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ "derive" Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ². ΠΠ½Π΅ ΡΡΡ Π½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ?
@kriomant ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ! Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ #[derive]
ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊ ΡΡΠ΅ΠΉΡΡ ...
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΠΎΠΊΠ° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΈΠ²Π½ΡΠΌΠΈ, ΠΌΡ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅ΠΌ _stabilize_ derive-on-traits, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΡΠ»ΠΈ @ rust-lang / lang?
@alexcrichton Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ
@KalitaAlexey Π½Π΅Ρ, ΡΡΠΎ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ derive
@alexcrichton ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΠΎΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ΅ΡΡΠ°ΠΌ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ°?
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» Π²ΡΡΠ΅ , Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΡΠΈΠ±ΠΊΠ°, Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΠ°ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ°Π»ΠΎΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ², Π° ΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² RFC, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° derive-on-trait Π²ΡΡΠ΄ Π»ΠΈ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΎΡ ΠΎΠ΄Π΅, Π½ΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΡΠΎΡΠ° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ.
Π― Π»ΠΈΡΠ½ΠΎ Π½Π΅ Ρ
ΠΎΡΠ΅Π» Π±Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΡΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΡΠ΅ΠΌ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅. (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ΄Π΅Ρ Π²ΡΠ°Π·ΡΠ΅Π· Ρ Π΄ΡΡ
ΠΎΠΌ #[derive]
Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅)
Π― Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π», ΡΡΠΎΠ±Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ, ΡΡΠΎ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅. ΠΡ _ΠΌΠΎΠ³ΡΡ_ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΠΏΠΎΠ·ΠΆΠ΅, Π½ΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ RFC (Ρ ΡΠΎΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Ρ ΠΎΠ»ΠΎΠ΄Π΅Π½ Π² ΡΡΠΎΠΉ ΠΈΠ΄Π΅Π΅, tbh, Π½ΠΎ Ρ ΠΌΠΎΠ³ Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ²ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ±Π΅Π΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² ).
@alexcrichton
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΈΠ²Π½ΡΠΌ, ΠΌΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΅ΡΠ΅ Π½Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΡΡΡ, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΡΠ»ΠΈ @ rust-lang / lang?
π ΠΎΡ ΠΌΠ΅Π½Ρ.
Π₯ΠΎΡΠΎΡΠΎ, Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ - ΡΡΠΎ Ρ
ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ (Π±Π΅Π· Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°). Π ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ macro!(β¦)
ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° "ΠΌΠ°ΠΊΡΠΎΡΡ 1.1", Ρ ΠΏΡΠ°Π²?
Π― ΠΏΠ΅ΡΠ΅ΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ RFC ΠΌΠ°ΠΊΡΠΎΡΠ° proc, ΠΈ Π±ΡΠ» ΠΏΠ»Π°Π½, ΡΡΠΎ ΡΡΠΈΠΊΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠ΅Π±Ρ #[cfg(macro)]
. ΠΠ»Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 ΡΡΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ ΡΡΠΈΠΊΠ°. ΠΡΠΈ Π΄Π²Π° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΎΡΡΠΎΠ³ΠΎΠ½Π°Π»ΡΠ½Ρ - ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ°Π·Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π²ΡΠΎΡΠΎΠΉ - Π²ΠΈΠ΄ ΠΊΠΎΡΠ·ΠΈΠ½Ρ. ΠΠΎ ΠΎΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ - ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ΅. ΠΠ΅ΡΠ²ΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² proc ΠΈ Π½Π΅ΠΌΠ°ΠΊΡΠΎ-ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΠΎΠ΄Π½ΠΈΡ
ΠΈ ΡΠ΅Ρ
ΠΆΠ΅ ΡΡΠΈΠΊΠ°Ρ
, Π° Π²ΡΠΎΡΠΎΠΉ - Π½Π΅Ρ.
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ Π½Π°ΠΌ Π·Π΄Π΅ΡΡ ΡΡΠΎ-ΡΠΎ ΠΌΠ΅Π½ΡΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Π·Π»ΠΎΠΌΠ°ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² proc Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ (ΠΎΠ½ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΈΠΏΠΎΠ² ΡΡΠΈΠΊΠΎΠ²). ΠΠΎ Π½Π°Π΄ ΡΠ΅ΠΌ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ.
@kriomant ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π΄Π°
@nrc ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ cfg(rustc_macro)
(Ρ
ΠΎΡΡ ΡΠΊΠΎΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π½Π° proc_macro
). ΠΠ°ΠΌ ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ, Π½Π΅Ρ, Π½ΠΎ Ρ Π΄ΡΠΌΠ°Π», ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ Ρ ΡΡΠΈΠΊΠΎΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠ°ΠΊ ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ? Π’ΠΎ Π΅ΡΡΡ ΠΌΡ Π±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠΈΠΊ proc-macro Π΄Π²Π°ΠΆΠ΄Ρ: ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Ρ ΡΠΈΠΏΠΎΠΌ ΡΡΠΈΠΊΠ° proc-macro
ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Ρ ΡΠΈΠΏΠΎΠΌ ΡΡΠΈΠΊΠ° rlib
, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° libsyntax ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. ΡΠΎΡ.
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Ρ ΠΎΡΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌ Π½Π΅ _require_ ΡΡΠΎ, Ρ ΠΎΡΡ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ? (ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΡΡΠΈΠΊ Π΄Π²Π°ΠΆΠ΄Ρ)
@alexcrichton ΠΠΎΠΆΠ΅Ρ Π»ΠΈ #[proc_macro_derive]
ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΡΡΠΎ? Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ #[test]
ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ #[cfg(test)]
.
(ΠΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠ΅ΠΉΡΠ°Ρ, ΠΏΡΠΎΡΡΠΎ Ρ
ΡΠ΄ΡΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ cfg
- ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ
.)
@eddyb Π ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ extern crate proc_macro;
? Π― ΡΡΠ²ΡΡΠ²ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΎΠΆΠ΅ ΡΠ»ΠΎΠΌΠ°ΡΡΡΡ.
@mystor ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΡΠΈΠΊ Ρ ΠΊΡΡΠ΅ΠΉ ΡΠΈΠΏΠΎΠ² ΠΈ ΠΈΠΌΠΏΠΎΠ².
Π Π°Π·Π²Π΅ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ Ρ libsyntax
, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΡΠΈΠΊ proc_macro ΠΈ Ρ
ΠΎΡΠ΅Π» Π±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ?
@eddyb yes #[proc_macro_derive]
ΠΌΠΎΠΆΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡΡΡ, Π½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ _ΡΠ°ΠΊΠΆΠ΅_ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅, ΡΡΠΎ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, extern crate proc_macro
). Π₯ΠΎΡΡ ΡΡΠΎ Β«ΠΏΡΠΎΡΡΠΎ ΡΡΠΈΠΊΒ», ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅, Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΊΡΠΎΡΡ-ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ΅Π»Π΅ΠΉ ΠΈ Ρ. Π.).
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΡΠ΅ΡΡΠ°Ρ
Π΅ΡΡΡ #[cfg(test)]
, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ°Π·ΡΠΌΠ½ΡΠΌ, ΡΡΠΎ ΠΌΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ #[cfg(proc_macro)]
Π΄Π»Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅Π»ΠΈ.
@alexcrichton _ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ_, Π² ΡΡΠΈΠΊΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ, ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅Π³ΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ libstd
. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΌΠΎΠ³ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΡΠ»ΡΡΠ°ΡΡ
#![no_std]
.
ΠΠΎΡ ΠΎΠΆΠ΅, Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π²ΠΎΠΉΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΡΠ΅ ΡΠ»ΠΎΠ²ΠΈΡΡ: dis provided :.
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬ : ΠΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅, ΠΎ ΡΠ΅ΠΌ Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π΄ΡΠΌΠ°Ρ? ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ ΡΡΠΈΠΊΠ°, Π΄Π²ΠΎΠΉΠ½Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ _ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠΌ_ ΡΡΠΈΠΊΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ _ΡΠ°ΠΊΠΆΠ΅_ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ / Π°ΡΡΠΈΠ±ΡΡΡ / ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ / ΠΈ Ρ. Π. Π’Π°ΠΊ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎ Π½Π΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ.
ΠΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Ρ
ΠΎΡΡ Π±Ρ Π²Π²Π΅ΡΡΠΈ #[cfg(proc_macro)]
ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΅Π³Π΄Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΡΠΈΠΊΠ°.
π ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΡΠΏΠ°Π΅Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Π²ΡΠΏΡΡΠΊΠ°! π
ΠΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ Π²ΠΎΠΏΡΠΎΡΠ° ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΠΌΡ ΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π½Π° proc_macro
, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡΠ΅ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΎΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΎΡ ΡΡΠΎΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΡ
Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠΉ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Π²ΡΠΏΡΡΠΊΠ°.
ΠΠ²ΠΎΠΉΠ½Π°Ρ ΡΠ±ΠΎΡΠΊΠ° ΡΡΠΈΠΊΠ° Π·Π²ΡΡΠΈΡ ΠΎΡΠ΅Π½Ρ Π³ΡΡΠ±ΠΎ: ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΌΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ extern! crate needed_for_my_inline_proc_macros;
- Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
@aturon ΡΡΠΎ, ΡΠ°Π·Π²Π΅ Π»ΡΠ΄ΠΈ Π½Π΅ Π½Π°ΡΠ°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄?
@ Ericson2314 ΠΡΠΎΡΠ»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ FCP, _ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅_ Π²ΡΠ΅ΠΌΡ Π΄ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π½Π° ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΈ ΠΌΠ΅ΡΡΡΠ°, ΡΡΠΎ, ΠΏΠΎ Π½Π°ΡΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ·ΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ°ΠΌ FCP ΡΠ°ΡΡΡΠΈΡΠ°Π½ Π½Π° 6 Π½Π΅Π΄Π΅Π»Ρ, ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΡ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ Π΅Π³ΠΎ Π½Π° ΠΏΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π½Π°ΡΠ°Π² ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΠΉΡΠ°Ρ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΡΡΡΠΈΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΡΠ΅Π· 3 ΠΌΠ΅ΡΡΡΠ°, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡ Ρ ΠΎΡΠΎΡΠΎ. Π― Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ» ΠΎ ΡΡΠ΅Ρ ΠΌΠ΅ΡΡΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ, Π½ΠΎ Π·Π°Π±ΡΠ», Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ FCP Π² ΡΡΠΈΡ ΡΡΠ΅Ρ ΡΡΡΡΡΡ - ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΡΡΠ΅Ρ ΠΌΠ΅ΡΡΡΠ΅Π² Ρ 22 Π°Π²Π³ΡΡΡΠ°. Π’ΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π° Π²ΡΠ΅ΠΌΡ.
Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ°Π·ΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΠΎΠ΄Π½ΡΠ», Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π»ΠΈΡΡΡ Π΄Π°ΠΆΠ΅ Π½Π° ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΈΡΡΠΎΡΠΈΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² proc, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΡΠ΅ΡΠ΅Π½Ρ.
@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,
}
Π― Π·Π°ΠΊΠΎΠ½ΡΠΈΠ» ΠΏΠ΅ΡΠ΅Π½ΠΎΡ https://github.com/sfackler/rust-postgres-derive Π½Π° ΠΌΠ°ΠΊΡΠΎΡΡ 1.1. ΠΡΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ, Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΡΡΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ, - ΠΎΠ³ΡΠΎΠΌΠ½Π°Ρ Π±ΠΎΠ»Ρ. Π‘Π΅ΡΠ΄Π΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°ΠΌΡΠΌ, Π½ΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΎΠ±ΠΎΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ: https://github.com/sfackler/rust-postgres-derive/blob/master/postgres-derive-internals/ src / lib.rs # L26
ΠΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ, Π½ΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΡΠ³ΠΎΠ½ΠΎΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ Π°Π²ΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅ΡΠΈΡΡ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ.
Π― Π²ΡΠΏΡΡΡΠΈΠ» quote
0.3.0 Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΏΡΠΈΡΡΠ΄Π»ΠΈΠ²ΡΡ
ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠΈΠ»Π΅ macro_rules!
(ΡΠΏΠ°ΡΠΈΠ±ΠΎ @nrc Π·Π° ΠΏΠΎΠ΄ΡΠ°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅). ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ proc Π±Π΅Π· quasi / syntex, Π²Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π·Π°Ρ
ΠΎΡΠΈΡΠ΅ ΡΡΠΎΠ³ΠΎ. ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· postgres-derive:
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, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ. \{...}
ΡΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Ρ
ΠΎΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅.
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π½Π΅Ρ ΡΠΊΠΎΠ±ΠΎΠΊ, Π½ΠΎ ΠΌΠ½Π΅ Π½Π΅ ΠΎ ΡΠ΅ΠΌ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ.
ΠΠ½Π΅ Π»ΡΠ±ΠΎΠΏΡΡΠ½ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ
#
Π° Π½Π΅$
?
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡ macro_rules, ΠΈ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ Π΄Π΅Π»Π°ΡΡ ΡΠΎ, ΡΡΠΎ Ρ
ΠΎΡΡ: smile :. $v
ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½, ΠΈ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΎΡ $v
ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ v
. ΠΠ°ΠΏΡΠΎΡΠΈΠ², #v
- ΡΡΠΎ Π΄Π²Π° ΡΠΎΠΊΠ΅Π½Π°, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΌΠΎΠ³Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΡ
ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ.
macro_rules! demo {
($tt:tt) => {};
}
fn main() {
demo!($v);
}
ΠΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅, Π²ΡΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² macro_rules
?! ΠΠ°Π±ΡΠ» ΠΌΠ°ΠΊΡΠΎΡΡ 1.1 Π±ΡΠ» ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½ΠΈΠ΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, $x
ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΎΠΊΠ΅Π½ΠΎΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΠΠ. cc @jseyfried
@dtolnay
@alexcrichton, rustc_copy_clone_marker ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ rustc_attrs Π²ΡΠ΅ Π΅ΡΠ΅ ΠΊΡΡΠ°ΡΡ Π½Π°Ρ. Π‘ΠΌ. Serde-rs / serde # 577.
ΠΠΉ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΠ»ΠΎΡ
ΠΎ! ΠΠ±Π½ΠΎΠ²Π»Ρ ΡΠΏΠΈΡΠΎΠΊ Π²Π²Π΅ΡΡ
Ρ. @nrc ΠΈΠ»ΠΈ @jseyfried ΠΌΡΡΠ»ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Ρ ΡΡΠΈΠΌ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ? Π― Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π·Π½Π°ΠΊΠΎΠΌ Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ ΡΠ°ΡΠΊΡΡΡΠΈΡ Π²ΡΠ΅Π³ΠΎ, Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ Π°ΡΡΠΈΠ±ΡΡ #[derive]
ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ³Π»ΠΎΡΠΈΡΡ Π²ΡΠ΅ Π±ΡΠ΄ΡΡΠΈΠ΅ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΌ?
@sfackler
ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ, - ΠΎΠ³ΡΠΎΠΌΠ½Π°Ρ Π±ΠΎΠ»Ρ
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π» ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΡΡΠ»Π°Π»ΠΈΡΡ, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΡΡΠΎΡΠ½ΠΈΡΡ?
@alexcrichton ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°
#[derive(ToSql, FromSql)]
enum Foo {
#[postgres(name = "bar")]
Bar
}
ΠΡΡΠΈΠ±ΡΡ #[postgres]
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ToSql
ΠΈ FromSql
. ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ, Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ToSql
ΠΈ FromSql
Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅ ΡΡΠΎ Π½Π°ΠΈΠ²Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΏΡΠΎΡΡΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π°Π»ΠΈΠ² Π°ΡΡΠΈΠ±ΡΡΡ, Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π½Π΅ Ρ
Π²Π°ΡΠ°ΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ.
Serde-derive ΠΈ postgres-derive ΠΏΡΡΠ°ΡΡΡΡ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ, ΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
ΠΈΠΌΠΏΠΎΠ², ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡ ΠΈΡ
Π½Π° ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΎΠ±Π° ΡΡΠ°Π·Ρ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΡΡ #[derive]
Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ΄Π°Π»ΡΠ΅Ρ Π΅Π³ΠΎ, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ: https://github.com/sfackler/rust-postgres-derive/blob /master/postgres-derive/src/lib.rs#L18
@sfackler Π― _ Π΄ΡΠΌΠ°Ρ_, ΡΡΠΎ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, ΡΠ΄Π°Π»ΠΈΠ² Π»ΠΈΡΠ½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠ°Ρ ΡΠΏΠΎΡΠΎΠ± ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΡΡΠ΅ _shrug_.
@sfackler Π°Ρ , Ρ ΠΎΡΠΎΡΠΎ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ». ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ!
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π±ΡΡΡ Ρ
ΡΡΠΏΠΊΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°ΡΡΠΈΡΡΠ΅ΡΠ΅ ToSql
ΠΊΠ°ΠΊ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π±ΡΠ΄ΡΡΠ΅Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ FromSql
? ΠΡΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±ΡΡΡ Π·Π° #[cfg]
Π²ΡΠΎΠ΄Π΅ @dtolnay, ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ΅ ? ΠΠ½Π°ΡΠΈΡ, ΡΡΠΎ Π½Π΅ Π²ΠΎ Π²ΡΠ΅Ρ
ΡΠ»ΡΡΠ°ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ?
@alexcrichton ΠΠ°, ΠΎΠ½ Ρ ΡΡΠΏΠΊΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ.
Π Π°Π·Π²Π΅ #[cfg]
ΠΈ #[cfg_attr]
Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ?
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ api ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, Ρ ΠΌΠΎΠ³Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ.
ΠΠΈΠ½ΡΡ 1: ΠΏΠΎΠΊΠ° ΡΡΠΎ Ρ
ΡΡΠΏΠΊΠΈΠ΅ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΡΠ΅ ΠΏΡΡΠΈ
Con 2: Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Ρ
con 3: Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠΈ API Π΄Π»Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ
Π― ΠΏΠΎΠ΄ΡΠΌΠ°Π» ΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² #[used(...)]
ΡΡΠΎΠ±Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΈΡ
ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Π±Π΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π³Π»ΡΠΏΠΎ ΠΈ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΡΡΡΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ.
@alexcrichton
ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ Π°ΡΡΠΈΠ±ΡΡ
#[derive]
ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ³Π»ΠΎΡΠΈΡΡ Π²ΡΠ΅ Π±ΡΠ΄ΡΡΠΈΠ΅
ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΡΠ° ΠΈΠ΄Π΅Ρ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ #[cfg]
s ΠΈ #[cfg_attr]
s ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π΄ΠΎ #[derive]
s, #[cfg]
-guarded #[derive]
s Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°. (ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ @sfackler Π΄Π»Ρ
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ @sfackler Β«ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ s Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ΅ (Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΠΌΠ°Ρ , ΡΡΠΎ @eddybΒ» s ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ Π²Π΅ΡΠΈ).
ΠΠ΄Π½Π° ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ - Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ Π½Π° ΡΠΈΠ½ΡΠ΅ΠΊΡ: https://github.com/sfackler/rust-postgres-derive/blob/master/postgres-derive-codegen/src/lib. rs # L23 -L50
ΠΠ°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ impls ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΠ°ΡΠΊΡΡΡΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ.
ΠΠΈΠ·Π΅Π»Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄ ΡΡΠΈΠΌ. https://github.com/diesel-rs/diesel/blob/master/diesel_codegen/src/lib.rs#L101 -L112
@dtolnay Π²Π°ΡΠ° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ°Ρ ΠΎΠ·Π°Π±ΠΎΡΠ΅Π½Π½ΠΎΡΡΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ² #[derive]
Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠ² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ @jseyfried
Π― ΠΏΠΎΠΈΠ³ΡΠ°Π»ΡΡ Ρ ΡΡΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ syn
ΠΈ quote
, ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠΏΡΡ. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠΊΡΡΠΈΠ»Π° ΠΌΠΎΠΉ impl, Π½Π°Ρ
ΠΎΠ΄ΡΡΡ Π½ΠΈΠΆΠ΅ ΠΏΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π²ΡΠ²ΠΎΠ΄Π° serde
s.
ΠΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠ»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , Π΄Π»Ρ ΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ, ΠΊΠ°ΠΆΡΡΡΡ ΠΌΠ½Π΅ ΡΠ°Π·ΡΠΌΠ½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΡΠ»ΠΎ Π±Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π½Π΅ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠΊΠ΅Π½ΠΎΠ², ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π΄ΠΈΠΊΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°ΡΡΠΎΡΡΠΈΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ 2.0, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π΅ ΡΡΡΠ΄Π½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΡΠ°ΠΊ, Ρ ΠΌΠ΅Π½Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°Π»Π° ΡΠΎΡΠΊΠ° Ρ Π·Π°ΠΏΡΡΠΎΠΉ Π² ΠΏΡΡΠΈ ΠΊ ΡΠΈΠΏΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ generic, ΠΈ Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΎΡ rustc. ΠΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡ derive Π²ΡΠ·Π²Π°Π» ΠΎΡΠΈΠ±ΠΊΡ 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 ΠΎΠΊΡΡΠ±ΡΡ (Ρ rustup Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ) https://github.com/keeperofdakeys/proc_macro_derive_test.
@ rust-lang / lang Π― Π΄ΡΠΌΠ°Ρ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΡΠΎΠΌ, ΠΌΠΎΠ³ΡΡ Π»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΉ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π₯ΠΎΡΡ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΠΎΠ½ΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ. Π― ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΠΏΡΠΎΡΡΠΎΡΠ° ΠΏΡΠΈΡΡΠ½Π°, ΠΈ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ² Π½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½Π΅ Π»ΡΡΡΠ΅.
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ, Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ. Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΠΎΡΠ½ΠΎΡΡΡΡ ΠΊ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΏΠΎΠΊΠ° (Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ) ΠΌΠ°ΠΊΡΠΎΡΡ Π½Π΅ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΠΎΠ³ΡΡ.
ΠΡΠΎ-ΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Β«ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡΒ». ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π½ΠΎΠ² ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΎΠ± ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΆΠ°Π»ΠΎΠ²Π°Π»ΡΡ Π½Π° Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ?
ΠΡΠ»ΠΈ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π½ΠΎΠ² ΡΡΡΡΠΊΡΡΡΡ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, Π»ΡΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠ°ΠΊΡΠΎΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π½ΡΡΠ΅ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ . ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΈ (Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄) ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ± ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ Π² ΡΠ°ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΠΎ Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ°.
ΠΠΎΡ ΠΈΠ½ΡΡΠΈΡΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅, ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡ. ΠΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ impls ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΄ΠΊΠ°. Π‘ΠΎΠ³Π»Π°ΡΠ½Ρ Π»ΠΈ ΠΌΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅, ΠΈΠ»ΠΈ Π»ΡΠ΄ΠΈ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠΌ ΡΠΈΠΏΠ΅?
ΠΡΠ»ΠΈ ΠΌΡ ΡΠΎΠ³Π»Π°ΡΠ°Π΅ΠΌΡΡ Ρ ΡΡΠΈΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: Ρ ΠΎΡΠΈΠΌ Π»ΠΈ ΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ Π½Π°ΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π» ΡΡΠΎ, ΠΈΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠΎ Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΡΠΎ? ΠΠ΄Π΅ΡΡ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π΅ΡΡΡ Π΄Π²Π΅ ΡΡΠ°Π²Π½ΠΎΠ²Π΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
serde
ΠΈ deisel
ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΡΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΡΠΎ, ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π½Π΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅.
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½Π° Π½Π΅ ΡΠ΄Π΅Π»Π°Π»Π° Π±Ρ.
@sgrif ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ deisel ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ derive? ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΊΠ°ΠΊ serde ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ (Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΡΡ ΠΌΠ°ΠΊΡΠΎΡ ΠΎΠ± ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΏΡΠΈΠ·Π½Π°ΠΊΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ), Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, deisel ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. ΠΠΎΠ³Π΄Π° Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ Β«ΡΠ΄Π°Π»ΠΈΡΡ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΒ», ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅, ΡΡΠΎ Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
@withoutboats 90% - ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅. ΠΡ Π½Π΅ ΡΡΠΎΠ³Π°Π΅ΠΌ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΡ ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΡΠΎΠ±Ρ Π²Π·Π»ΠΎΠΌΠ°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ bang Π² ΡΠΈΡΡΠ΅ΠΌΡ. 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 Π±ΡΠ»Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½Π°Ρ ΠΌΠ°ΠΊΡΠΎΡΠΈΡΡΠ΅ΠΌΠ° Π²Π·ΡΡΠ²Π°, ΡΡΠΎΠ±Ρ Ρ Π½Π°Ρ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ ΡΠΎΠ±Π»Π°Π·Π½Π° Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΈΠ·-Π·Π° Π΅Π΅ Π³ΡΡΠ±ΠΎΡΡΠΈ. Π― ΡΡΠ²ΡΡΠ²ΡΡ, ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΡΡ - ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎ-ΠΈΡΡΠΎΡΠΈΡ Π²Π·ΡΡΠ²Π° (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΆΠ΅ΡΡΠΊΠΎΠΉ, Π½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Π³ΠΈΠ³ΠΈΠ΅Π½ΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ Π² TokenStream, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΌ Π² ΠΌΠ°ΠΊΡΠΎΡ, ΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³ΠΈΠ³ΠΈΠ΅Π½Ρ? I Π½Π΅ Π·Π½Π°Ρ ΡΠΎΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΠΌ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠΈΠΊΠΎΠ², ΡΠ»ΡΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π΄Π΅ΡΠΈΠ²Π°ΡΠΈΡ ΡΠ°Π·ΡΠΌΠ½ΠΎΠΉ.
ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ½ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡ.
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠ΅Π»Ρ Macros 1.1 - Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ, ΡΡΠΎΠ±Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ, Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ Π·Π°ΡΡΠ°ΡΠ°ΠΌΠΈ Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±ΡΡΡΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π΄ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 2.0. ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, Π½ΡΠ½Π΅ΡΠ½ΠΈΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠΎΠ»ΠΈ.
ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΡΠ΅ΠΌ-ΡΠΎ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠΎΠ»ΠΈ, Ρ Π±ΡΠ» Π±Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΠΈΠ².
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Ρ ΠΎΡΠΈΠ±Π°ΡΡΡ, Π½ΠΎ ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΠ΅ RFC Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ Π½Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π΅. Π’ΠΎ Π΅ΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π² TokenStream
Π±ΡΠ΄ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π½ΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ API, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΌΡΡΠ°ΡΠΈΠΈ Π² Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ (ΠΈ ΡΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° Π΄Π»Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ deisel ).
Π― Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ ΠΎΡΠ½ΠΎΡΡΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄Π΅ΡΠΈΠ²Π°ΠΌ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π°Π²ΡΠ΅Π³Π΄Π°. ΠΡΠ»ΠΈ ΠΌΡ ΡΠΎΠ³Π»Π°ΡΠΈΠΌΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ macro_rules
Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, Π° Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 2.0 ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π°Π½ΠΎ Π΄ΡΡΠ³ΠΎΠΌΡ API Π΄Π΅ΡΠΈΠ²Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½, Ρ Ρ Π½ΠΈΠΌ ΠΊΠΎΠΌΡΠΎΡΡΠ½Π΅Π΅.
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ² ΠΊΠ°ΠΊ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ΅ ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ.
Π ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ Π±Π΅Π· Π²Π²ΠΎΠ΄Π° Π°ΡΡΠΈΠ±ΡΡΠ°.
@withoutboats : Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΠΈΠΌΠΏΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½ΡΠΆΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΌΠΈ.
@eddyb Π― Π·Π° ΡΠΎ, ΡΡΠΎΠ±Ρ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ ΠΌΠΎΠ³Π»ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Π½Π΅ Π·Π° ΡΠΎ, ΡΡΠΎΠ±Ρ Π΄Π΅ΡΠΈΠ²Ρ Π±ΡΠ»ΠΈ Π±Π΅Π·ΡΠ΄Π΅ΡΠΆΠ½ΡΠΌΠΈ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°ΠΌΠΈ (Π² Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅).
@erickt ΠΠ΅ΡΠ½ΠΎ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π² Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ»ΠΎ Π±Ρ, ΡΡΠΎΠ±Ρ ΡΡΠΈ Π°ΡΡΠΈΠ±ΡΡΡ Π±ΡΠ»ΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π±Π΅Π· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠ²Π΅ΡΠ°Π» Π·Π° ΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅. ΠΠΎ Π² ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π² Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ»ΠΎ Π±Ρ, ΡΡΠΎΠ±Ρ ΡΡΠΈ Π°ΡΡΠΈΠ±ΡΡΡ Π±ΡΠ»ΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π±Π΅Π· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠ²Π΅ΡΠ°Π» Π·Π° ΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅. ΠΠΎ Π² ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
Π― Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π² ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» ΡΠΏΠΈΡΠΎΠΊ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ Π½Π°ΠΌΠ΅ΡΠ΅Π²Π°Π΅ΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΠΊΠ»ΠΎΠ½ΠΈΠ» Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΎΠ²Π°Ρ?
Π― ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ Diesel Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Ρ Serde, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, #[serde(rename = "name")]
Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ #[table_name = "name"]
ΠΠΈΠ·Π΅Π»Ρ). Π£ΠΏΡΠΎΡΡΠΈΡ Π»ΠΈ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΏΡΠΎΠΏΠΈΡΠ°Π»ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΏΠΈΡΠΊΠ°?
ΠΠ΄Π½Π° ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ - Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ Π½Π° ΡΠΈΠ½ΡΠ΅ΠΊΡ: https://github.com/sfackler/rust-postgres-derive/blob/master/postgres-derive-codegen/src/lib. rs # L23 -L50
ΠΠ°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ impls ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΠ°ΡΠΊΡΡΡΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ.
Π― ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 Π² post-expansion
. ΠΠ°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ impls ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡ
ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΠ°ΡΠΊΡΡΡΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ².
ΠΡ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ / Π·Π°ΠΊΠ°Π·Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π½Π° ΡΠΎΠ±ΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ lang. ΠΡΠ»ΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠ°Π²Π΄Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ (Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π°, Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Ρ Π°ΠΊΠΎΠ² Π½Π° Π²Π΅ΡΡΠΈΠ½Π°Ρ ΠΈ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ΄Π½ΠΎ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°ΡΡ / ΠΎΡΠ»Π°Π΄ΠΈΡΡ). ΠΡΠ»ΠΎ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ, ΡΡΠΎ, Ρ ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π»Π΅Π²ΡΡ Π΄Π°Π½Π½ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ Π½Π΅ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΈΡΠ°Π»ΠΎΡΡ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΡΡΠ΅ΠΌΠΈΡΡΡΡ ΠΊ ΡΠΈΡΡΠΎΡΠ΅ ΡΠ°Π΄ΠΈ ΡΠ°ΠΌΠΎΠΉ ΡΠΈΡΡΠΎΡΡ, Π° Π½Π΅ ΠΏΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΌΠΎΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ.
Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π»ΡΡΡΠ΅, ΠΈ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΏΡΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° FCP. ΠΡ Π½Π΅ Π΄ΡΠΌΠ°Π»ΠΈ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ. Π‘ΠΊΠΎΡΠ΅Π΅, ΡΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π°ΡΡΠΈΠ±ΡΡΡ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ, ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. RFC 1755 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΡΠΎ.
ΠΡΠΎ Π·Π°Π΄Π΅ΡΠΆΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ . ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²) Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Serde Π²ΡΠΊΠΎΡΠ΅ ΡΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ. Π’Π΅, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½Ρ Π°ΡΡΠΈΠ±ΡΡΡ, Π·Π°ΠΉΠΌΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΊΠ»ΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΎΠ±ΡΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ.
cc @alexcrichton , @dtolnay , @sgrif , @erickt - ΠΌΡΡΠ»ΠΈ?
ΠΡΡΠΈΠ±ΡΡΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Ρ Serde ΠΈ Diesel, ΡΠ΅ΠΌ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅. ΠΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΡΡΠ°, Ρ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π²ΡΠ΅ ΠΌΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ Serde, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ. Π Diesel Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΈ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ diesel_codegen, ΠΊΠ°ΠΊΠ°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎ ΡΡΡΡΠΊΡΡΡΠΎΠΉ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π·Π°ΠΏΡΠ΅Ρ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π² custom derive ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ΅ ΡΠΏΡΠΎΡΠ°Π΅Ρ, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½Π½ΡΡ ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΡΠ»ΡΡΠ°Π΅Π². ΠΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π±ΡΡΡΡΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΡΡΠ΅, ΡΡΠΎ ΡΠΎΠΆΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΌ.
ΠΡΠ»ΠΎ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ, ΡΡΠΎ, Ρ ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π»Π΅Π²ΡΡ Π΄Π°Π½Π½ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ Π½Π΅ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ.
ΠΡΠΎ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π²Π°Ρ Π½Π΅Ρ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΠ΅ΡΡ.
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΅ΠΉΡΠΎΠ², ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΡ ΠΊΠ°ΠΊ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΠ½ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΌΠ°ΠΊΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΡΡΠΊΡΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½.
ΠΠΎΠΉ ΡΡΠΈΠΊ asn1 ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΡΠ²ΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ.
ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ rfc Π½Π° Π΄Π²Π΅ ΡΠ°ΡΡΠΈ?
ΠΠ°ΠΊΡΠΎΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ°ΠΆΡΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΠΈΡ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ rfc Π½Π° Π΄Π²Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡΡΠ΅Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π΄Π»Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ (Ρ. Π. ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΡΠΈΠΊ). Π― ΠΌΠΎΠ³Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°. ΠΠ΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΡΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΠΈΠΌΡ ΡΡΠΈΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΡΠ°.
ΠΡΡΡ Π»ΠΈ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ name!
? ΠΡΠΎΡΡΡΠ΅ TokenStream
in, TokenStream
out Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π±Ρ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ Π² Π±ΠΎΡΡΠ±Π΅ Ρ Π²ΡΠ΅Π΄ΠΈΡΠ΅Π»ΡΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ
Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 30 ΡΠ΅ΠΊΡΠ½Π΄.
@dragostis ΠΡΠΎΡΠΈΡΠΈΡΡΡ ΡΠ΅Π·ΡΠΌΠ΅
ΠΠ·Π²Π»Π΅ΠΊΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΡΠ΅Π½Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½Π΅ΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΈΡΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ° Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΈΠΌΠ΅ΡΡ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ API. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ΅ΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½Ρ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ Β«ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΈΡΡΠ΅ΠΌΡΒ». Π ΡΠ΅Π»ΠΎΠΌ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΡΠΉ ΡΠ°Π³ ΠΊ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌ Β«ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌ 2.0Β».
ΠΠ»ΠΈ, Π³ΠΎΠ²ΠΎΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΈΡΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ
ΠΎΡΠΎΡΠΎ, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°ΠΊΡΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π»ΠΈ. Π’Π°ΠΊΠΈΠ΅ ΡΡΠΈΠΊΠΈ, ΠΊΠ°ΠΊ serde
ΠΈ diesel
ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±Π΅Π· Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ - ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ ΠΈ ΠΎΠΏΡΡΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½Π°Ρ ΠΌΠ°ΠΊΡΠΎΡΠΈΡΡΠ΅ΠΌΠ°. Π―ΡΠΈΠΊΠΈ syn
ΠΈ quote
ΡΠ²Π»ΡΡΡΡΡ Ρ
ΠΎΡΠΎΡΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ.
@keeperofdakeys ΠΠ³Π°, ΠΏΠΎΠ½ΡΠ». Π― Π½Π΅ ΠΏΡΠΎΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ 2.0, ΠΌΠ½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π΅ΡΡΡ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π±ΡΠ΅ΠΌΡ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°, ΡΠΊΠ°ΠΆΠ΅ΠΌ, proc_macro
ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². ΠΡΠΈΠΌΠ΅Ρ Π² pest Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π΄Π»Ρ struct
ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π΅Π³ΠΎ ΠΈΠ· ΡΠ°ΠΌΠΎΠ³ΠΎ struct
, Π° ΠΈΠ· ΠΏΡΠΎΡΡΠΎΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ΅ΠΆΠ΄Ρ {}
. Π₯ΠΎΡΡ, Π½Π°Π΄Π΅ΡΡΡ, Ρ Π½Π΅ Π²ΡΠΊΠ°ΠΏΡΠ²Π°Ρ ΠΌΠ΅ΡΡΠ²ΡΠ΅ Π΄ΠΈΡΠΊΡΡΡΠΈΠΈ!
@nrc
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΈΡΠ°Π»ΠΎΡΡ, ΡΡΠΎ ΠΌΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΡΠ΅ΠΌΠΈΠΌΡΡ ΠΊ ΡΠΈΡΡΠΎΡΠ΅ ΡΠ°Π΄ΠΈ ΡΠ°ΠΌΠΎΠΉ ΡΠΈΡΡΠΎΡΡ, Π° Π½Π΅ ΠΏΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΌΠΎΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ.
ΠΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ: Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΆΠ΅ΡΡΠΊΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ Β«ΡΠΈΡΡΠΎΡΠ°Β» Π±ΡΠ»ΠΎ Π±Ρ Π·Π°ΡΡΡΠ΄Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ / Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ, ΠΈ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²Π°ΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΈΠ»ΡΠ½ΡΠΌ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π΄Π»Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» Π±Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ (Π² ΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, ΡΡΠΎ API Π½Π΅ Π±ΡΠ» Π±Ρ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅), Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Ρ ΠΏΠ»Π°Π½Π°ΠΌΠΈ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ Π² ΠΏΠΎΠ»ΡΠ·Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½. ΠΠ»ΠΈ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @keeperofdakeys ΠΈ Π±ΡΡΡΡΠΎ ΡΠ΅ΡΠΈΠ»Π° Π±Ρ
Π‘ ΠΌΠΎΠ΅ΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ, Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π΅ ΠΌΠ΅ΡΠ°Π»Π° ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡ 1.1 Π΄Π»Ρ Serde ΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Β«Π΄Π΅-ΡΠ°ΠΊΡΠΎΒ» ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ (Ρ.Π΅. Π½Π΅ Π»ΠΎΠΌΠ°ΡΡ).
@sgrif
ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΡΠ΅ΠΌ-ΡΠΎ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠΎΠ»ΠΈ, Ρ Π±ΡΠ» Π±Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΠΈΠ².
Π― Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ @withoutboats ΠΈ ΡΡΠΎΡΠ½ΠΈΡΡ, ΡΡΠΎ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ API ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 ΠΎΡΡΠ°Π²Π°Π»Π°ΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡΡ 2.0. ΠΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ - ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠ°ΠΊ ΠΎ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΡ macro_rules, Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ Π½Π° ΠΌΠ΅ΡΡΠ΅.
ΠΠΎΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ DERIVE Π±ΡΠ»ΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° @jimmycuadra Β«s Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ , ΡΡΠΎ , ΡΡΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. Π― ΡΡΠΈΡΠ°Ρ (Π½ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΡΡΠ΅ ΠΌΠ΅Π½Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΠ±Π°ΡΡΡ), ΡΡΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈΠΌΠ΅Π»ΠΈ ΡΠ΅ΡΠ°ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ΄Π° Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΠ·Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΏΠ»ΠΈΠ²Π°.
Π ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½ Π½Π° 100%, ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΡΡ Ρ ΡΡΠΈΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΎ Π±Ρ ΠΎΠ±ΠΈΠ΄Π½ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ 1.1, Π½ΠΎ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΠΊΠ°ΠΆΠ΄ΡΡ Π½ΠΎΡΡ (Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ "Π΄Π΅-ΡΠ°ΠΊΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ" ΠΊΠ°ΠΆΠ΄ΡΡ Π½ΠΎΡΡ), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° Π½Π΅Ρ ΡΠ΅Π»Ρ Π±ΡΡΡΡΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 _ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ_ Π½Π° ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ Rust, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ.
ΠΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ΅Π½Ρ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ, - ΡΡΠΎ ΡΠΎ, ΠΊΠ°ΠΊ, ΠΏΠΎ Π½Π°ΡΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π² Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅, ΠΈ ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1. Π ΡΠ΅ΠΊΡΡΠ΅ΠΌ RFC Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ Π²Π½Π΅ΡΠ΅Π½Π½ΡΠ΅ Π² Π±Π΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² Π²Π΅ΡΡ
Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΡΡΠΈΠΊΠ°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° Π² Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. ΠΡΠΎ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ ΠΌΠ΅Π½Ρ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΡΠ³ΠΎΠ½ΠΎΠΌΠΈΡΠ½ΠΎΡΡΠΈ ΠΈ "Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ" ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ, Ρ
ΠΎΡΡ Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΡΠΎ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ RFC (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ ΡΠ²ΡΠΆΡΡΡ Ρ ΡΡΠΈΠΊΠΎΠΌ serde
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π½Π΅ΡΡΠΈ Π² Π±Π΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΡΠΈΠ±ΡΡΡ serde ).
Π ΡΠ΅Π»ΠΎΠΌ, Ρ Π»ΠΈΡΠ½ΠΎ Π±ΡΠ» Π±Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΠ²ΡΠΈΡΡ Π²ΠΏΠ΅ΡΠ΅Π΄ Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 ΠΊΠ°ΠΊ Π΅ΡΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ. ΠΠ»ΠΈ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Ρ ΠΎΡΡΡ Π΅Π΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ.
Π― ΡΠΊΠ»ΠΎΠ½Π΅Π½ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ Ρ rustc-serialize Π½Π° serde, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° serde ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ 1.1 Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°. Π ΡΠ΅Π»ΠΎΠΌ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠΈΡΡΠ½ΡΠΌ, ΠΈ Π² ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ @sfackler , Π°ΡΡΠΈΠ±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ Π΄Π»Ρ Serde , ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ @nrc Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΡ Π·Π²ΡΡΠ°ΡΡ. ΠΠΎΡΡΠΈ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±Π΅Π· Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Ρ rustc-serialize. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΠ·Π±Π°Π²ΠΈΡΡ Π»ΡΠ΄Π΅ΠΉ ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ Π½ΠΎΡΠ°ΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, ΠΎΡΠΊΠ°Π·Π°Π²ΡΠΈΡΡ ΠΎΡ Serde Π² ΠΏΠΎΠ»ΡΠ·Ρ rustc-serialize.
Π£ ΠΌΠ΅Π½Ρ ΠΏΠΎΠΊΠ° Π½Π΅Ρ ΠΌΠ½Π΅Π½ΠΈΡ ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΠ°Π³Π΅, Π½ΠΎ Ρ Π·Π½Π°Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΡ Π±Π΅Π· Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Ρ Π±Ρ Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°Π» ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². Π― ΠΏΠΎΠ»Π°Π³Π°Ρ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π»ΡΠ΄ΠΈ Π½Π΅ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ ΡΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ ΡΠ±ΠΎΡΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ:
#[serde(skip_serializing)]
.. Π²ΠΌΠ΅ΡΡΠΎ:
/// <!-- serde(skip_serializing) -->
@tomaka
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΅ΠΉΡΠΎΠ², ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΡ ΠΊΠ°ΠΊ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΠ½ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΌΠ°ΠΊΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΡΡΠΊΡΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½.
Π§ΡΠΎ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΎ ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ? Π― ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ ΠΊΠ°ΡΡΠΈΠ½Π° ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ.
Π₯ΠΎΡΡ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ ΠΎΠ΄Π½Ρ Π²Π΅ΡΡ:
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² - Π³Π»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ Π»ΡΠ΄ΠΈ Π΄Π΅Π»Π°ΡΡ Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ?
Π― Π·Π½Π°Ρ, ΡΡΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ
Π°ΠΊΠΎΠ² Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ foo!
Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠΈΠΏΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, @sgrif ΡΠΏΠΎΠΌΡΠ½ΡΠ» ΡΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π΄ΠΈΠ·Π΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠΏΠ»ΠΈΠ²Π΅, Ρ Π΄ΡΠΌΠ°Ρ, @tomaka ΡΠΎΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΠ» ΠΎΠ΄ΠΈΠ½) - Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ
ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠΏΡΠ°ΡΠΈΠ²Π°Ρ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ: Ρ Π²ΠΈΠΆΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ Π΄Π»Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ° Π±ΡΠ΄ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΈ Π³ΡΡΠ·Π½ΠΎΠ³ΠΎ API Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² Π±Π΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠ°ΠΆΠ΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠΌ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΈ ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΠΊΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (ΠΈ, ΡΠ΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ... ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΠ΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ), ΡΠΎ ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ Π±Ρ , Π²Π΅ΡΠΎΡΡΠ½ΠΎ , Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠ·ΠΈΡΡ Π½Π° Β«ΠΈΠ· Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ Π±Π°ΠΉΡΠΎΠ²Β» API Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π² ΠΏΠΎΠ»ΡΠ·Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° , ΡΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ DERIVE ( Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ , ΡΡΠΎ Π»ΡΠ΄ΠΈ Π±ΡΠ΄ΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ Π±Π°ΠΉΡΡ, Π²Π΅ΡΠ½ΠΎ? Π° ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠΊΠ΅Π½ΠΎΠ²?) ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄Π°ΡΡ API Π±ΠΎΠ»Π΅Π΅ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΠ΅ ΠΈΠΌΡ =)
@nikomatsakis ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ - Π½Π΅ ΡΠ΄Π°Π»ΡΡΡ, Π° ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ. Π― Π½Π΅ ΠΎΡΠΎΠ·Π½Π°Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΈΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌΡ Π°ΡΡΠΈΠ±ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ Π²Π°ΡΠΈΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π½ΡΠΆΠ΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΈΡΡΠΈΠ½Π½ΡΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ, Π° Π½Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ.
ΠΠ°, Ρ ΡΠ°Π·ΡΡΠ²Π°ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌΠΈ, Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΡΠ²Π½ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ:
EDIT: Π½ΠΎ Π±Π΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ
Π― ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ @nrc ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΡΠΎ-ΡΠΎ
ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±Π»ΡΠ» ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 1.1 Π² rust-cpp, Π±ΡΠ»ΠΈ Π±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ impls ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ.
Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ Π²Π°ΠΆΠ½Π°, Π½ΠΎ Π² ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Ρ Π±Ρ ΡΡΡΡΠΎΠΈΠ»Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠΎΠΉ ΡΠΎΡΠΊΠΈ.
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΎΡΠΌΡ Ρ Π°ΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ @sgrif ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π² deisel, ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ_ ΡΠ΄Π΅Π»Π°ΡΡ Π² ΠΌΠΈΡΠ΅, Π³Π΄Π΅ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°ΠΌΡ ΡΡΡΡΠΊΡΡΡΡ, Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ.
Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ @sfackler , ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΡΠ»ΠΎΠΆΠΈΡΡ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ. ΠΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΈΠΌ ΠΊΡΠ°ΡΠΈΠ²ΡΠΌ ΠΈΠ»ΠΈ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ, Π½ΠΎ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
#[derive(Debug, Clone, Serialize(field("bar", rename = "baz")))]
pub struct Foo {
pub bar: String,
}
ΠΠΎΠ·Π΄Π½Π΅Π΅ ΡΡΠ° ΡΠΎΡΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π½ΠΈΡ .
Π serde, ΠΈ ΠΌΠΎΠΉ ΡΡΠΈΠΊ ΡΡΠ΅Π±ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² field / option. ΠΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ΄ΡΠ°ΠΆΠ°ΡΡ ΡΡΠΎΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π°, Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ Π°ΡΡΠΈΠ±ΡΡΡ.
ΠΠ°ΠΊΠΎΠ΅ Π±Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΡ Π½ΠΈ ΠΏΡΠΈΠ½ΡΠ»ΠΈ, ΡΡΠΎΠ±Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ, Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° / Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ Π½Π° ΠΌΠ°ΠΊΡΠΎΡΡ 2.0, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ api (ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π°Π²ΡΠΎΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π±ΡΠ΄ΡΡ). ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°Π·ΡΠΌΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΡΠΏΠΈΡΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈ, ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΎΠ½ΠΈ ΡΠ΄Π°Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ _Π²ΡΠ΅_ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π£ Serde, Diesel ΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΡΡΠΈΠΊΠ° Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ².
Π‘ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΌΠ½Π΅ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΡΠΈΠΊ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π΅Π»Π°Π» @dtolnay, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ°ΠΊΡΠΎΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΡΠ°Π»ΡΠ½ΡΡ .
FWIW Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΡΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² - ΡΠ΄Π΅Π»Π°ΡΡ HIR Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ½ΠΊΠΈΠΌ - ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΈΡ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅.
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² - Π³Π»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ Π»ΡΠ΄ΠΈ Π΄Π΅Π»Π°ΡΡ Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ?
Π― Π·Π½Π°Ρ, ΡΡΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΈΡΡΠΎΡΡΠ΅ΠΉ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ foo! ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠΈΠΏΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, @sgrif ΡΠΏΠΎΠΌΡΠ½ΡΠ» ΡΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π΄ΠΈΠ·Π΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠΏΠ»ΠΈΠ²Π΅, Ρ Π΄ΡΠΌΠ°Ρ, @tomaka ΡΠΎΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΠ» ΠΎΠ΄ΠΈΠ½) - Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ?
Π― ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΠ΅ΠΌ ΡΠ°ΠΊΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ.
Π― ΡΠ°ΡΡΠΎ Π²ΠΎΡΡΡ Π½Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π² ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΌ Rust, ΠΏΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π²ΠΈΠ΄Π΅Π» ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΈΡ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Ρ. ΠΠΎ Ρ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ, ΡΡΠΎ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ.
ΠΠΎΡ ΠΎΠΆΠ΅, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ Π½ΠΎΡΠ½ΠΎΠΌ Π½ΠΎΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» ΡΠ΅Π³ΡΠ΅ΡΡ. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ
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;
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΎΡ bang Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Queryable
Π° #[macro_use] extern crate diesel_codegen;
ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ Queryable
, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΎΡ bang (ΠΊΡΠΎΠΌΠ΅ - #[macro_use]
ΡΠΈΡ
Π°Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½Π°, Π½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΈΠ· Π²Π½Π΅ΡΠ½ΠΈΡ
ΡΡΠΈΠΊΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ use
Π²ΠΌΠ΅ΡΡΠΎ #[macro_use]
, ΡΠΊΠΎΡΠΎ!).
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠ·Π²Π°Π½Π° Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ°ΠΊΡΠΎΡΠ° Bang Queryable!();
Π² ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ Π² Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· diesel_codegen
Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ° Bang ΠΈΠ· diesel
.
@jseyfried Π ΡΠ΅ΠΌ ΠΏΡΠΈΡΠΈΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠ΅Ρ Β«Π²ΠΈΠ΄ΠΎΠ²Β» ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²? ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ Π²Π·ΡΡΠ²Π° ΠΊΠ°ΠΊ Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, ΠΊΠ°ΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΠΏΡ ΠΊΠ°ΠΊ Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ (Π΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ - Π²ΡΠ²ΠΎΠ΄ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²).
@withoutboats Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ, Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ Π²ΠΈΠ΄Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠ°Π·Π½ΡΠ΅ Π²ΠΈΠ΄Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΡΠΈΠΏΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ). ΠΠ°Π»ΠΈΡΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΡΠ²ΡΠ·Π°Π½ΠΎ ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ, ΠΈ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠ΅ΠΌ ΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π»ΡΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½? ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΎΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠΌ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠΈΠΏΠΎΠ².
Π Π΅Π°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ use
Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠΈΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Ρ Π±Ρ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π», ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠΌΠΏΠΎΡΡ ΡΡΠΈΠΊΠ° ProcMacro ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² - Ρ Π΄ΡΠΌΠ°Π», ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ derive_
?
ΠΠ°Π»ΠΈΡΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΡΠ²ΡΠ·Π°Π½ΠΎ ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ, ΠΈ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠ΅ΠΌ ΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π»ΡΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½?
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΡΠΌΠΈ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ. consts ΠΈ fns Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π’ΠΈΠΏΡ ΠΈ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΈΠ·-Π·Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ².
ΠΡΠ΅ ΡΡΠΈ ΡΡΠΈ Π²ΠΈΠ΄Π° ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. ΠΠ»Ρ ΠΌΠ΅Π½Ρ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ.
Π₯ΠΎΡΡ Π΅ΡΡΡ Π·Π°ΡΡΠ°ΡΡ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ _use_ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π΅ΡΠ½ΡΡΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π·Π°ΡΡΠ°ΡΠ°ΠΌΠΈ Π·Π° ΡΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΡ ΠΈΠΌΠ΅Π½. ΠΠΎΠ³Π΄Π° Ρ Π΄ΡΠΌΠ°Ρ ΠΎ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΡΠΌΠ°Ρ ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΡ Π±Ρ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ _Π²ΡΠ΅_ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ? ΠΡΡΠ°ΡΡΡ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΌΡΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
ΠΡΠ»ΠΈ ΠΏΠΎΡΠ°Π·ΠΌΡΡΠ»ΠΈΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅, Ρ Π±Ρ ΡΠΎΠ³Π»Π°ΡΠΈΠ»ΡΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ - Ρ Π΄Π°ΠΆΠ΅ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ Π΅Π³ΠΎ; Π²Π΅ΡΡ ΡΠ°Π±Π»ΠΎΠ½ Β«Π½Π°ΡΡΠΎΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡΒ» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ±ΠΈΠ²Π°Π΅Ρ Ρ ΡΠΎΠ»ΠΊΡ ΠΠΠ - Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Rust ΠΏΡΠΈΠ½ΡΠ» Π΄Π»Ρ Π½Π΅ΠΌΠ°ΠΊΡΠΎΡΡΠ΅ΠΌΠΎΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΎ-ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.
ΠΠ°ΡΡΠΎΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ use Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ².
ΠΡ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 2.0. ΠΠΎΠ΄Π΅Π»Ρ Π·Π΄Π΅ΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ.
Π― Π΄ΡΠΌΠ°Π», ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡ derive Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ derive_?
ΠΡΠΎ Π±ΡΠ»Π° ΡΡΠ°ΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π°, Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡ 1.1 Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ.
Π₯ΠΎΡΡ Π΅ΡΡΡ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π΅ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ Π² ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ° Π½Π΅ΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ»Π°ΡΠΈΡΡ - Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΠΆΠΈΠ·Π½Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ (Ρ ΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΠΎΡΠΈΡΡ). Π― ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π²Π°ΠΆΠ½Π° Π½Π΅ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (Ρ ΠΎΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ Π²Π°ΠΆΠ½ΠΎ), ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ·ΡΠΊΠΎΠ²Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ - ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΡΡΠΆΠ΄Π°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Rust, ΠΈ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ Π³ΠΈΠ³ΠΈΠ΅Π½Π° ΠΈ Π·Π°ΡΠ΅Π½Π΅Π½ΠΈΠ΅, Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ.
ΠΡ Π±Ρ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ? ΠΡΡΠ°ΡΡΡ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΌΡΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
Π― Π±Ρ Π½Π΅ ΡΡΠ°Π» Π·Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ - Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠΈΠΏΠΎΠ², Π½ΠΎ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΡΠ·ΡΠΊ Ρ Π΅Π΄ΠΈΠ½ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½ Π±ΡΠ» Π±Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΡΠ½Π΅Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡ .
Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Rust ΠΏΡΠΈΠ½ΡΠ» Π΄Π»Ρ Π½Π΅ΠΌΠ°ΠΊΡΠΎ-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
ΠΠΎΠ½ΡΡΠ°ΠΏΡΠ½ΠΊΡ: ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΠΏΠΎΠ»Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Ρ ΠΎΡΡ ΠΌΠ΅ΡΡΠ°, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, (Ρ Π΄ΡΠΌΠ°Ρ) ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΌΠ΅ΡΡ, Π³Π΄Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
@keeperofdakeys
Π Π΅Π°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
use
Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ².
Π‘ΠΊΠΎΡΠΎ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ use
ΠΈΠ· extern crate
s Π·Π° Π²ΠΎΡΠΎΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ (~ 1 Π½Π΅Π΄Π΅Π»Ρ), cf https://github.com/rust-lang/rfcs/pull/1561 ΠΈ β35896. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ use
ing ΠΈΠ· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ.
Π― Π΄ΡΠΌΠ°Π», ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ
derive_
ΠΡΠΎ Π±ΡΠ»ΠΎ Π²Π΅ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠ°ΡΡΡ
ΠΎΠ±ΡΡΠ°Π΅Π². Π ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ
1.1 Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ #[derive(Serialize)]
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ) ΠΎΠΆΠΈΠ΄Π°Π΅Ρ, ΡΡΠΎ Serialize
ΡΠ°Π·ΡΠ΅ΡΠΈΡΡΡ Π² ΠΌΠ°ΠΊΡΠΎΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
.
@withoutboats
Π ΡΠ΅ΠΌ ΠΏΡΠΈΡΠΈΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠ΅Ρ Β«Π²ΠΈΠ΄ΠΎΠ²Β» ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²?
- ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ: ΠΌΠ°ΠΊΡΠΎΡΡ bang ΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΡΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½.
- ΠΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ: Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ. ΠΡΠ»ΠΈ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΌΡ Π·Π°ΡΡΡΡΠ½Π΅ΠΌ Ρ Π½ΠΈΠΌΠΈ Π½Π°Π²ΡΠ΅Π³Π΄Π°.
- ΠΡΠΎΡΡΠΎΡΠ°: Π΅ΡΠ»ΠΈ Π±Ρ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Β«Π²ΠΈΠ΄Π°Β» ΠΌΠ°ΠΊΡΠΎΡΠ° Π±ΡΠ»ΠΎ ΡΠ²ΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, Ρ Π½Π°Ρ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ https://github.com/rust-lang/rfcs/pull/1561 ΠΏΡΠΈΠ·Π΅ΠΌΠ»ΠΈΡΡΡ,
use foo::bar;
ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ _ΠΏΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²_ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌbar
(Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΈΠΏ, ΠΌΠ°ΠΊΡΠΎΡ Π²Π·ΡΡΠ²Π° ΠΈ Ρ. Π΄.), ΠΈ Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡ bang, Π½ΠΎ Π½Π΅ ΠΌΠ°ΠΊΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ, ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊbaz
.
ΠΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ: Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ. ΠΡΠ»ΠΈ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΌΡ Π·Π°ΡΡΡΡΠ½Π΅ΠΌ Ρ Π½ΠΈΠΌΠΈ Π½Π°Π²ΡΠ΅Π³Π΄Π°.
ΠΡΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ 1.1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ. : +1:
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠ΅Ρ
, Ρ ΠΊΠΎΠ³ΠΎ Π±ΡΠ» ΠΌΠ°ΠΊΡΠΎΡ macro_rules Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, PartialEq!
?
ΠΠ΅Ρ, PartialEq
ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ.
#[derive(Foo)]
ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Foo
Β«Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉΒ» ( PartialEq
, Copy
ΠΈ Ρ. Π.), ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΈΡΠΊΠ°ΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Foo
Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠ°. ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΆΠ΅ΡΡΠΊΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ derive
.
ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ»ΠΎΠΌΠ°ΡΡ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ Π²Ρ ΠΎΠΏΠΈΡΠ°Π»ΠΈ, Π΅ΡΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠ΅ΡΠΈΠΌ ΡΠ΄Π΅Π»Π°ΡΡ PartialEq
Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ Π² ΠΏΡΠ΅Π»ΡΠ΄ΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Ρ
ΠΎΡΠΎΡΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΉΡΠ°Ρ.
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² (ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π½Π°Π΄ ΠΌΠΎΠ΄Π΅Π»ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ, Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΡΠ°ΡΠ°ΡΡ):
MultiItemModifier
. ΠΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ 2.0 Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ΅ΡΡΡ, ΠΈ ΡΡΠ° ΡΠ΅ΡΡΠ° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ°. ΠΠ½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΡ ΡΠ΅ΡΡΡ. Π₯ΠΎΡΡ ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠΈ, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°Ρ
Π°ΡΠ°.CustomDerive
ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΎΡΠ° 1.1, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π°Π²ΡΠΎΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π½ΠΈΠΊΠΎΠ³Π΄Π° ΡΡΠΎΠ³ΠΎ Π½Π΅ Π²ΠΈΠ΄ΡΡ. ΠΠΎ Ρ Π½ΠΈΡ
Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊ Π½Π°ΠΏΡΡΠΌΡΡ, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ (Ρ ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡ Π² impl, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΡΡΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ).declare_attributes
ΠΊ CustomDerive
ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Vec<String>
. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΡΡΠΎΠΉ vec.declare_attributes
ΠΈ ΡΡΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ.declare_attributes
, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΏΡΡΠΈ Π΄Π»Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ declare_attributes
Π²Π΅ΡΠ½ΡΠ» vec!["foo::bar"]
, ΡΠΎ #[foo::bar::baz]
ΠΈ #[foo::bar::qux]
Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ.ΠΡΡΠ»ΠΈ? ΠΠΎΠΏΠΈΡ @alexcrichton @jseyfried @dtolnay @sgrif @erickt @ rust-lang / lang
@nrc, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π»ΠΈ ΡΡΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡΡ _used_, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ #[cfg(..)]
- ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ? Π ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ?
@nrc, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Ρ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΠ½Π° ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΡΠΈ ΡΡΠΎΠΌ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΡΡΡ ΠΊ ΡΠΎΠΌΡ, Π±ΡΠ΄ΡΡ Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π³Π΄Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ ΡΠ΅ΡΡ?
@nrc ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π² Π°ΡΡΠΈΠ±ΡΡΠ΅, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, #[proc_macro_derive(Serialize, uses_attrs(serde_foo, serde_bar))]
ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅.
@ colin-kiegel Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, Ρ ΠΎΡΡ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ cfgs Π΄ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠ° (ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, Π½ΠΎ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅).
@alexcrichton
ΠΡΠΈ ΡΡΠΎΠΌ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΡΡΡ ΠΊ ΡΠΎΠΌΡ, Π±ΡΠ΄ΡΡ Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π³Π΄Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ ΡΠ΅ΡΡ?
Π₯ΠΌ, Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΏΠΎΠ»Π°Π³Π°Ρ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² 2.0.
@eddyb ΠΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ, ΠΈ Π΅Π΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΡΠΎΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ Π² ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅. ΠΠΎΡ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ ΠΎΠ±ΡΠΈΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π·Π°Ρ ΠΎΡΠΈΠΌ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΠ΅ΠΉ Π² Π°ΡΡΠΈΠ±ΡΡ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Ρ ΠΎΡΠΎΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ Π½Π΅ ΡΠΎ, Ρ ΡΠ΅ΠΌ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π·Π°ΡΡΡΡΡΡ Π½Π°Π²ΡΠ΅Π³Π΄Π° . Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, Π»Π΅Π³ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΈ ΡΡΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠ»ΠΎΡ ΠΈΠΌ Π·Π°Π½ΡΡΠΈΠ΅ΠΌ, ΡΠ°ΠΊ ΡΡΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠ΅.
ΠΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ Π² Π»ΠΎΠ²ΡΡΠΊΡ - Ρ Π±ΡΠ» Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΡΠ°Π½Ρ, Π° ΠΏΠΎΡΠΎΠΌ Π·Π°Π±ΠΎΠ»Π΅Π». Π― Ρ
ΠΎΡΠ΅Π» Π±Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ https://github.com/rust-lang/rust/pull/37198 , ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π²ΠΈΠ΄ΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π΅ΡΡΡ ΡΠΌΡΡΠ» Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. Π― Π±Ρ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π», ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΊΠ°ΠΊ derive_Foo
ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠΈΠΏΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΈΠΌΡ Π΄Π°ΠΆΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, #[cfg]
ΠΈ cfg!
).
Π― ΡΠ°ΠΊΠΆΠ΅ Π½Π°Ρ ΠΎΠΆΡ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΡΠΌ. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡΡ, Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΡ ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅, ΡΠ΅Π³ΠΎ Π½Π΅Ρ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Β«ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅Β» ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Rust ΠΊΠ°ΠΊ ΡΠ·ΡΠΊΠ°.
ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ ΠΊΠΎΠ½Π΅Ρ ΡΠ²Π΅ΡΠ°. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π²Π΅Π΄Π΅Π½Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π±Π΅Π· ΠΎΡΠΎΠ±ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
@sgrif @ https://github.com/rust-lang/rust/issues/35900#issuecomment -256247659.
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ Π²ΠΈΠ΄ΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π΅ΡΡΡ ΡΠΌΡΡΠ» Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½.
Π§ΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΡΡΠ½ΠΎ, ΠΌΠ°ΠΊΡΠΎΡΡ Bang ΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π²ΡΠ΅Π³Π΄Π° Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½; # 37198 ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΈΠΌΡ Π΄Π°ΠΆΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
#[cfg]
ΠΈcfg!
)
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ cfg
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° bang ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ²Π° Π°ΡΡΠΈΠ±ΡΡΠ° (Ρ
ΠΎΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ°ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΈΠ»ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΡΡΠΎ Π² ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ
2.0).
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΡΠΊΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ΅ Π΄Π²ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² (Ρ Π±ΡΠ΄Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ).
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π²Π΅Π΄Π΅Π½Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ Π½Π°ΡΡΡΠ°Ρ
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ (ΠΏΠΎΠΏΡΠ°Π²ΡΡΠ΅ ΠΌΠ΅Π½Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΠ±Π°ΡΡΡ). ΠΡΠΎ ΠΌΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΡΠ΅Π³ΠΎΠ΄Π½Ρ - ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΎΡΡ 1.1 Π±ΡΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Bang / attribute ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π±ΡΠ΄ΡΡ ΡΠ΅Π΄ΠΊΠΈΠΌΠΈ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ°ΠΊΡΠΎΡΡ Bang / attribute ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΈΡΡΡΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅, Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ - Π² Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΡΠΈ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠΈ ΡΡΠΈΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½.
ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ° (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;
.ΠΠ΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΏΠΈΠ½Π³ΠΎΠ²Π°ΡΡ ΠΌΠ΅Π½Ρ Π² IRC, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ - Ρ Π±ΡΠ΄Ρ ΡΠ°Π΄ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΈΠ°Ρ.
@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 ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Ρ
ΠΎΡΠΎΡΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ - ΠΏΠΎΠΊΠ° ΠΌΡ Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ _already_.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΠ·-Π·Π° Π±ΠΎΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΡ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΏΡΠΈΠ½ΠΎΡΠΈΡ Π½Π°ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ / ΡΠΈΠΏ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ Π±ΠΎΠ»Π΅Π²ΡΡ ΡΠΎΡΠ΅ΠΊ Π·Π΄Π΅ΡΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ:
use foo::bar
ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ bar
ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ (ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ) ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ bar::baz
;ΠΠΎ Π² Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ, Ρ ΡΠ΅Ρ ΠΏΠΎΡ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΈ ΠΌΠΎΡΡ, Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Β«custom deriveΒ», ΠΆΠΈΠ²ΡΡΠ΅Π³ΠΎ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΡΠΎΠ±ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ derive_
ΠΊ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ
ΠΏΡΠ΅Π²Π΄ΠΎ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Ρ
ΠΎΡΠ΅Π»ΠΈ Π²Π½Π΅ΡΡΠΈ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
@keeperofdakeys Π Π°Π·Π²Π΅ ΡΡΠΎ Π½Π΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ ΡΠΎΠΌΡ, ΡΡΠΎ Π°Π²ΡΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
ΡΠ΅ΡΠ°ΡΡ Π½Π°Π·Π²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ derive_*
? Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° derive_*
ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΡΠΎΠ΄Π»ΠΈΠ²Ρ Π΄Π»Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
@nikomatsakis
ΠΠΎ Π² Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ, Ρ ΡΠ΅Ρ ΠΏΠΎΡ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΈ ΠΌΠΎΡΡ, Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Β«custom deriveΒ», ΠΆΠΈΠ²ΡΡΠ΅Π³ΠΎ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΡΠΎΠ±ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, Π½ΠΎ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° I
ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ S
ΡΡΠΎ Π΄ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ I
Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² S
(cf https: // github. com / rust-lang / rfcs / pull / 1560 # issuecomment-209119266). ΠΡΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ ΡΠ°ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ DFS Π³ΡΠ°ΡΠ° ΠΈΠΌΠΏΠΎΡΡΠ° Π³Π»ΠΎΠ±ΡΡΠ° (Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Π΅ΡΡΠΈΠ½Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, Π° ΡΠ΅Π±ΡΠ° - ΠΈΠΌΠΏΠΎΡΡΠ°ΠΌΠΈ Π³Π»ΠΎΠ±ΡΡΠΎΠ²) Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ (ΡΠΌ. Https://github.com/rust-lang/rfcs/pull/1560#issuecomment-209119266) Π·Π° ΡΡΠ΅Ρ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ².
Π― ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠ» ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² # 37198, ΡΡΠΎΠ±Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΡΡΠ°Π²ΠΈΡΡ Π½Π°ΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΎΡΠΊΡΡΡΡΠΌΠΈ ΠΈ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Ρ Π½Π΅ Π΄ΡΠΌΠ°Π», ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΡΠ»ΠΈ Π»ΡΠ΄ΠΈ Ρ ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, ΠΈ @ rust-lang / lang Π½Π΅ ΠΏΡΠΎΡΠΈΠ² ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π½Π°Π²ΡΠ΅Π³Π΄Π°, Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π²ΠΎΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
@nikomatsakis
ΠΡΠΌΠ°Ρ, Π²Π°ΡΠ° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Ρ ΠΎΡΡ ΠΈ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎ. ΠΠΈΡΠ½ΠΎ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΡΠ°Π½Π½ΠΎΡΡΡ Π½Π΅ ΠΈΠ³ΡΠ°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠΎΠ»ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, ΠΌΠ΅Π½Ρ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ), Π½ΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
@alexcrichton, ΠΊΠ°ΠΊ Ρ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΏΠΈΡΠ°Π» ΡΠ°Π½ΡΡΠ΅, Ρ ΡΠ°Π΄ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ (Π΅ΡΠ»ΠΈ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ) - ΠΈ ΡΠΎΠ³Π΄Π° ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΎΠΏΠΈΡΠ°Π», ΠΈΠ»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»ΡΡΡΠ΅. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΊ fn
.
ΠΠ½Π΅ ΡΡΠ°Π»ΠΎ Π»ΡΠ±ΠΎΠΏΡΡΠ½ΠΎ, ΠΈ Ρ Π½Π°ΡΠ°Π» Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠΉ ΠΈΠ΄Π΅ΠΈ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°ΡΡΠΈΠ±ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ proc_macro Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅).
Π― ΡΠ΄Π°Π»ΠΈΠ» ΡΠ΅Π³ FCP, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ, ΡΡΠΎ ΠΌΡ Π΅ΡΠ΅ _quite_ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ ΡΠΎΡΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ. Π― ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΏΠΎΠ΄ΡΡΠΎΠΆΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° ΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΠΌ Π²ΡΠ΅ Π΅ΡΠ΅ Π½ΡΠΆΠ½Ρ ΡΠ²Π΅ΡΠ΄ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ / ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°:
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ:
#[proc_macro]
Π±Π΅Π»ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΡΠΊΠ°Π·Π°ΡΡ rustc ΡΡΠΈΡΠ°ΡΡ ΠΈΡ
"ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ" ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ.ΠΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π°:
#[derive(Foo)]
vs foo!
) ΡΠΆΠ΅ ΡΠ»ΡΠΆΠ°Ρ ΡΠ΅Π»ΠΈuse foo::Bar
Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ ΠΏΡΡΠ°Π½ΠΈΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΠΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠΈΠ²:
#[cfg()]
vs cfg!()
ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ (Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ
Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ, ΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΊΠ°Π·Π°Π² ΠΌΠ°ΠΊΡΠΎΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ )ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ:
ΠΡΡΡ Π»ΠΈ Π΅ΡΠ΅ ΠΎΡΠΊΡΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ?
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΡΡΠ°ΡΠΈΠΈ:
ΠΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
Ρ ΡΠΈΠΏΠΎΠΌ TokenStream -> TokenStream
, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ
Item -> TokenStream
, Π³Π΄Π΅ Item
- Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Π²ΡΠ΅Π³ΠΎ Π΄Π²ΡΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ:
item.tokens()
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ TokenStream
, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, ΠΈitem.use_attrs(name)
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠ΅ΡΠΈΡ Π²ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅.ΠΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠΉ TokenStream
Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ impl
s.
Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ API Item
Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΠΎ ΠΏΠΎΠ»ΡΠΌ / Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°) ΠΈΠ»ΠΈ API ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΎΠΌΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² syntax_ext::deriving::generic
.
Π― Π±ΡΠ» Π±Ρ ΡΠ°Π΄ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈΠ· Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π² #[proc_macro_derive]
(Ρ.Π΅. Π²ΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²ΠΎΠΏΡΠΎΡΠ° 1 Π² https://github.com/rust-lang/rust/issues/35900#issuecomment-258315395) ΠΈΠ»ΠΈ ΠΌΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Item -> TokenStream
.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΆΠ΅ΡΡΠ²ΡΠ΅ΠΌ, Π΄ΠΎΠΏΡΡΠΊΠ°Ρ ΠΌΡΡΠ°ΡΠΈΡ, ΡΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ # 37563 ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ # 36218.
Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Π²ΠΈΠΆΡ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ?
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ / ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΡΡ:
#![feature(proc_macro)]
#[proc_macro_derive(Whatever)]
struct Foo {}
@eddyb Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, Π΅ΡΡΡ Π»ΠΈ Π½Π΅ΠΎΡΡΠ΅ΠΌΠ»Π΅ΠΌΠ°Ρ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° - Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ
Item -> TokenStream
Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ ΡΠ°ΡΡΠΈΡΠΈΡΡ API Item
, ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ². ΠΡΠΈ ΡΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π΅ΡΠ΅ ΡΠ°Π·, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Item
Π²ΠΌΠ΅ΡΡΠΎ TokenStream
, ΠΏΠΎΡΡΠΎΠΌΡ TokenStream
-> TokenStream
Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΌ Π±Π΅Π»ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΡΡΠ΅.
ΠΠ°ΠΌΠ΅Π½ΡΡ Π»ΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ 2.0 ΡΡΠΎΡ API? Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²Π°, Π° Item -> TokenStream
api Π½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ.
@keeperofdakeys Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ RFC:
Π ΡΠ΅Π»ΠΎΠΌ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΡΠΉ ΡΠ°Π³ ΠΊ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌ Β«ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌ 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 # issuecomment -239558657, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ: Β«ΡΠ°Π±Π»ΠΎΠ½ Π΄Π΅ΡΠ΅Π²Π° ΡΠΎΠΊΠ΅Π½ΠΎΠ² Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΎΠΉ ΠΊ ΡΡΡΠΎΠΊΠ°ΠΌ ΡΡΠ°Π» Π±Ρ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΌ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΡΡΠ°Π» ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΒ».
@eddyb
Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Π²ΠΈΠΆΡ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ?
Π§ΡΠΎ ΠΆ, Ρ ΠΌΠΎΠ³Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ΠΉ?) - ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΈΡ Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π·Π°ΡΠ°Π½Π΅Π΅. Π₯ΠΎΡΡ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ.
Π― ΡΡΠΈΡΠ°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ @jseyfried ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ - Π½Π΅ ΠΈΠ·-Π·Π° ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠ° ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
, Π° ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ API Item
ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ Π±ΠΎΠ³Π°ΡΠ΅. ΡΠΎ Π΅ΡΡΡ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΎΡ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡΠ° ΠΏΠΎΠ»Π΅ΠΉ ΠΎΡΠ΅Π½Ρ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΠΎΠ»ΡΡΠ΅ΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π΄Π°Π½Π½ΡΡ
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌ ΠΈΠΌΠ΅Π½), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ, ΠΈ Ρ. Π΄.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ (_Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ²_) ΠΈΠ· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΡΠΌΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ API AST.
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎ ΡΡΠΎΠΊΠ°Ρ : Ρ ΠΎΡΠ΅Π½Ρ, ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠ° 1.1 Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΈΠΊΠ»Π΅. Π’ΠΎ, ΡΡΠΎ Π½Π°ΠΌ ΠΌΠ΅ΡΠ°Π΅Ρ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅, Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ.
Π ΡΡΠΎΠΌ Π΄ΡΡ Π΅ ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΠΏΠΈΡΠ°Π»:
#[proc_macro]
_, Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° Π½Π° Item
. Π― ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ, ΡΡΠΎ Π±Ρ ΠΌΡ Π½ΠΈ Π²ΡΠ±ΡΠ°Π»ΠΈ, ΠΌΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΈΠ½ΡΡΡ Π΄ΡΡΠ³ΠΎΠ΅ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΎ ΠΊΠ°Π·Π°Π»ΠΎΡΡ Ρ
ΠΎΡΠΎΡΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ. Π― ΠΊΠ°ΠΊ Π±Ρ Ρ
ΠΎΡΡ ΠΏΠΎΠΉΡΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΠ΅ΡΠ²ΡΠΌ. Π·Π½Π°ΠΊ ΡΠ°Π²Π½ΠΎ#[cfg]
ΠΎΡ cfg!
ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ, Ρ ΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΈΠ»ΠΈ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π²Π΅ΡΡΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ _then_. ΠΠ΅ ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π²ΡΠ΅Π΄ΠΈΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΠΎ ΡΠ΅ΠΌ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ?@nikomatsakis, Π²Π°ΡΠ΅ ΡΠ΅Π·ΡΠΌΠ΅ Π·Π²ΡΡΠΈΡ ΡΠΎΡΠ½ΠΎ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ Π΅Π³ΠΎ! ΠΠ½Π΅ ΠΆΠ°Π»Ρ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΌΠ°ΠΊΡΠΎΡ 1.1 Π² Rust 1.14, Π½ΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠΏΠΎΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ.
ΠΠΎΠ΅ Π»ΠΈΡΠ½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΊΠ°ΠΊ Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½.
Π― Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡ Item -> TokenStream
API, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΎΡ
Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΈΠΌΠΏΠ»ΠΈΠΌΠ΅Π½ΡΡ? ΠΠ½Π°ΡΠΈΡ Π»ΠΈ ΡΡΠΎ, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ &mut Item
?
@ est31 Π²Π°Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π·Π²ΡΡΠΈΡ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΎΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ?
Π― ΠΏΠΎΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΌ
ΠΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π²ΡΠ΅Π΄ΠΈΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΠΎ ΡΠ΅ΠΌ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ?
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠ»ΠΎΠΌΠ°Π» Π΄ΠΈΠ·Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Queryable!
ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π»Ρ Π½Π΅Π΅ Queryable
.
ΠΠ°ΠΊ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈ Π½Π΅ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄ΠΈΠ·Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ (ΡΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ ΡΠΎ, ΡΡΠΎ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ: sweat_smile :), Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ 1 ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Π° Π΄Π»Ρ Π΄ΠΈΠ·Π΅Π»Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠΈ ΠΌΠ°ΠΊΡΠΎΡΡ Π½Π° derive_Queryable!
ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π² ΡΡΠΎΠΌ ΡΠΎΠ΄Π΅. ΠΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ, Π²Π΅ΡΠ½ΠΎ?
Π― ΡΠΎΠ·Π΄Π°Π» PR https://github.com/rust-lang/rust/pull/37614 Π΄Π»Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ #[proc_macro_attributes(..)]
, ΠΈ Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠΌ TokenStream
.
Π― ΠΏΠΎΠ΄Π°Π» # 37637, ΡΡΠΎΠ±Ρ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΎΡΡ proc Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ $crate
.
ΠΡΠΎΡΡΠΎ ΡΡΠΎΠ±Ρ ΡΡΠΎΡΠ½ΠΈΡΡ, ΡΡΠΈΡΠ°Π΅ΡΡΡ Π»ΠΈ ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ:
Π― ΡΠΎΠ·Π΄Π°Ρ Π½ΠΎΠ²ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π·Π΄Π΅ΡΡ, ΠΈ ΠΌΠ½Π΅ ΠΎΡΠ΅Π½Ρ Π½ΡΠ°Π²ΠΈΡΡΡ Π΄ΠΈΠ·Π°ΠΉΠ½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ½Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π²Π΅ΡΠΈ Π² ΠΎΠ΄Π½Ρ ΡΡΡΡΠΊΡΡΡΡ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΡΠ°ΠΊΡΡ ββΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Ρ ΠΌΠΎΠ³ Π±Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ ΡΠ΅ΠΉΡΠ°Ρ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»Π°Π³Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠΈΠ»ΠΈΠΉ (ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ - ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π±ΡΡΡΡΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ).
@TheNeikos
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ (Π²Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² TokenStream). Π― Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΈΠΌΠΏ, Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ, Π½ΠΎ Π½ΠΈΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ Π²Π°ΠΌ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠ°ΠΌ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°ΠΌΠΈ ΠΈΠΌΠ΅Π½.
ΠΡΡΠ³ΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ - Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅.
RE: ΠΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Π² Diesel. Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΎΡΠΊΠ°ΠΆΡΡΡ Π»ΠΈ Ρ ΠΎΡ ΡΡΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π½Π΅Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π»ΠΈ Ρ ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π΅ΡΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. Π‘ΠΎΠΌΠ½ΠΈΡΠ΅Π»ΡΠ½ΠΎ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ.
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΏΠΎΡΠ΅ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ - ΡΡΠΎ ΠΏΡΠΈΡΠΊΠΎΡΠ±Π½ΠΎ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ Π°Π½Π½ΠΎΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ Ρ ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ. Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΠΎΠΏΠ°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΡΡΠ΄Π½ΠΎ ΡΠ΅ΡΡΡΡ ΠΈΠ·-Π·Π° Π½ΠΈΡ ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ.
@TheNeikos @sgrif ΠΠΎΡ ΡΠΎΡΠΊΠ° Π·ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΠ΅, ΡΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π²Π²ΠΎΠ΄, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ Π·Π΄Π΅ΡΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ°ΡΠ½ΠΎ (ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π³ΠΈΠ³ΠΈΠ΅Π½Ρ ΠΈ Ρ. Π.), ΠΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΡΡΡΠ΅ΠΌΠ»ΡΡΡ ΠΏΠΎΠΎΡΡΡΡΡ ΡΡΠΎ.
ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ (ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π° Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°). Π― Π½Π΅ Π²ΠΈΠΆΡ Π²Π΅ΡΠΊΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π»ΡΠ΄ΡΠΌ Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ.
@TheNeikos Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΡΡΡΠΊΡΡΡ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²Ρ Π½Π΅ ΠΌΠΎΡΠΈΠ²ΠΈΡΡΠ΅ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅.
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ ΡΡΠΈΡΠ°Ρ ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ; Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ - ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅, Π΅ΡΠ»ΠΈ ΡΡΠΈ ΡΠΈΠΏΡ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠΈΠΏΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ IntoIterator
Π΄Π»Ρ ΡΠΈΠΏΠ°, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ Iterator
. ΠΠΎ ΠΈΠ΄Π΅Π΅, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π½ΠΎ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π±ΡΡΡ Β«ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΠΎΠΉΒ».
@sgrif
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΏΠΎΡΠ΅ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ - ΡΡΠΎ ΠΏΡΠΈΡΠΊΠΎΡΠ±Π½ΠΎ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ Π°Π½Π½ΠΎΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ Ρ ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ. Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΠΎΠΏΠ°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΡΡΠ΄Π½ΠΎ ΡΠ΅ΡΡΡΡ ΠΈΠ·-Π·Π° Π½ΠΈΡ ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ.
Π₯ΠΌ, Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΡΠΎΡΡΠ²ΡΡΠ²ΡΡ, Ρ ΠΎΡΡ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ (ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅ΡΠΈΠ» @nrc ), ΡΡΠΎ Π½Π΅ ΡΠΎ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π±ΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΈ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡ ΠΎΠ±Π½Π°ΠΆΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΡΡΡΡΠ΅ ΡΠ³Π»Ρ. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²Π°ΡΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π±ΡΡΡΡΠΎ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ΅ΠΌΡ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ "ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π²Π·ΡΡΠ²Π° 1.1".
PR Π±ΡΠ» ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²Π΅ΡΠ΅Ρ. Π€ΡΠ½ΠΊΡΠΈΡ proc_macro_derive Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ (ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΠΏ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π΄Π²Π°ΠΆΠ΄Ρ), ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² Π±Π΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ #[proc_macro_derive(Derive, attributes(Foo, Bar)]
.
cc @dtolnay , @sgrif ^
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠΎ ΡΠΊΠΎΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΏΠΎΠ»ΠΎΠΌΠΊΡ
ΠΠ°, Ρ ΠΏΠΎΠ΄Π°Π» https://github.com/serde-rs/serde/issues/614, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π½Π° Π½Π°ΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΠ» ΠΏΠΎΠ»ΠΎΠΌΠΊΡ Π² Diesel Π² https://github.com/diesel-rs/diesel/pull/493 , Π±ΡΠ΄Ρ Π·Π½Π°ΡΡ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΡΠ½ΠΎΠ²Π° Π±ΡΠ΄ΡΡ ΡΡΡΠΎΠΈΡΡ Π½ΠΎΡΠ½ΡΠ΅ ΠΊΠ»ΡΠ±Ρ.
ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΈΡΠ°Ρ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ°ΠΊΡΠΎΡ proc ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΄Π°Π²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΊ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ? (Π― Π²ΠΈΠΆΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Β«ΡΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉΒ», Π½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ.)
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡ #[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!
Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ, Π½ΠΎ Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΡΡ Π½Π° ΠΌΠ°ΠΊΡΠΎΡ proc, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ:
pub
ΠΈ Ρ. Π. ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ, Π½Π΅ ΡΡΠ΅Π±ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ»Π΅Ρ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ.Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅Ρ, Π²Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΡΠ°Π½ΡΡΠ΅.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π±ΡΠ΄ΡΡΠ΅ΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅ΠΉΡΡ Π² ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ: ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Β«ΡΠΈΡΡΠΎΠΉΒ», Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΡΡΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ rustc ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ?
@ est31 ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²ΡΠ΅ΠΌΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΡΠ½ΡΡΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ IPC.
Π― ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΠΈΠΆΡ ΠΠΠ‘ Π² Π΄ΠΈΠ·Π΅Π»Π΅ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΠΌΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
../src/librustc_metadata/decoder.rs:490: Π·Π°ΠΏΠΈΡΡ: id Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½: DefIndex (1) Π² ΡΡΠΈΠΊΠ΅ "diesel_codegen" Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ 28
@sgrif , ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° # 37788, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΡ ΠΏΠΎΠΌΠΎΡΡΡ # 37793 (Π±ΡΠ΄Π΅ΠΌ Π½Π°Π΄Π΅ΡΡΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ Π·Π°Π²ΡΡΠ° Π²Π΅ΡΠ΅ΡΠΎΠΌ ...).
@ est31 Π ΡΡΠΎΡ ΡΠ°Ρ ΡΠΆΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΠΎΠ·Π΄Π½ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π΅Π³ΠΎ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° Π½ΠΎΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ.
https://github.com/rust-lang/rust/issues/37839 - ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° lib, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΈΠΊ proc_macro. AFAICT Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅ΡΡΠΎΠ² Π½Π΅ Π·Π°ΡΡΠΎΠ½ΡΡ ΡΡΠΈΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΠΊΡΠΎΠΌΠΎΠ΄ΡΠ»Ρ proc, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠ°ΠΊΡΠΎΡΠ° proc ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ bin, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΌΠ°ΠΊΡΠΎΡ proc.
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ: ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ!
@Arnavion ΠΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ # 37839, ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠ΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΎΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠΉ, Π½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π½ΠΎΠΉ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ --target
, ΠΊΠ°ΠΊ ΡΠΎΠΎΠ±ΡΠ°Π΅ΡΡΡ Π² # 37958. Π― ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ» ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ --target
ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
@rfcbot fcp ΡΠ»ΠΈΡΠ½ΠΈΠ΅
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² Π±Π΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ, Ρ Π΄ΡΠΌΠ°Ρ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ! Serde, Diesel ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ - ΡΠ΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΅ΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ. Π·Π½Π°ΠΊ ΡΠ°Π²Π½ΠΎ
cc @sgrif @erickt
Π§Π»Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄Ρ @nikomatsakis ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠΎ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ:
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈ ΡΠ΅ΡΠ΅Π½Π·Π΅Π½ΡΡ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡΠ°, Π½Π°ΡΡΡΠΏΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π². ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π»Π°ΡΡ Π½ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΎΠΎΠ±ΡΠΈΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ!
Π‘ΠΌ. ΠΡΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠ³ΡΡ Π΄Π°ΡΡ ΠΌΠ½Π΅ ΡΠ»Π΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Ρ ΡΠ΅Π³Π°ΠΌΠΈ.
Π― Ρ ΠΎΡΠ΅Π» Π±Ρ, ΡΡΠΎΠ±Ρ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌ Π±ΡΠ΄ΡΡΠ΅ΠΌ Π±ΡΠ»ΠΈ ΠΈΠ·ΡΡΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΎΡΡ Π²Π·ΡΡΠ²Π°. Π₯ΠΎΡΡ Π²ΠΎΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅Ρ.
@rfcbot ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π»
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ, Π΅ΡΠ»ΠΈ TokenStream Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ° LexError . ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π±ΡΠ»ΠΎ Π±Ρ Π²Π΅ΡΠ½ΡΡΡ Π·Π΄Π΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠΎΠΊΠ΅Π½ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ? Π₯ΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π²Π°ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ Ρ ΠΎΡΡΡ Π²ΠΈΠ΄Π΅ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ .
ΠΠ°, ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΡΠΎΠΊ Π² ΡΠ°ΠΉΠ» ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π³ΠΎ Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ΅, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΎΠΆΠ΅ Π²ΡΠΈΠ³ΡΠ°ΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π±ΡΠ΄ΡΡ Π»ΡΡΡΠ΅ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² ΠΌΠ°ΠΊΡΠΎΡΠ΅.
ΠΠ° https://github.com/rust-lang/rust/pull/38140 ΠΌΡ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π±ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ. Π’Π΅ΠΎΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ Π½Π°ΠΌ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΌΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π·Π°Ρ ΠΎΡΠΈΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΡΡΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ±ΠΎΡ. Π― ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΡΡΠΎ ΠΎΡΡΠ°Π²Π»Ρ Π΅Π³ΠΎ ΠΌΠ°ΡΠΈΠ½ΠΎΠ²Π°ΡΡΡΡ Π½Π° Π΄Π΅Π½Ρ ΠΈΠ»ΠΈ Π΄Π²Π°, ΡΡΠΎΠ±Ρ Π»ΡΠ΄ΠΈ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
β37480 Π·Π°ΠΊΡΡΡ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΎ Π² ΡΠ΅ΠΊ-Π»ΠΈΡΡΠ΅.
ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π°
@pnkfelix Π― Π²Π·ΡΠ» Π½Π° ΡΠ΅Π±Ρ ΡΠΌΠ΅Π»ΠΎΡΡΡ
: bell: Π‘Π΅ΠΉΡΠ°Ρ Π½Π°ΡΡΡΠΏΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² , ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΎΠ±Π·ΠΎΡΠ΅ Π²ΡΡΠ΅ . : ΠΊΠΎΠ»ΠΎΠΊΠΎΠ»:
psst @nikomatsakis , ΠΌΠ½Π΅ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΊΡ final-comment-period
, ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠ°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π²Π²Π΅ΡΡ Ρ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ? ΠΠ»ΠΈ ΡΠ΅ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ?
ΠΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΡ Π΄Π²Π°:
mod foo;
ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π·Π°Ρ
ΠΎΡΠΈΠΌ, Π½Π΅ Π½Π°ΡΡΡΠ°Ρ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ.ΠΡΠΈΠ²Π΅Ρ! ΠΡΠΎ Π°ΡΠ΄ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ RFC 1636 . ΠΡΠΎ ΠΏΠ΅ΡΠ²Π°Ρ Π²Π°ΠΆΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈΠ½ΡΡΠΈΡ RFC 1636, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ Π΅Π³ΠΎ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ΠΌ.
RFC Π³Π»Π°ΡΠΈΡ:
ΠΠ΅ΡΠ΅Π΄ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ°:
- Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ Π² Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠ΅ ΠΏΠΎ Rust.
- Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Rust.
- ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ Π² Rust Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ .
- ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°ΠΊ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ:
- ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° Π΄Π»Ρ ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
- Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎ Π²ΡΠΏΡΡΠΊΠ΅ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅.
ΠΠ°ΠΊΠΎΠ² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ? ΠΠΎΠ»ΠΆΠ½Ρ Π»ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π² Π²Π΅ΡΡ Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ? ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΊ Π²ΡΠΏΡΡΠΊΡ 1.15 Ρ Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ°Ρ ΡΡΠΈΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ Π² Π²ΠΈΠ΄Π΅ Π΄Π΅ΡΠ΅Π²Π°.
cc @ rust-lang / docs
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @withoutboats ! ΠΠ°, ΡΡΠΎ ΠΏΠ΅ΡΠ²Π°Ρ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΎ ΡΡΠΎ Π² ΠΌΠΎΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΌ, ΠΈ Π²ΠΎΡ, ΡΡ ΠΌΠ΅Π½Ρ ΠΎΠΏΠ΅ΡΠ΅Π΄ΠΈΠ» π
Π― Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ» ΡΠ΅Π±Π΅ ΡΡΠΎ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ. Π’ΠΎ Π΅ΡΡΡ @ rust-lang / lang ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ Β«ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌΒ», Π½ΠΎ ΡΠΈΠΊΡΠ°ΡΠΈΡ Π½Π° ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΡΠ·Π° ΡΠ°ΠΊΠΆΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. Π ΠΌΠΈΡΠ΅, Π³Π΄Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½Π°Ρ ΠΊΠ½ΠΈΠ³Π° , ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ ΠΎΡΡΡΠ΄Π° Π² ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ; Π½ΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ Π²ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ.
Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Ρ Π½Π°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π±ΡΠ» ΡΠ΅Π»ΠΈΠ·, Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π» ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ:
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΈ ΡΡΠ΅Ρ .
/ cc @ rust-lang / core, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΌΠ΅ΠΆΠ³ΡΡΠΏΠΏΠΎΠ²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
@steveklabnik, ΡΡΠΎ Π·Π²ΡΡΠΈΡ Ρ ΠΎΡΠΎΡΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ, ΠΈ Ρ ΡΠΎΠΆΠ΅ Π±ΡΠ΄Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ (Π΄Π°ΠΆΠ΅ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ FCP). Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ FCP Π·Π΄Π΅ΡΡ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π·Π°Π½ΡΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎΠ±Ρ Π²ΠΎΠΉΡΠΈ.
Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡ Π±ΡΡΡΡΠΎ, ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ Π² Π±Π΅ΡΠ°-Π²Π΅ΡΡΠΈΡ 1.15!
ΠΡΠ»ΠΈ Ρ ΠΏΠ΅ΡΠ²ΡΠΉ, ΠΊΡΠΎ ΡΠ΄Π°ΡΠΈΡ ΡΡΠΎ, ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊ ΡΠΆ ΠΏΠ»ΠΎΡ ΠΎ, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΠΌ Π΅Π³ΠΎ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ° ΡΠΈΠΏΠ° Π²Π½ΡΡΡΠΈ ΡΡΡΡΠΊΡΡΡΡ Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ICE https://github.com/rust-lang/ ΡΠΆΠ°Π²ΡΠΈΠ½Π° / Π²ΠΎΠΏΡΠΎΡΡ / 38706
https://github.com/rust-lang/rust/pull/38737 ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΎΡΡ ΡΠΈΠΏΠ° ICE: heart :. ΠΡΡΡ Π»ΠΈ ΡΠ°Π½Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΡΠΎ Π½Π° Π±Π΅ΡΠ°-Π²Π΅ΡΡΠΈΡ? ΠΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠ»ΠΎΡ ΠΈΠΌ, ΡΡΠΎ Π΄Π²Π΅ Π²ΡΠ΄Π°ΡΡΠΈΠ΅ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΡΡΠ΅Π½Π° Π² Π²Π΅ΡΡΠΈΠΈ 1.13, Π° Π΄ΡΡΠ³Π°Ρ Π² Π²Π΅ΡΡΠΈΠΈ 1.15, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΠ±ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈ ΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π» # 38749, ΠΊΠ°ΡΠ°ΡΡΠΈΠΉΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠΈΠΊΠ° proc_macro
.
Π― Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΡΠΈΡΠ°Π», ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ 1.1 Π±ΡΠ΄ΡΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ Π² Π²Π΅ΡΡΠΈΠΈ 1.15, Π½ΠΎ 1.15.0-beta.1 Π±ΡΠ»Π° Π²ΡΠΏΡΡΠ΅Π½Π° Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ Π½Π°Π·Π°Π΄, ΠΈ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ extern crate proc_macro;
Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² Π½Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² Π½ΠΎΡΠ½ΠΎΠΌ 4ecc85beb 2016 -12-28. ΠΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ?
@SimonSapin: Π΄Π°, ΡΡΠΎ Π±ΡΠ» ΠΏΠ»Π°Π½, Π½ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ!
ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΠ»Π°Π½: p
ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΈΡΠ΅Ρ #[derive(Foo)] #[foo_def = "definition.json"] struct MyStruct;
ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠ°ΠΊΡΠΎΡΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Β», ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ definition.json
.
ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΏΡΠΎΡΡΠΎ, ΠΈ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠΆΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΡΠΎ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Span
-> FileMap
-> ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° -> ΠΊΠ°ΡΠ°Π»ΠΎΠ³. ΠΡΠ΅, ΡΠ΅Π³ΠΎ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ, - ΡΡΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· proc_macro
.
ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΊ definition.json
ΡΡΠΎΠ±Ρ ΡΠ±ΠΎΡΠΊΠ° Π±ΡΠ»Π° Π³ΡΡΠ·Π½ΠΎΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°.
ΠΠ°ΠΊΡΠΎΡ proc ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ env::var("CARGO_MANIFEST_DIR")
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Cargo.toml ΡΡΠΈΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠ°. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ foo_def
ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΎΠ³ΠΎ. Π‘ΠΌ. Https://github.com/dtolnay/syn/issues/70#issuecomment -268895281.
@tomaka, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ FileMap, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡ include_str!
.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ foo_def ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΠΎΠΌΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Cargo.toml Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ.
ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² FileMap, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ include_str! ΠΌΠ°ΠΊΡΠΎΡ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ.
ΠΠ°, Ρ Π·Π½Π°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π½ΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ API ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ².
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ - Item
. ΠΡΠ»ΠΎ Π±Ρ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊ Item
ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, Π±ΡΠ»ΠΎ Π±Ρ Π²Π·Π»ΠΎΠΌΠΎΠΌ IMO.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Span -> FileMap -> filename -> directory.
ΠΡΠΈ API (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, FileMap
) Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π½Π° ΠΏΡΡΠΈ ΠΊ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ?
ΠΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ Π±Ρ Π½Π΅ Ρ
ΠΎΡΠ΅Π» ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ API, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Span
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠΎΠΊΡ, ΡΡΠΎΠ»Π±Π΅Ρ, ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°).
Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΡΠΈΠΊΠ΅. Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
``
error: Cannot use
#! [Feature (proc_macro)] and
#! [Feature (custom_attribute)] ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ
`` ''
@alexreg ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ #[derive]
, ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΡΡΠ°Π±ΠΈΠ»Π΅Π½. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ #![feature(proc_macro)]
.
@alexreg
proc_macro_derive
s (ΠΌΠ°ΠΊΡΠΎΡΡ 1.1) ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½Ρ - Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π°Π»ΠΈΡΡ #![feature(proc_macro)]
.
#[proc_macro_attribute]
Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΡΠΈΠ·Π΅ΠΌΠ»ΠΈΠ»ΡΡ Π·Π° Π²ΠΎΡΠΎΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ #![feature(proc_macro)]
; ΠΎΠ½ΠΈ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ Ρ #![feature(custom_attribute)]
. #![feature(custom_attribute)]
Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°ΠΌΠ΅Π½Ρ (https://github.com/rust-lang/rfcs/pull/1755).
@jseyfried Π― Π΄ΡΠΌΠ°Ρ, Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π½Π° proc_macro
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π·Π°ΠΊΡΡΡΠ° ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ ΡΠ΅Π±ΡΡΠ°. Π ΡΡΠΎΠΌ Π΅ΡΡΡ ΡΠΌΡΡΠ».
@abonander ΠΠ°, #![feature(proc_macro)]
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° # 38356 - Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ # 38842. ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΠ΄Π°ΡΡ PR?
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π₯ΠΎΡΠΎΡΠΎ, Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΈΠ·ΡΡΠΈΡΡ ΡΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΠ»ΡΡ.