Rust: рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ (RFC 2000)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рд╕рд┐рддре░ 2017  ┬╖  202рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рд░рд╕реНрдЯ-рд▓реИрдВрдЧ/рдЖрд░рдПрдлрд╕реАрдПрд╕#2000 . рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛

рдЕрдкрдбреЗрдЯ:

рдпрджрд┐ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдУрдкрди рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдореБрджреНрджреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП @varkor , @eddyb , @yodaldevoid , @oli-obk рдпрд╛ @lcnr рдХреЛ


рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рд░реЛрдХрдирд╛:

  • [ ] рдбрд┐рдЬрд╝рд╛рдЗрди:

    • [ ] рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрд╕реНрдЯ рдФрд░ рдЯрд╛рдЗрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдХреНрд░рдо рдХреЛ рд╣рд▓ рдХрд░рдирд╛

    • [ ] рдпрд╣ рддрдп рдХрд░реЗрдВ рдХрд┐ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдХреЙрдиреНрд╕реНрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ UX/рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдЧрдд рд╕рдВрддреБрд▓рди рдХреНрдпрд╛ рд╣реИред

    • [ ] рд╣рдо рдХреИрд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╡реНрдпрдВрдЬрдХреЛрдВ рдХреА рд╕реБрдЧрдард┐рддрддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред

  • [x] рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
  • [ ] рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

    • [ ] рд░рд╕реНрдЯрд╕реА рдЧрд╛рдЗрдб


рд╢реЗрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореБрджреНрджреЗ:

  • [ ] рд╡рд┐рднрд┐рдиреНрди FIXME(const_generics) рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВред
  • [ ] рд╡рд┐рд╣рд┐рддреАрдХрд░рдг/рдЖрд▓рд╕реА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЪрд┐рдВрддрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВред
  • [ ] рдкреИрдЯрд░реНрди рдореЗрдВ рдХрд╛рд╕реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
  • [ ] рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВред
  • [ ] const рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВ ( FIXME(const_generics:defaults) )ред
  • [ ] рдЕрдиреНрдп рдП-рдХреЙрдиреНрд╕реНрдЯ-рдЬреЗрдиреЗрд░рд┐рдХ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░реЗрдВред
  • [ ] has_infer_types рдХрд╛ рдСрдбрд┐рдЯ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • [x] рдкреИрд░рд╛рдореАрдЯрд░ (рдЕрднреА рдХреЗ рд▓рд┐рдП) рд╕реЗ рдЬреБрдбрд╝реЗ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдордирд╛ рдХрд░реЗрдВ, рдЬреИрд╕реЗ {X * 2} ред
  • [ ] рдСрдбрд┐рдЯ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ (рдЬреИрд╕реЗ https://github.com/rust-lang/rust/pull/76401#discussion_r484819320)ред
A-const-fn A-const-generics A-typesystem B-RFC-approved C-tracking-issue F-const_generics T-compiler T-lang requires-nightly

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

рдпрд╣рд╛рдВ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдкрд░ рдЕрдм рддрдХ рдХреА рдкреНрд░рдЧрддрд┐ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдкрд░ рдХрд╛рдо рдареАрдХ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рдЬрд░реВрд░рдд рдереАред @jplatte рдиреЗ https://github.com/rust-lang/rust/pull/45930 рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рд╕рдВрднрд╛рд▓рд╛ @jplatte рдиреЗ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░

@yodaldevoid рдФрд░ рдореИрдВрдиреЗ рдЙрдард╛рдпрд╛ рдЬрд╣рд╛рдВ @jplatte рдЫреЛрдбрд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдкрд╛рдпрд╛ рдХрд┐ рдкреНрд░рдЧрддрд┐ рдХрд░рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдХреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ https://github.com/rust-lang/rust/pull/48149 , https://github.com/rust-lang/rust/pull 48452 , https://github.com/rust-lang/rust/pull/48523 , https://github.com/rust-lang/rust/pull/51880ред

рдЗрд╕рдХреЗ рд╕рд╛рде, рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдпрд╛рдирд╛ рдореЗрдВ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрдм рд╕реЗ, @yodaldevoid рдФрд░ рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ: https://github.com/rust-lang/rust/pull/58191 , https://github.com/rust-lang/rust /pull/58503 , https://github.com/rust-lang/rust/pull/58581 , https://github.com/rust-lang/rust/pull/58583 , https://github.com/rust -рд▓реИрдВрдЧ/рд░рд╕реНрдЯ/рдкреБрд▓/59170 , https://github.com/rust-lang/rust/pull/59355 , https://github.com/rust-lang/rust/pull/59415 , https://github .com/rust-lang/rust/pull/60058 , https://github.com/rust-lang/rust/pull/60280 , https://github.com/rust-lang/rust/pull/60284 рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд╛рд▓ рд╣реА рдореЗрдВ https://github.com/rust-lang/rust/pull/59008ред (рдЗрдиреНрд╣реЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдореБрдЦреНрдп рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред)


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

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

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

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

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

44275 рдиреЗ рдПрдХ ConstEvaluatable рд╡рд┐рдзреЗрдп рдЬреЛрдбрд╝рд╛, рдФрд░ WF([T; expr]) рдЕрдм ConstEvaluatable(expr) , рдХреНрдпреЛрдВрдХрд┐ expr рдХрд╛ рдЖрд▓рд╕реА рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╢рд╛рдмреНрджрд┐рдХ рд╣реЛ)ред рдЗрд╕ рд╡рд┐рдзреЗрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ Unevaluated рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдЫреВрддрд╛ рд░рд╣рддрд╛ рд╣реИ, рдЬреЛ рдХрдореЛрдмреЗрд╢ рд╕рдВрдмрджреНрдз рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд╛рди рдкреНрд░рдгрд╛рд▓реА рдЬреЗрдирд░рд┐рдХ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрд▓ рдХрд░реЗрдЧреАред

@EpicatSupercell рдиреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╡реНрдпрдХреНрдд рдХреА рд╣реИ, рдореИрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, #44275 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣рдо рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗред

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рддрд░реАрдХреЗ (рдЕрдзрд┐рдХ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП, Gitter рдкрд░ @eddyb рдпрд╛ IRC рдкрд░ eddyb рддрд▓рд╛рд╢ рдХрд░реЗрдВ):

  • рдШреЛрд╖рдгрд╛ / рд╡рд╛рдХреНрдп рд░рдЪрдирд╛:
  • рдШреЛрд╖рдгрд╛ / рд╢рдмреНрджрд╛рд░реНрде

    • рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ: ty::Generics - рдкреНрд░рдХрд╛рд░ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде const рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ

    • HIR рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг: generics_of - ty::ConstParameterDef рд╕реЗ hir::ConstParam ty::ConstParameterDef рдмрдирд╛рдПрдВ

  • рдЙрдкрдпреЛрдЧ / рдирд╛рдо рд╕рдВрдХрд▓реНрдк

    • рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ: Def - const рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВ

    • рдирд╛рдо рд╕рдорд╛рдзрд╛рди рдкрд╛рд╕: with_type_parameter_rib - рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ const рдЬреЗрдирд░рд┐рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

  • рдЙрдкрдпреЛрдЧ / рд╢рдмреНрджрд╛рд░реНрде

    • ConstVal - Param рд╡реИрд░рд┐рдПрдВрдЯ рдХреЛ ty::TyParam

    • HIR рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг: TyArray рд▓рдВрдмрд╛рдИ рд╣реИ рдХрд┐ рдХреЗ рд╕рд╛рде рдПрдХ ExprPath рдХрд┐ рдХрд╛ рд╕рдВрдХрд▓реНрдк рд▓рд┐рдпрд╛ Def::ConstParam рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ConstVal::Param рдХреЗ рдмрдЬрд╛рдп ConstVal::Unevaluated - рдПрдХ рдРрд╕реА рд╣реА рдореЗрдВ рдлреИрд╢рди рдХреИрд╕реЗ Def::TyParam ty::TyParam рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ

    • subst::Kind - &ty::Const рд╕рдорд░реНрдерди рдХрд░реЗрдВ рдФрд░ as_const рдХреЛ рднреА рдЪреЗрдХ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ as_type рдФрд░ as_region рдЪреЗрдХ рдХрд┐рдП рдЧрдП рд╣реИрдВ

  • рдЕрдиреБрдорд╛рди

    • ConstVal - InferVar рд╡реИрд░рд┐рдПрдВрдЯ рдХреЛ ty::ReVar / ty::TyInfer(TyVar(_))

    • InferCtxt - const рд╕рдордХрдХреНрд╖ int_unification_table рдФрд░ рдЗрд╕рдХреЗ UnifyKey рдирд┐рд╣рд┐рддрд╛рд░реНрде

    • ty::relate::{Relate,TypeRelation} - ty::Const рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд░реНрдерди, рдФрд░ ConstVal::InferVar рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ рдЬреИрд╕реЗ super_combine_tys рдЗрд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрди рд╕рднреА рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП impl<T, const N: usize> Trait for [T; N] {...} , рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░/рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ArrayVec<T, 3> ред

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

@jplatte @eddyb рдЗрд╕ рдкрд░ рдХреЛрдИ рдЦрдмрд░?

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

@jplatte рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдЖрдк рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред

рдЕрднреА рддрдХ рдХреЛрдИ рдкреАрдЖрд░ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рд╕рд╛рд░реЗ рдХрд╛рдо рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреЗ

рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдЕрдм рддрдХ @jplatte

рдЕрдм рдЖрдзрд╛рд░рднреВрдд рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рд╣реИ ( Generics рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ): #45930

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИ рд▓реЗрдХрд┐рди рд░реИрдЦрд┐рдХ рдмреАрдЬрдЧрдгрд┐рдд рд╢реИрд▓реА рдПрди рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА ++ рд╕реНрдЯрд╛рдЗрд▓ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЖрдИрдИ 4x4 [[f64; 4]; 4] рдпрд╛ 4x3x5x6 рдЖрдпрд╛рдореА рд╕рд░рдгреА [[[[ f64;6];5];3];4] рдФрд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рд▓рдкреЗрдЯрдиреЗ рдФрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдФрд░ рд╕реНрдХреЗрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдареАрдХ рд╕реЗ рдЖрдпрд╛рдо рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░ рдЗрддреНрдпрд╛рджрд┐ред рджреЗрдЦреЗрдВ https://gist.github.com/huhlig /8b21850b54a75254be4b093551f8c2cb рдПрдХ

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

рдЕрдм рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреНрдпрд╛ рд╣реИрдВ рдХрд┐ #45930 рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ? @jplatte

@kjaleshire рдЕрдЧрд▓рд╛ рдХрджрдо const рдЬреЗрдирд░рд┐рдХ рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ (рджреЗрдЦреЗрдВ @eddyb рдХреА рдЯрд┐рдкреНрдкрдгреА рдЖрдЧреЗ)ред рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдореЗрдВ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧреАред рдЙрд╕ рдкрд░ рдореЗрд░рд╛ рдореМрдЬреВрджрд╛ рдХрд╛рдо рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛

@jplatte рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЖрдк @kjetilkjeka рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред

рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реВрдВред рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЗрдВ!

@jplatte рдЕрдзреАрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдХрд╛рдо рд╣реБрдЖ рд╣реИ? рдХреНрдпрд╛ рдЖрдкрдХреЛ рдорджрдж рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ? рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?

@ est31 рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдордп рд╕реЗ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рдХрдм рд╣реЛрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛ рдХрд┐ рдореИрдВ рд╡рд╣реАрдВ рд░рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЫреЛрдбрд╝рд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╣рд┐рд╕реНрд╕рд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдб рдореЗрдВ рджреЛ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рдо рдХреЗ рдХреЙрдиреНрд╕ рдкрд░рдо рд╣реЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ:

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

@jplatte ~ None рдкрд╣рд▓реЗ рдореЗрдВ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ ~~ (cc @pnkfelix @nikomatsakis)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВред

@eddyb рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ None рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ None рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЕрдиреНрдп рдкреИрд░рд╛ рдЬреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@yodaldevoid рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ Generics ред

рдореИрдВ рдЗрд╕реЗ рд╡рд╣реАрдВ рд╕реЗ рдЪреБрдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬрд╣рд╛рдВ @eddyb рдХреЗ рдкрд░рд╛рдорд░реНрд╢ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реИ рдХрд┐ рдореИрдВ рдХрд╣реАрдВ рднреА рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдирд╣реАрдВред рдореИрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ "рдЙрдкрдпреЛрдЧ / рд╢рдмреНрджрд╛рд░реНрде" рдЦрдВрдб рдореЗрдВ рдЙрддрд░ рдЧрдпрд╛ рд╣реВрдВред рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╢рд╛рдпрдж рдЬрд▓реНрдж рд╣реА рдЪреИрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕реНрд╡рд┐рдВрдЧ рдХрд░реВрдВрдЧрд╛ред

@yodaldevoid рд╕реБрдирдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рдореИрдВ Gitter рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди IRC рдкрд░ #rustc рдФрд░/рдпрд╛ #rust-internals рдкрд░ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдорд┐рд▓реЗрдЧрд╛!

@yodaldevoid : рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд╕рд╣рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗ? рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдХреБрдЫ рдЬрд╛рдВрдЪ рднреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (ЁЯШЕ) - рд╢рд╛рдпрдж рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдХрд╛рдо рдореЗрдВ рдХрдорд┐рдпреЛрдВ рдХреЛ рднрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдЕрдм рддрдХ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛

@varkor рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк

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

@ рдХреНрд╡рд░реНрдЯреА19106
рдЗрд╕ рдкрд░ рдкреНрд░рдЧрддрд┐ рд╣реЛ рд░рд╣реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдзреАрд░реЗ-рдзреАрд░реЗред @varkor рдФрд░ рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдордп рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреБрдЫ рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ рдФрд░ рд╣рдо рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдВрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред

рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ (рд╡рд░реНрдХрд░) рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдлрд╛рдИ рдХреА рд╣реИ (рджреЗрдЦреЗрдВ #48149 рдФрд░ #48523)ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдпреЛрдЬрдирд╛ рдЙрди рджреЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХреЙрдиреНрд╕ рдЬреЗрдирд░рд┐рдХ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд░реНрдХрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЯреАрдПрд▓; рдбреАрдЖрд░: рдкреНрд░рдЧрддрд┐ рд╣реЛ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдПрдореНрдмреЗрдбреЗрдб рдореЛрд░реНрдЪреЗ рдкрд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред

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

рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @yodaldevoid ред рдореИрдВ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рдЕрдВрдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реВрдВрдЧрд╛ред

рдЙрди рдЬрд┐рдЬреНрдЮрд╛рд╕реБрдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рднреА рдЙрддреНрд╕реБрдХ рдерд╛)ред рдкреБрди: рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рджреЛ рдкреАрдЖрд░: #48523 рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ #48149 рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣рд╛ рд╣реИред

@ рдорд╛рд░реНрдХ-рдЖрдИрдПрдо рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ! @varkor рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдоред рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдИрдЯреАрдП рдХрдм рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ? :-)

рдЪреАрдпрд░реНрд╕, @ рдлреНрд▓рд┐рдк111ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░рд╛ рдмрдбрд╝рд╛ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдкреАрдЖрд░ #48149 рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ :)

/рд╕реАрд╕реА рдореБрдЭреЗ

Next @varkor PR #51880

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

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

рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░, рдпрд╣ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛрдб рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдмрдирд╛рдирд╛ред рдпрд╣ https://github.com/rust-lang/rust/pull/48523 , https://github.com/rust-lang/rust/pull/48149 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ https://github рдореЗрдВ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

рдЗрд╕ рдмреАрдЪ, @yodaldevoid рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬрдВрдЧ рдореЗрдВ рдмрд╛рдж рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╣рд╛рдБ рдкрд╣реБрдБрдЪ рд░рд╣реЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрддрдирд╛ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдмрд╛рд░рд╣рдорд╛рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рддрдиреА рдЖрдкрдиреЗ рдЙрдореНрдореАрдж рдХреА рдереА)ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдореЛрд░реНрдЪреЗ рдкрд░ рд╣рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдХреБрдЫ рдЕрдЪреНрдЫреА рдЦрдмрд░ рдорд┐рд▓реЗрдЧреАред (рдЗрд╕ рдмреАрдЪ, https://github.com/rust-lang-nursery/chalk рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд @eddyb рдореЗрдВ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛


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

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

рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдореВрд░реНрдд рдХреЙрдиреНрд╕реНрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреА рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рддрд░реАрдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

  • рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╕рдорд╛рдирддрд╛ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдкрдЯреЗрдВ (рдпрд╛рдиреА N+1 == N+1 рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)
  • рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ N+M == M+N (рд╢рд╛рдпрдж where рдХреНрд▓реЙрдЬ рдореЗрдВ?) рдЬреИрд╕реЗ рд╕рдореАрдХрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдЗрди рд╕рдореАрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рдирддрд╛ рдЬрд╛рдВрдЪ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд░реНрд╡рд╛рдВрдЧрд╕рдорддрд╛ рд╕рдорд╛рдкреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдЬреЛ рдЗрди рдкреНрд░рджрддреНрдд рд╕рдореАрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреЗрдХ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдЙрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдПрдХ рдореЛрдиреЛрдореЛрд░реНрдлрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБ рдкрд░, рд╕рднреА рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ рдПрдХреНрд╕рдкреНрд░реНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдм рд╕рд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣рд╛рдВ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реИ: рдпрджрд┐ рдХреЛрдИ рд╕рдореАрдХрд░рдг рдЬреЛ false , рддреЛ рдпрд╛ рддреЛ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ ("рд╕рдореАрдХрд░рдг рд╕реНрд╡рдпрдВрд╕рд┐рджреНрдз рд╣реИрдВ") рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рддрддреНрдХрд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ("рд╕рдореАрдХрд░рдг рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВ")
  • рдПрдХ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдЬреНрдб рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБ рдкрд░, рдЗрди рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ f N рджреНрд╡рд╛рд░рд╛ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдЬреНрдб рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд╣рд╛рдВ N+0==N , рдпрд╣ рд╕рдореАрдХрд░рдг рдПрдХ рдХреЙрд▓рд░ g рдореЗрдВ рдЦреЛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП g рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЙрджрд╛рд╣рд░рдг:

/// this works directly because of syntactic checks
fn add_end<T:Copy, const N: usize>(a: &[T;N], b: T) -> [T;N+1] {
  let x : [T;N+1] = [b;N+1];
  x[0..N] = a;
  x
}

/// this should work already
fn append<T:Copy, const M:usize, const N:usize>(a: &[T;M], b: &[T;N])
  -> [T;{M+N}]
{ тАж }

/// Here the equation M+M==N must be carried over or checked whenever this function is used
fn sum_pairwise_append<const M: usize, const N: usize>(a: &[i32, M],b: &[i32;N])-> [T;N]
  where M+M == N {
  let mut res : [i32; N] = append(a,a);
  for i in 0 .. N { res[i] += b[i] };
  res
} 


fn main() {
  let a: [i32; 2] = [1;2];
  let b: [i32; 4] = [2;4];
  let _ = sum_pairwise_append(a, b);  // need to check 2+2=4 
}

рд╕реНрд╡рдпрдВрд╕рд┐рджреНрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореАрдХрд░рдг

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ e1 == e2 рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ where рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИ рдмрд▓реНрдХрд┐ assert_eq!(e1,e2) рдХреА рддрд░рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ рдПрдХ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╡реЗ рд╕рдореАрдХрд░рдг рдХрд╛ рдЦрдВрдбрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореАрдХрд░рдг

рдпрд╣рд╛рдВ рдПрдХ рдЦрдВрдб where e1 == e2 рдПрдХ рдмрд╛рдзрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдЬреНрдб рд╡рд┐рд╢реЗрд╖рддрд╛/рдХрд╛рд░реНрдп рдХреЗ рд╕рдлрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ e1 == e2 рдХреЛ рд╣рдореЗрд╢рд╛ рдзрд╛рд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдбреЛрдореЗрди рдкрд░ рд╕рд╣реА рд╕рдореАрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ (x*y) / z == (y*x) / z рдЬреЛ z==0 рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

@ рд╕реА-рдХреНрдпреВрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд where рдХреНрд▓реЙрдЬ" рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдХрдо рд╕реЗ рдХрдо " WF (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд) рдирд┐рдпрдореЛрдВ" рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╛рдиреА рдпрджрд┐ рдЖрдк fn foo<'a, 'b>(x: &'a &'b i32) {} рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ 'b: 'a рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ( WF(&'a &'b i32) -> &'b i32: 'a -> 'b: 'a рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк)ред

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

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

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

@eddyb рдХреНрдпрд╛ рдЖрдк рдЗрди рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рд╕рдВрджрд░реНрдн рдкреЛрд╕реНрдЯ рдЬрд╛рдирддреЗ рд╣реИрдВ?

@ рдлреНрд▓рд┐рдк 111 рд╢рд╛рдпрдж рдХреБрдЫ рдЖрд░рдПрдлрд╕реАред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @withboats рдмреЗрд╣рддрд░ рдЬрд╛рдирддрд╛ рд╣реЛред

#51880 рд╣реЛ рдЧрдпрд╛ : рдЯрд╛рдбрд╛ :: рдЯрд╛рдбрд╛ :

@withoutboats @ рдУрд▓реА-OBK рдХреНрдпрд╛ рдЖрдк рдХреА рддрд░рд╣ рднрд╛рд╡ рдХреЗ рд╕рдореБрдЪрд┐рдд рдПрдХреАрдХрд░рдг рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ N + 1 (рдЬреИрд╕реЗ рд╕реЗ [T; N + 1] рдореЗрдВ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд░реВрдк рд╣реЛ рд░рд╣реА рд╣реИ рдкрд░) miri ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддрдВрддреНрд░ рд╣реЛрдЧрд╛, рдЬрдм @varkor ConstValue::{Infer,Param} рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ "(рдЙрдерд▓реЗ) рд╡реИрдз рд▓реЗрдХрд┐рди рдЕрдЬреНрдЮрд╛рдд" (рдкреНрд░рддреАрдХрд╛рддреНрдордХ) рдорд╛рдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдореВрд▓реНрдп рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ) рдкреВрд░реНрдгрд╛рдВрдХ) рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдЙрд╕рдХреЗ рдКрдкрд░ рдХреЙрд▓ред

рдХрд┐рд╕реА рднреА рдЧреИрд░- assert рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рд╡рд╛рд╣ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЬреНрдЮрд╛рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди assert рдХреЛ рд╢рд╛рдпрдж AssertThen(condition, assert message, success value) рд░реВрдк рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
( condition рдФрд░ success value рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ!)

рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЛ ty::Const рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдорд┐рд░реА рдХреЗ рдмрд╛рд╣рд░ рдХреБрдЫ рдПрдХреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, (рд╕рдмрд╕реЗ?) рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдорд╛рдирддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЕрдиреБрдорд╛рди рдЪрд░ рдХреЗ рдХреБрдЫ рднреА рдЧреНрд░рд╣рдг рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП N + 1 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рджреЛ Add(Param(N), Bits(1)) рдПрдХ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@varkor рдПрдХ рдкрд░реАрдХреНрд╖рдг-рдорд╛рдорд▓рд╛ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдЖрд▓рд╕реА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЛрдИ рдПрдХреАрдХрд░рдг рдирд╣реАрдВ:

/*const*/ fn append<const N: usize, T>(xs: [T; N - 1], x: T) -> [T; N] {
    let new = MaybeUninit::<[T; N]>::uninitialized();
    unsafe {
        let p = new.as_mut_ptr() as *mut T;
        (p as *mut _).write(xs);
        p.add(N - 1).write(x);
    }
    new.into_inner()
}

рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐:

  • N - 1 рдареАрдХ рдПрдХ рдмрд╛рд░ рдЯрд╛рдЗрдк рд╕реНрддрд░ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛

    • рд╕рдм рдХреБрдЫ рдЙрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ

    • ( рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди: type ArrayWithoutLast<T, const N: usize> = [T; N - 1]; )

  • рдпрд╣ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рднреАрддрд░ рдПрдХ рддрд░реНрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ

    • (рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЕрдЧрд░ рд╡рд╛рдкрд╕реА рдХреА рд╕реНрдерд┐рддрд┐ рднреА рдХрд╛рдо рдХрд░реЗрдЧреАред @nikomatsakis?)

    • N рд▓рд┐рдП рдареЛрд╕ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ WF рд╣реИ

    • "рдмреБрд▓рдмреБрд▓реЗ" WF рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдПрдХреАрдХрд░рдг / ArrayWithoutLast

    • рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП " where рдЦрдВрдб рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдирд╛" рдЬреИрд╕реЗ [T; N - 1]: Sized



      • where [T; N - 1]: рджреБрд░реБрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпрд╛ рдЖрдЬ рдЗрд╕реЗ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЖрдЙрдЪ!)


      • where ArrayWithoutLast<T, N>: ... рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ



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

53645

рдЫреЛрдЯрд╛ рдкреНрд░рд╢реНрди рдЬреЛ рдорд╛рдк рдХреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдЯрд╛рдЗрдк рд╕реАрдзреЗ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рди рд╣реЛ рддреЛ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

struct Foo<T, const N: usize> {
    a: T,
    // Will such array be "the way" to handle this problem?
    // Or do we want some kind of `std:marker::PhantomConstData`? (which can be a simple
    // type alias to the same array)
    // Or maybe make `PhantomData` to accept constants?
    _phantom: [(), N],
}

_рдкреНрд░реЗрдд: [(), рдПрди],

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм [(); N] , рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ usize рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ marker::PhantomConst рдХрд┐рд╕реА рднреА const рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд╣рдореНрдо... рдирд╡реАрдирддрдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП RFC рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ: рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА?

struct Foo<T, const V: T> {
    _phantom: PhantomConst<T, V>,
}

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

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

рдЗрд╕ рдкрд░ рдкреНрд░рдЧрддрд┐ рдХреИрд╕реА рд╣реИ? рдХреНрдпрд╛ рд╣рдо рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдордп рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕реЗ рд░рд╛рдд рдореЗрдВ рдорд╛рд░рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

@Zauberklavier рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдЕрднреА рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░рдирд╛ рд╣реИ

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

@eddyb рд╡рд╣реА рд╣реИ рдЬреЛ рдореБрдЭреЗ RFC рдЪрд░реНрдЪрд╛ рд╕реЗ рднреА рдпрд╛рдж рд╣реИред

@varkor рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ @cuviper рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд PhantomConst рдЗрд╕ RFC рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ ... рд╣реИ рдирд╛? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╡реАрдирддрдо рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рд╡реИрд╕реЗ рднреА PhantomConst рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдХреЙрдиреНрд╕реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдирдХреЗ рд╢рд╛рдорд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рднрд┐рдиреНрдирддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ?

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдореЗрдВ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЯрд╛рдЗрдк рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдкрд╣рд▓рд╛ рд╡рд░реНрдХрд┐рдВрдЧ рд╡рд░реНрдЬрди рдХреНрдпрд╛ рдХрд░ рдкрд╛рдПрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛:
https://github.com/rust-lang/rfcs/pull/2581#discussion_r23043717

рдпрджрд┐ рд╡рд╣ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред

@rodrimati1992 рдЖрдк рд╢рд╛рдпрдж (): IsTrue<{N < 128}> рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдмрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдмрд╛рдзрд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? (рдХреНрдпреЛрдВрдХрд┐ N < 128 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рд╕реЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк trait Lt128<const N: usize> = IsTrue<{N < 128}>; рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ where [(); 128 - N], рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдШрдмрд░рд╛рд╣рдЯ рд╣реЛрдЧреА)ред

@rodrimati1992 рдЖрдк рд╢рд╛рдпрдж (): IsTrue<{N < 128}> рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдмрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдмрд╛рдзрд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? (рдХреНрдпреЛрдВрдХрд┐ N < 128 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рд╕реЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк trait Lt128<const N: usize> = IsTrue<{N < 128}>; рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ where [(); 128 - N], рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдШрдмрд░рд╛рд╣рдЯ рд╣реЛрдЧреА)ред

рддреЛ, рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ ?:

trait AssertLessThan128<const N:usize>=
    Assert<{N<=128}, (
        Str<"uint cannot be constructed with a size larger than 128,the passed size is:",
        Usize<N>>
    ) >;

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

(Str<"uint cannot be constructed with a size larger than 128,the passed size is:",Usize<N>>)

рдЬреЛ рдореБрдЭреЗ where [(); 128 - N], рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣рд╛рдпрдХ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рд╣реБрдИред

рдЖрдк if !(N < 128) { panic!("...") } рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ const trait рдмрд╛рдзрд╛рдУрдВ (рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣) рдЖрдиреЗ рддрдХ std::fmt рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рдЗрд╕ рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб)ред

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

@rodrimati1992 рджреЗрдЦреЗрдВ https://github.com/rust-lang/rfcs/blob/master/text/2345-const-panic.md , рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ const panic!() рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реЛ (рдЕрдиреБрдорд╛рди рдкрд░ рдпрд╣ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдХрд╕реНрдЯрдо рд╕реНрд╡рд░реВрдкрдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛)ред

@rodrimati1992 рдЖрд╣, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЪрддреБрд░ рдЪрд╛рд▓ рд╣реИ!

рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ?

рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЕрднреА рднреА https://github.com/rust-lang/rust/pull/53645 AFAIK рд╣реИред

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

рдСрдл-рд╡рд┐рд╖рдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдЯреБрдХрдбрд╝реЛрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдпрд╛ рдХрд╛рдВрдЯрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ Item рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдХрд▓рди-рд╕рдордп-рдирд┐рд╢реНрдЪрд┐рдд-рдЖрдХрд╛рд░ рд╕рд░рдгреА рд╣реЛ? рдпрд╣ рдПрдХ for рд▓реВрдк рдХреЛ рдПрдХ рдЕрдХрд╛рдЯреНрдп рдкреИрдЯрд░реНрди рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ/рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреЛ рдЪрдВрдХ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЪрд░ рдореЗрдВ рдореИрдк рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ for (first, second) in arr.chunks(2) рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ (рдмрд┐рдирд╛ рдХрд┐рд╕реА рдФрдЪрд┐рддреНрдп рдХреЗ) рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реВрдк рд╕реЗ) рдХрд┐ рдпрд╣ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

@jeffvandyke рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ ChunksExact рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ

@jeffvandyke рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ ChunksExact рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ

рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреАрдЖрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ ChunksExact рдФрд░ рдЗрд╕рдХреЗ рд░реВрдкреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдРрд╕реЗ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝рддрд╛ рд╣реИ :)

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

рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдФрд░ рд╕реНрдерд┐рд░ рдХрд░рдирд╛

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рди рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ

рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ impl рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА

#![feature(const_generics)]

struct The<const Val: u64>();

impl<const Val: u64> The<Val> {
    fn the() {
        println!("{}", Val);
    }
}

рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЧрдИ рдереА, рд╕рдВрдХрд▓рдХ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛

thread 'rustc' panicked at 'slice index starts at 1 but ends at 0', src/libcore/slice/mod.rs:2419:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
   1: std::sys_common::backtrace::_print
   2: std::panicking::default_hook::{{closure}}
   3: std::panicking::default_hook
   4: rustc::util::common::panic_hook
   5: std::panicking::rust_panic_with_hook
   6: std::panicking::continue_panic_fmt
   7: rust_begin_unwind
   8: core::panicking::panic_fmt
   9: core::slice::slice_index_order_fail
  10: rustc_resolve::Resolver::resolve_ident_in_lexical_scope
  11: rustc_resolve::Resolver::resolve_path
  12: rustc_resolve::Resolver::resolve_path_without_parent_scope
  13: rustc_resolve::Resolver::smart_resolve_path_fragment
  14: rustc_resolve::Resolver::smart_resolve_path
  15: <rustc_resolve::Resolver<'a> as syntax::visit::Visitor<'tcx>>::visit_ty
  16: syntax::visit::walk_generic_args
  17: syntax::visit::walk_ty
  18: rustc_resolve::Resolver::with_generic_param_rib
  19: rustc_resolve::Resolver::resolve_item
  20: rustc_resolve::Resolver::resolve_crate
  21: rustc::util::common::time
  22: rustc_interface::passes::configure_and_expand_inner
  23: rustc_interface::passes::configure_and_expand::{{closure}}
  24: <rustc_data_structures::box_region::PinnedGenerator<I, A, R>>::new
  25: rustc_interface::passes::configure_and_expand
  26: <rustc_interface::queries::Query<T>>::compute
  27: <rustc_interface::queries::Query<T>>::compute
  28: <rustc_interface::queries::Query<T>>::compute
  29: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::prepare_outputs
  30: rustc_interface::interface::run_compiler_in_existing_thread_pool
  31: <std::thread::local::LocalKey<T>>::with
  32: <scoped_tls::ScopedKey<T>>::set
  33: syntax::with_globals

рддреНрд░реБрдЯрд┐ const рдореЗрдВ impl<const Val: u64> рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

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

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдЯрдмреНрд╕ рд╕реЗ рдЖрдЙрдЯ-рдСрдл-рдмрд╛рдЙрдВрдб рд╕реНрд▓рд╛рдЗрд╕ рдПрдХреНрд╕реЗрд╕ рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред @varkor @yodaldevoid , рдХреНрдпрд╛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рдФрд░ рдХрд╣реАрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╕рд┐рд░реНрдл 2 рдкреНрд░рд╢реНрди:

  1. рдХреНрдпрд╛ рдХреЛрдИ рдПрдХрд▓ рдХрд╛рд░реНрдп рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ 2 рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:

    const fn foo<A: const T>(x: T)  // `A` const implements `T`
    fn foo<A: T>(x: A)              // `A` implements `T` normally
    

    рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, foo const iff A: const T ; рдпрджрд┐ A рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ T , рддреЛ рдпрд╣ рдЕрднреА рднреА рдмрд╛рдзреНрдпрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди foo рдЕрдм рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ (рдЙрджрд╛. where A::Output : Bar ) рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд░рд▓ рдЕрдВрдХрдЧрдгрд┐рдд рднреА рд╣реИ:

    // This only accepts types that const implement `T`
    const fn square_const<T: const Mul>(x: T) -> T {
      x*x
    }
    
    // This accepts types that implement `T` any way, but it is not const
    // This function behaves identically to `square_const`
    // But has a different signature and needs a different name
    fn square<T: Mul>(x: T) -> T {
      square_const(x)
    }
    
    let a: u8 = 5;
    let b: FooNumber = FooNumber::new();
    square_const(a); // `u8` const implements Mul
    square(b); // `FooNumber` implements `Mul` normally, so we need a separate function?
    

    рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛?)

  2. _[рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг]:_ рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдХрдВрдкрд╛рдЗрд▓-рдЯрд╛рдЗрдо рдпрд╛ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ cfg!() рд╕рдорд╛рди рдХреБрдЫ рдореИрдХреНрд░реЛ рдПрдХ рдЙрдкрдпреЛрдЧреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрдЧрд╛, рдпрджрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреНрдп рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред cfg!() рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ (/ рдЕрдиреБрдорд╛рди) рдХрд┐ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрдиреНрд╕реНрдЯ рдпрд╛ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рднреА рд╕рдВрдХрд▓рди рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ -рд╕рдордпред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрди рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

@ рдХреЛрдбрд░-256

  1. рд╣рд╛рдВ, https://github.com/rust-lang/rfcs/pull/2632 рджреЗрдЦреЗрдВред
  2. рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рднреА рд╣реИред

@ рдХреЛрдбрд░ -256 рдпреЗ рджреЛрдиреЛрдВ рдкреНрд░рд╢реНрди рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХреЙрдиреНрд╕реНрдЯ рдлрдВрдХреНрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХрдВрдкрд╛рдЗрд▓-рдЯрд╛рдЗрдо рдкрд░ рдЪрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЙрдиреНрд╕ (рдЬреИрд╕реЗ foo<2>() ) рдкрд░ рдЬреЗрдиреЗрд░рд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ RFC 2000 рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рдирд╣реАрдВ рдорд┐рд▓реЗред

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

@yodaldevoid рдУрд╣, рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рдпрд╣ рдХрд╣рд╛рдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП?

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

рдореИрдВ рдЬреЛ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛рд░реНрдп рд╣реИред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред

рдЖрдкрдХреА square_const рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ square рд╕реНрдерд╛рди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд: рдЗрд╕реЗ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рд╕рдордХрдХреНрд╖ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП https://github.com/rust-lang/rfcs/pull/2632 рджреЗрдЦреЗрдВ (рд╕рд╛рде рд╣реА, рд╡рд╣ рдереНрд░реЗрдб const fn рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реАрдорд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рднреА рдмрд╛рддрдЪреАрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рд╣реИ)ред

@varkor рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ (рдЪреВрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реАрдорд╛рдПрдВ рдмрджрд▓рддреА рд╣реИрдВ), рд▓реЗрдХрд┐рди рдореИрдВ рдЬрдВрдЧ-рд▓реИрдВрдЧ/рдЖрд░рдПрдлрд╕реАрдПрд╕ # 2632 рдореЗрдВ рдкреВрдЫреВрдВрдЧрд╛ред

рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ:

рдХреЛрдб:

#![feature(const_generics)]

use std::marker::PhantomData;

struct BoundedU32<const LOWER: u32, const UPPER: u32> {
    value: u32,
    _marker: PhantomData<(LOWER, UPPER)>,
}

рд╕рдВрдХрд▓рдХ:

thread 'rustc' panicked at 'slice index starts at 1 but ends at 0', src/libcore/slice/mod.rs:2419:5
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.35.0-nightly (719b0d984 2019-03-13) running on x86_64-unknown-linux-gnu

note: compiler flags: -C codegen-units=1 -C debuginfo=2 --crate-type lib

note: some of the compiler flags provided by cargo are hidden

error: Could not compile `playground`.

To learn more, run the command again with --verbose.

@ рдЬреЗрдЬрд╝рд╛ : #![feature(const_generics)] рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖрдиреЗ рдкрд░ рд╣рдо рдПрдХ рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИ)ред

@varkor рд░реБрдХреЛ, @Jezza рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ _marker: PhantomData<(LOWER, UPPER)> - рд╡реЗ рджреЛ const рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, rustc_resolve рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХреА?

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

~ @eddyb : рдпрд╣ ICE resolve_ident_in_lexical_scope рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ https://github.com/rust-lang/rust/issues/58307 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред~

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╢рд╛рдпрдж рдирд╣реАрдВ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ macro_rules! рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛:

#![feature(const_generics)]

struct S<const C: u8>(C);

"рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░, рдкрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди" рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ICE рдХреЛ рд╣рд▓ рдХрд░реЗрдВред

рд╕реВрдЪрдХрд╛рдВрдХ рдпрд╣рд╛рдВ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ:
https://github.com/rust-lang/rust/blob/master/src/librustc_resolve/lib.rs#L3919

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд░рд╛рдд рдХрд╛ рдЙрддреНрдкрд╛рджрди "рдкреИрд░рд╛рдореАрдЯрд░ N рдХрд╛ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ":

struct Foo<const N: usize> { }

рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛ рд╕реЗ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╕рдВрдХрд▓рди рдХреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдзреВрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╣реИ?

@newpavlov рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдХреЛрдИ PhantomData<n> рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ PhantomData<[(); N]> рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, AFAIU рдХреЗ рд░реВрдк рдореЗрдВ PhantomData рдмрд┐рдВрджреБ рд╡рд┐рдЪрд░рдг рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ AFAIU рдореЗрдВ рд╡рд┐рдЪрд░рдг wrt рдХреА рдХреЛрдИ рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ред

рдФрд░ рдпрд╣ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм N рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ usize ред

рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдЖрд░рдПрдлрд╕реА рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди рдХреЙрдиреНрд╕реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рдерд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдмрдЧ рд╣реИред

@withboats рдХреНрдпрд╛ рдЖрдк

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЖрд░рдПрдлрд╕реА рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВ

@withboats рдХреНрдпрд╛ рдЖрдк рдпрд╣

@yodaldevoid рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: https://github.com/rust-lang/rust/issues/44580#issuecomment -419576947ред рд▓реЗрдХрд┐рди рдпрд╣ RFC PR рдореЗрдВ рдирд╣реАрдВ рдерд╛, рдмрд▓реНрдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдерд╛ред

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

@HadrienG2 рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@withboats рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд░реНрд╖реЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ

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

рдпрд╣рд╛рдВ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдкрд░ рдЕрдм рддрдХ рдХреА рдкреНрд░рдЧрддрд┐ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдкрд░ рдХрд╛рдо рдареАрдХ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рдЬрд░реВрд░рдд рдереАред @jplatte рдиреЗ https://github.com/rust-lang/rust/pull/45930 рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рд╕рдВрднрд╛рд▓рд╛ @jplatte рдиреЗ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░

@yodaldevoid рдФрд░ рдореИрдВрдиреЗ рдЙрдард╛рдпрд╛ рдЬрд╣рд╛рдВ @jplatte рдЫреЛрдбрд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдкрд╛рдпрд╛ рдХрд┐ рдкреНрд░рдЧрддрд┐ рдХрд░рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдХреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ https://github.com/rust-lang/rust/pull/48149 , https://github.com/rust-lang/rust/pull 48452 , https://github.com/rust-lang/rust/pull/48523 , https://github.com/rust-lang/rust/pull/51880ред

рдЗрд╕рдХреЗ рд╕рд╛рде, рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдпрд╛рдирд╛ рдореЗрдВ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрдм рд╕реЗ, @yodaldevoid рдФрд░ рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ: https://github.com/rust-lang/rust/pull/58191 , https://github.com/rust-lang/rust /pull/58503 , https://github.com/rust-lang/rust/pull/58581 , https://github.com/rust-lang/rust/pull/58583 , https://github.com/rust -рд▓реИрдВрдЧ/рд░рд╕реНрдЯ/рдкреБрд▓/59170 , https://github.com/rust-lang/rust/pull/59355 , https://github.com/rust-lang/rust/pull/59415 , https://github .com/rust-lang/rust/pull/60058 , https://github.com/rust-lang/rust/pull/60280 , https://github.com/rust-lang/rust/pull/60284 рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд╛рд▓ рд╣реА рдореЗрдВ https://github.com/rust-lang/rust/pull/59008ред (рдЗрдиреНрд╣реЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдореБрдЦреНрдп рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред)


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

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

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

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

рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдорд╣реАрдиреЛрдВ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ @varkor :) рдореИрдВ рдХреЛрдИ рдЬрдВрдЧ рдЬрд╛рджреВрдЧрд░ рдирд╣реАрдВ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ FIXME рдПрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рдмрдзрд╛рдИ рд╣реЛ @jplatte , @yodaldevoid рдФрд░ @varkorред рдЧрдгрд┐рдд рдХреЗ рдХрд╛рдореЛрдВ рдореЗрдВ рдХрд╕реНрдЯрдо Array-like рд▓рдХреНрд╖рдгреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдХрджрдо рд╣реИред

рдЖрдордиреЗ рд╕рд╛рдордиреЗ...

@varkor рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╢рд╛рдпрдж рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдХрд┐ рдХреНрдпрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=d84ffd15226fcffe02c102edb8ae5cf1

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, FIXME рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП: https://oli-obk.github.io/fixmeh/

@ рдорд╛рд░реНрдХ-рдЖрдИрдПрдо {} рдЖрд╕рдкрд╛рд╕ FOO рдбрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдРрд╕реЗ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЙрджреНрдзрд░рдг https://github.com/rust-lang/rfcs/blob/master/text/2000-const-generics.md :

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

{expression} рдХреЗрд╡рд▓ рддрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рдПрдХ рдмрдЧ рд╣реИред

рдЙрд╕реА RFC рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдП:

рдкрд╣рдЪрд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐: рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рд╕рдХрд╛ рдЖрдЧреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗред рдЗрд╕рдореЗрдВ рд╕рднреА рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдЬреИрд╕реЗ 3, "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб", foo_barред

: +1: рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЕрднреА-рдЕрднреА рдорд┐рд▓рд╛ https://github.com/rust-lang/rust/blob/ef9a876f8297e26859469b004047e0946ed10565/src/libsyntax/parse/parser.rs#L6056

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

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

рдЕрджреНрднреБрдд рдХрд╛рд░реНрдпред FIXME рдХреБрдЫ рдХреЛ рдареАрдХ рдХрд░рдХреЗ, рдпрджрд┐ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд░рд╕реНрдЯрд╕реА рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ FIXME https://github.com/rust-lang/rust/blob/master/src/librustc_mir/monomorphize/item.rs# рдкрд░ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛:

trait Foo {
    const N: usize;
    fn foo() -> [u8; Self::N];
}

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо "рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдореЗрдВ Self рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП N рдирд╛рдордХ рдХреЛрдИ рд╕рдВрдмрджреНрдз рдЖрдЗрдЯрдо рдирд╣реАрдВ рдорд┐рд▓рд╛" рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдб FIXME s рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?

@yodaldevoid

рддреНрд╡рд░рд┐рдд рдкреНрд░рд╢реНрди, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИред

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

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

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

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

рдЙрджрд╛рд╣рд░рдг:

fn greet<const NAME:&'static str>(){
    println!("Hello, {}.",NAME);
}
const HIS_NAME:&'static str="John";
greet::<HIS_NAME>();
greet::<"Dave">();

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ NAME рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╣рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ HIS_NAME рдЯрд░реНрдмреЛрдлрд┐рд╢ рдСрдкрд░реЗрдЯрд░ ( ::< > ) рдХреЗ рднреАрддрд░ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИред

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

@newpavlov рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

@yodaldevoid @robarnold

рдЖрд╣, рддреБрдореНрд╣реЗрдВ рдорд┐рд▓ рдЧрдпрд╛ред рдореИрдВрдиреЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдорд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЯрд╛рдЗрдк/рдлрдВрдХреНрд╢рди рд╕рд┐рдЧреНрдиреЗрдЪрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдХреЙрдиреНрд╕ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рджреВрд╕рд░реЛрдВ рдХреА рд░рд╛рдп рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП #60466 рдЦреЛрд▓рд╛ рд╣реИред

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

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

рдЖрдкрдХреЛ {} s рдХреЛ N , impl<const N: usize> Dummy<{N}> {} рдЖрд╕рдкрд╛рд╕ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╣рд╛рдБ рддрдм рдЖрдкрдХреЛ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред

рдЖрд╣, рдзрдиреНрдпрд╡рд╛рджред рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдП!

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

... рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдпрд╣ рд╢рд╛рдпрдж рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

#![feature(const_generics)]

trait Dummy {}

struct Vector<const N: usize> {
    data: [f32; N],
}

impl<const N: usize> Dummy for Vector<{N}> {}

... рдФрд░ рдпрд╣ рдЕрднреА рднреА E0207 рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

warning: the feature `const_generics` is incomplete and may cause the compiler to crash
 --> src/lib.rs:1:12
  |
1 | #![feature(const_generics)]
  |            ^^^^^^^^^^^^^^

error[E0207]: the const parameter `N` is not constrained by the impl trait, self type, or predicates
 --> src/lib.rs:9:12
  |
9 | impl<const N: usize> Dummy for Vector<{N}> {}
  |            ^ unconstrained const parameter

error: aborting due to previous error

For more information about this error, try `rustc --explain E0207`.
error: Could not compile `small-matrix`.

To learn more, run the command again with --verbose.

... рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ @varkor рдХрд╛ рдЕрд░реНрде # 60466 рдореЗрдВ "рдХреЙрдиреНрд╕реНрдЯреНрд╕ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рдореБрджреНрджреЗ" рд╕реЗ рд╣реИ:

#![feature(const_generics)]

fn dummy<const N: usize>() -> [f32; N] {
    [0.; N]
}

->

warning: the feature `const_generics` is incomplete and may cause the compiler to crash
 --> src/lib.rs:1:12
  |
1 | #![feature(const_generics)]
  |            ^^^^^^^^^^^^^^

error: internal compiler error: cat_expr Errd
 --> src/lib.rs:3:44
  |
3 |   pub fn dummy<const N: usize>() -> [f32; N] {
  |  ____________________________________________^
4 | |     [0.; N]
5 | | }
  | |_^

error: internal compiler error: cat_expr Errd
 --> src/lib.rs:4:5
  |
4 |     [0.; N]
  |     ^^^^^^^

error: internal compiler error: QualifyAndPromoteConstants: Mir had errors
 --> src/lib.rs:3:1
  |
3 | / pub fn dummy<const N: usize>() -> [f32; N] {
4 | |     [0.; N]
5 | | }
  | |_^

error: internal compiler error: broken MIR in DefId(0/0:3 ~ small_matrix[5b35]::dummy[0]) ("return type"): bad type [type error]
 --> src/lib.rs:3:1
  |
3 | / pub fn dummy<const N: usize>() -> [f32; N] {
4 | |     [0.; N]
5 | | }
  | |_^

error: internal compiler error: broken MIR in DefId(0/0:3 ~ small_matrix[5b35]::dummy[0]) (LocalDecl { mutability: Mut, is_user_variable: None, internal: false, is_block_tail: None, ty: [type error], user_ty: UserTypeProjections { contents: [] }, name: None, source_info: SourceInfo { span: src/lib.rs:3:1: 5:2, scope: scope[0] }, visibility_scope: scope[0] }): bad type [type error]
 --> src/lib.rs:3:1
  |
3 | / pub fn dummy<const N: usize>() -> [f32; N] {
4 | |     [0.; N]
5 | | }
  | |_^

thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:356:17
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.36.0-nightly (cfdc84a00 2019-05-07) running on x86_64-unknown-linux-gnu

note: compiler flags: -C debuginfo=2 -C incremental --crate-type lib

note: some of the compiler flags provided by cargo are hidden

@HadrienG2
#60619 рдФрд░ #60632 рджреЗрдЦреЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=e45b7b5e881732ad80b7015fc2d3795c

рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ:

error[E0119]: рдкреНрд░рдХрд╛рд░ MyArray<_, _> рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ std::convert::TryFrom<[type error]> рдХреЗ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ Try{From,Into} рдХрд╛ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛: playpen

@oberien рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, T рдПрдХ рд╡рд┐рджреЗрд╢реА рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ T: Into<Foo<T>> рдзрд╛рд░рдг рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, [рдЯреА; рдПрди] libcore рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ #[fundamental] (tbh рдореБрдЭреЗ рдпрд╣ рднреА рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ), рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдорд╛рдзрд╛рдирдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ [T; N]: Into<MyArray<T, {N}>> рдзрд╛рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдПрдХ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ?

[...] рдФрд░ #[fundamental] [...]

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

@varkor @yodaldevoid рддреЛ, рдореИрдВ рдЕрднреА рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ S<{N == 0}> ( S const bool рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ N a const usize ) рд╕рдВрдХрд▓рдХ рдХреА рдирдЬрд░ рдореЗрдВ рди рддреЛ S<{true}> рдпрд╛ S<{false}> рд╣реИ (рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдпрд╛ рдирд╣реАрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реАрдорд╛ред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдПрдХреАрдХрд░рдг рддрд░реНрдХ рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдкреБрдирд╢реНрдЪрд░реНрдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣...

// Machinery for type level if-then-else
struct Test<const B: bool>;
trait IfFn<S, Z> { type Out; }
impl<S, Z> IfFn<S, Z> for Test<{true }> { type Out = S; }
impl<S, Z> IfFn<S, Z> for Test<{false}> { type Out = Z; }

// Returns an u8 if B is true, else an u16
fn should_be_ok<const B: bool>() -> <Test<{B}> as IfFn<u8, u16>>::Out {
    0
}

... рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

error[E0277]: the trait bound `Test<B>: IfFn<u8, u16>` is not satisfied
  --> src/lib.rs:32:1
   |
32 | / fn should_be_ok<const B: bool>() -> <Test<{B}> as IfFn<u8, u16>>::Out {
33 | |     0
34 | | }
   | |_^ the trait `IfFn<u8, u16>` is not implemented for `Test<B>`
   |
   = help: the following implementations were found:
             <Test<false> as IfFn<S, Z>>
             <Test<true> as IfFn<S, Z>>

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЗ рдкрд╛рд╕ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ 0 рд╢рд╛рдмреНрджрд┐рдХ u8 рдпрд╛ u16 . рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: 0u8 as _

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╡рд╣реА рд░рд╣рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдПрдХ рдРрд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдХрдо рд╕реЗ рдХрдо рдЫреЛрдЯрд╛ рд╣реИ:

struct Test<const B: bool>;
trait Not { const B: bool; }
impl Not for Test<{true }> { const B: bool = false; }
impl Not for Test<{false}> { const B: bool = true; }

fn should_be_ok<const B: bool>() -> bool {
    <Test<{B}> as Not>::B
}

Test<{B}> рдХрдерд┐рдд рд░реВрдк рд╕реЗ Not рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрднреА рднреА рд╡рд┐рдлрд▓ рд╣реИред

рдирдорд╕реНрддреЗ ! рдореБрдЭреЗ рд╕рдЪ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЙрдиреНрд╕реНрдЯ рд╡реИрд▓реНрдпреВ рдкрд░ рдПрдХреАрдХрд░рдг рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХрд╛рдо ("рдЪрд╛рдХ") рдореЗрдВ рдПрдХ рдирдИ рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ rustc рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ _may_ рдХреЛ рдЪрд╛рдХ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдлрд┐рд░ рднреА, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрд╛ рдЪрд╛рдХ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рдЧрддрд┐ рдХреЗ рд▓рд┐рдП https://github.com/rust-lang/rust/issues/48049 рджреЗрдЦреЗрдВред

@HadrienG2 рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛

@carado рдПрдХреАрдХрд░рдг

@HadrienG2 рдПрдХ рдмрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕

struct Test<const B: bool>;
trait Not { const B: bool; }
impl<const B: bool> Not for Test<B> { const B: bool = false; }
impl Not for Test<{false}> { const B: bool = true; }

fn should_be_ok<const B: bool>() -> bool {
    <Test<{B}> as Not>::B
}

рдЖрдк рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдердХрд╛рд╡рдЯ рдХреА рдЬрд╛рдБрдЪ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдореИрдЪ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдгрд╛рд▓реА рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реИред рдХрд┐рд╕реА рд╕реВрддреНрд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИред

@yodaldevoid https://github.com/rust-lang/rust/issues/61537 рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

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

рдУрд╣, рдореЗрд░рд╛ рдмреБрд░рд╛ рддреЛ! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

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

рдЙрджрд╛рд╣рд░рдг:

fn factorial<const X: i32>() -> Option<i32> {
    match X {
        i if i < 0 => None,
        0 => Some(1),
        1 => Some(1),
        i => Some(factorial::<i - 1>().unwrap() + i)
    }
}

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

@dancojocaru2000 const рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдореВрд▓реНрдп-рд╕реНрддрд░реАрдп рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=4994b7ca9cda0bfc44f5359443431378 , рдЬреЛ рд╣реЛрддрд╛ рд╣реИ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рд▓реЗрдХрд┐рди рди рддреЛ const рдЬреЗрдирд░рд┐рдХ рд╣реИрдВред

рдЖрдк рд╕реНрдирд┐рдкреЗрдЯ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ match рдХреЛ const рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рдЖрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЧреБрдгрди рдХреЗ рд╕рд╛рде рдпреЛрдЧ рднреА рдорд┐рд▓рд╛рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред

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

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░рд┐рдХрд▓рд┐рдд рд╕рд░рд▓ рдХрд╛рд░реНрдп

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреА const fn ред

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХрд╛ рдХреЛрдб рд▓рдЧрднрдЧ-рдЬреИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛

#![feature(const_generics)]

fn factorial<const X: i32>() -> Option<i32> {
    match X {
        i if i < 0 => None,
        0 => Some(1),
        1 => Some(1),
        i => Some(factorial::<{X - 1}>().unwrap() + i)
    }
}

fn main() {
    println!("{:?}", factorial::<10>());
}

рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

warning: the feature `const_generics` is incomplete and may cause the compiler to crash
 --> src/main.rs:1:12
  |
1 | #![feature(const_generics)]
  |            ^^^^^^^^^^^^^^

error: internal compiler error: src/librustc_codegen_ssa/mir/operand.rs:79: unevaluated constant in `OperandRef::from_const`

рдпрджреНрдпрдкрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

#![feature(const_generics)]

fn factorial<const X: u32>() -> u32 {
    match X {
        0 => 1,
        1 => 1,
        _ => factorial::<{ X - 1 }>() + X,
    }
}

fn main() {
    println!("{:?}", factorial::<10>());
}

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХреЛрдИ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕реЗ рдФрд░ рд╕рд╛рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЕрд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛

рдкреАрдиреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдлреИрдХреНрдЯреЛрд░рд┐рдпрд▓,

рдЙрд╕рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдкреЗрдирдо рдХреНрд░реЗрдЯ рджреЗрдЦреЗрдВ

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХрд╛ рдХреЛрдб рд▓рдЧрднрдЧ-рдЬреИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛

factorial::<0> рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп _ => factorial::<{X - 1}>() * X рдХреЛ рдмрд╣реБрдд рд╕рд╣реА рдХреЛрдбрдЬреЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрддрд░реНрдкреНрд░рд╡рд╛рд╣ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

#![feature(const_generics)]

trait NeedsDrop<const B: bool> { }
impl<T> NeedsDrop<std::mem::needs_drop<T>()> for T { }

fn foo<D: NeedsDrop<false>>(d: D) { }

рдпрд╣ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ N <= 32 рдХреЗ рд▓рд┐рдП рдХреБрдЫ [T; N] рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╛рдд рдореЗрдВ рдирд╡реАрдирддрдо ( 4bb6b4a5e 2019-07-11 ) рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ the trait `std::array::LengthAtMost32` is not implemented for `[u64; _]`

#[derive(Copy, Clone, PartialEq, Eq)]
pub struct BigintRepresentation<
    const N: usize
>(pub [u64; N]) 
where [u64; N]: std::array::LengthAtMost32, 
   [u64; N*2]: std::array::LengthAtMost32;

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ:

#[derive(Copy, Clone, PartialEq, Eq)]
pub struct BigintRepresentation<
    const N: usize
>(pub [u64; N]) 
where [u64; N]: std::array::LengthAtMost32;

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ N*2 рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдзрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдпрд╛ рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдирд╣реАрдВ рд╣реИ

@shamatar N*2 рдХреЛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рд╕реЗ рдШрд┐рд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ `[u64; {рдПрди*2}]

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд▓рдХреНрд╖рдг рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛" рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╡реНрдпреБрддреНрдкрдиреНрди рдореИрдХреНрд░реЛрдЬрд╝ рд╕реЗ рдЖрддреА рд╣реИрдВ рдЬреЛ [u64; {N*2}] рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рдЬреЛрдбрд╝рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдЖрдИрд╕реАрдИ рд╣реИ:

```рддреНрд░реБрдЯрд┐: рдЖрдВрддрд░рд┐рдХ рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐: рдирд┐рд░рдВрддрд░ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдХ рдЕрдирджреЗрдЦреА рддреНрд░реБрдЯрд┐ рдереА: TooGeneric
--> src/main.rs:5:1
|
5 | / рдкрдм рд╕рдВрд░рдЪрдирд╛ BigintRepresentation<
6 | | рдХреЙрдиреНрд╕реНрдЯ рдПрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
7 | | >(рдкрдм [u64; рдПрди])
8 | | рдЬрд╣рд╛рдВ [рдпреВ 64; рдПрди]: рдПрд╕рдЯреАрдбреА::рд╕рд░рдгреА::LengthAtMost32,
9 | | [рдпреВ 64; {рдПрди*2}]: рдПрд╕рдЯреАрдбреА::рд╕рд░рдгреА::LengthAtMost32;
| |________________________________________________^

рдереНрд░реЗрдб 'rustc' ' delay_span_bug рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ', src/librustc_errors/lib.rs:366:17 рд╕реЗ рдШрдмрд░рд╛ рдЧрдпрд╛
рдиреЛрдЯ: рдмреИрдХрдЯреНрд░реИрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RUST_BACKTRACE=1 рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВред

рдпрд╣ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

#![feature(const_generics)]

struct Foo<const X: usize>([u8; X]);

impl<const X: usize> Foo<X> {
    fn new() -> Self {
        Self([0u8; X])
    }
}
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
 --> src/lib.rs:1:12
  |
1 | #![feature(const_generics)]
  |            ^^^^^^^^^^^^^^

error[E0573]: expected type, found const parameter `X`
 --> src/lib.rs:5:26
  |
5 | impl<const X: usize> Foo<X> {
  |                          ^
  |                          |
  |                          not a type
  |                          help: try using the variant's enum: `regex_syntax::ast::HexLiteralKind`

error[E0107]: wrong number of const arguments: expected 1, found 0
 --> src/lib.rs:5:22
  |
5 | impl<const X: usize> Foo<X> {
  |                      ^^^^^^ expected 1 const argument

error[E0107]: wrong number of type arguments: expected 0, found 1
 --> src/lib.rs:5:26
  |
5 | impl<const X: usize> Foo<X> {
  |                          ^ unexpected type argument

error: aborting due to 3 previous errors

@npmccallum рдЖрдкрдХреЛ Foo<{X}>

@ pengowen123 рд╣рд╛рдБ, рдпрд╣ рд╕рдВрдХрд▓рд┐рдд (рд╕рд╛рде рд╕рдВрдХрд▓рдХ рджреБрд░реНрдШрдЯрдирд╛рдУрдВ constant in type had an ignored error: TooGeneric ) рдХреЗ рдмрд┐рдирд╛ derive , рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╕рд╡рд╛рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ "рдбрдмрд▓ рдмрд╛рдзрд╛" рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИ рдХрд┐ N <= 32 рдФрд░ N <= 16 рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╢рд╛рдпрдж рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, [T; N] рдФрд░ Foo<{N}> рд╡рд┐рд╢реЗрд╖-рдХреЗрд╕реЗрдб рд╣реИрдВ рдЬрд┐рдирдореЗрдВ N рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд▓реНрдХрд┐ рдмрдбрд╝реЗ рдореБрджреНрджреЗ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рд╕реАрдзреЗ N рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВред

Self рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рджреБрд░реНрдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕реЗ Value<{C}> рд▓рд┐рдП рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдкрд░ рднреА рдпрд╣ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

#![feature(const_generics)]

struct Value<const C: usize>;

impl<const C: usize> Value<{C}> {
    pub fn new() -> Self {
        unimplemented!()
    }
}

pub fn main() {
    let value = Value::new();
}

рдЖрдк рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд▓реЗрдкреЗрди рдкрд░ рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддреЗ: https://play.rust-lang.org/?version=nightly&mode=release&edition=2018&gist=d3fda06d2e8b3eb739afa99d5da84a33

#61338 рдХреЗ рд╕рдорд╛рди, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕рдВрдХрд▓рди рд╣реИред

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░рд┐рдХрд▓рд┐рдд рд╕рд░рд▓ рдХрд╛рд░реНрдп

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреА const fn ред

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХрд╛ рдХреЛрдб рд▓рдЧрднрдЧ-рдЬреИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛

#![feature(const_generics)]

fn factorial<const X: i32>() -> Option<i32> {
    match X {
        i if i < 0 => None,
        0 => Some(1),
        1 => Some(1),
        i => Some(factorial::<{X - 1}>().unwrap() + i)
    }
}

fn main() {
    println!("{:?}", factorial::<10>());
}

рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

warning: the feature `const_generics` is incomplete and may cause the compiler to crash
 --> src/main.rs:1:12
  |
1 | #![feature(const_generics)]
  |            ^^^^^^^^^^^^^^

error: internal compiler error: src/librustc_codegen_ssa/mir/operand.rs:79: unevaluated constant in `OperandRef::from_const`

рдпрджреНрдпрдкрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

#![feature(const_generics)]

fn factorial<const X: u32>() -> u32 {
    match X {
        0 => 1,
        1 => 1,
        _ => factorial::<{ X - 1 }>() + X,
    }
}

fn main() {
    println!("{:?}", factorial::<10>());
}

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ, const fn рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдПрди-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдо = 0 рдХреА рд╕рдорд╛рдкреНрддрд┐ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

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

#![feature(const_generics)]
struct MyArray<T: Default, const len: usize> {
    real_array: [T; len]
}

impl<T: Default, const len: usize> MyArray<T, {len}> {
    fn new() -> Self {
        return MyArray {
            real_array: [Default::default(); len]
        }
    }
}

рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рдгреА рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐:

error: array lengths can't depend on generic parameters
 --> src/main.rs:9:46
  |
9 |             real_array: [Default::default(); len]
  |                                              

рдореИрдВрдиреЗ рдХреЙрдиреНрд╕реНрдЯ рд╡реИрд▓реНрдпреВ рдХреЛ рдЬреЗрдиреЗрд░рд┐рдХ рд╡реИрд▓реНрдпреВ рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред

рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рддрдм рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

error: internal compiler error: src/librustc/ty/subst.rs:597: const parameter `height/#0` (Const { ty: usize, val: Param(height/#0) }/0) out of range when substituting substs=[]

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

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

рд╡рд╣рд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдкреНрд░рдпрд╛рд╕ рд╣реИ https://github.com/rust-lang/rust/issues/61415 ред

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

рдХреБрдЫ рд▓реЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ;)

рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЬрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ред

рдпрд╣ рд╕рдмрд╕реЗ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЬрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╡рд╛рдХрдИ рд╕рдЪ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ?

рд▓реЗрдХрд┐рди рд╕рд░рд▓ рдкреВрд░реНрдгрд╛рдВрдХ рднрд╛рд╡ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП

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

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

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

рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, miri рдкрд╣рд▓реЗ рд╕реЗ рд╣реА C++ constexpr рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред
рдФрд░ рдХреЛрдИ рднреА рдХрд┐рд╕реА рдлреИрдВрд╕реА рдЪреАрдЬрд╝ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ N = M рд╕реЗ N + 1 = M + 1 ред

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

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ [expr; N] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП "рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА" рддреНрд░реБрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЙрд╕реА рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо [T; N] рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдП рдмрд┐рдирд╛ N рдмрд╛рд╣рд░ред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдХрд╛рдлреА рдЕрдиреБрднрд╡ рд╣реИред

@varkor , рдореИрдВ rustc рдкрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЦреЛрдЬ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореБрдЭреЗ рдХрджрдо рдмрдврд╝рд╛рдирд╛ рдФрд░ рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдордп рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрдкрдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@varkor , рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд▓рд╛рд╣ рд╣реИ, рддреЛ рдореИрдВ рд╕рднреА рдХрд╛рди рд╣реВрдВ! рдмреЗрдЭрд┐рдЭрдХ рдореБрдЭреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдкрд░ рднреА рджреЗрдЦреЗрдВред

рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдо рдЕрднреА рдХрд░ рд╕рдХрддреЗ рдереЗ, рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ Foo::<{...}> / [expr; ...] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ ( ... рднрд╛рдЧ рдореЗрдВ) рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╢рд░реАрд░ рдХреЗ рднреАрддрд░ рдХрд╣реАрдВ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдпрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [(); [0; 1][0]] рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╢рд╛рдпрдж рд╡реИрд╕реЗ рднреА рдПрдХ рдХреНрд░реЗрдЯрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдФрд░ рдЖрдЬрдХрд▓ рд╡реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд▓реЗрддреЗ рд╣реИрдВ)ред

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

cc @hameerabbasi , @ranweiler

рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди:

  1. рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ (рддрд╛рдХрд┐ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреА рдЬрд░реВрд░рдд рди рдкрдбрд╝реЗ)
  2. рдЗрд╕ рд╕рдордп рдордирдорд╛рдиреА рдкреНрд░рдХрд╛рд░ рдХреЗ const рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдХреМрди рд╕реА рд╕реАрдорд╛рдПрдВ рдореМрдЬреВрдж рд╣реИрдВ?
  3. const рдЬреЗрдирд░рд┐рдХ рдХреА рдХреМрди рд╕реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд/рдХреНрд░реИрд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИрдВ?

PS (рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛:) рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

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

рдФрд░ рдХреЛрдИ рднреА рдХрд┐рд╕реА рдлреИрдВрд╕реА рдЪреАрдЬрд╝ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ N = M N + 1 = M + 1 ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реЙрд▓реНрд╡рд░ рд░рдЦрдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рджреЛ рдПрди-рдмрд┐рдЯреНрд╕ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдЬреЛрдбрд╝ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдУрд╡рд░рдлреНрд▓реЛ рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рд░рд┐рдЯрд░реНрди рдЖрдХрд╛рд░ (рдПрди + 1) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рджреЛ 5-рдмрд┐рдЯ рдирдВрдмрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рд╕реЙрд▓реНрд╡рд░ рдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ N + 1 = 6 ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХрд╛рд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдкрд░ рдмреЛрд▓реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :)

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

рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдкреНрд░реЛрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдиреМрдХрд░реА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд╛рдХ рдЗрдВрдЬрди рдкрд░ рдкрд┐рдЧреНрдЧреАрдмреИрдХрд┐рдВрдЧ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ? рдЕрдлреИрдХ рдпрд╣ рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣реИ рдирд╛?

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

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

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

#![feature(const_generics)]
struct MyArray<T: Default, const len: usize> {
    real_array: [T; len]
}

impl<T: Default, const len: usize> MyArray<T, {len}> {
    fn new() -> Self {
        return MyArray {
            real_array: [Default::default(); len]
        }
    }
}

рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рдгреА рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐:

error: array lengths can't depend on generic parameters
 --> src/main.rs:9:46
  |
9 |             real_array: [Default::default(); len]
  |                                              

рдореИрдВ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рд▓реЗрдХрд┐рди MaybeUninit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛:
https://play.rust-lang.org/?version=nightly&mode=release&edition=2018&gist=3100d5f7a4efd844954a6fa5e8b8c526
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдЪрд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рдордХрд╛рдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рддрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдиреЛрдЯ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рд╣рдореЗрд╢рд╛ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдмрдЧ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

@raidwas рдЬрдм рдЖрдк = рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд┐рдпрдорд┐рдд рд╕реНрдореГрддрд┐ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдореГрддрд┐ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдРрд╕рд╛ рдХрд░реЗрдВ,

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=5d962ce7c553e850030240244608ec00

@ рдХреГрд╖реНрдгрд╛рд╕рдирд╕реА рдзрдиреНрдпрд╡рд╛рдж, рдЕрдЪреНрдЫреА рдкрдХрдбрд╝: рдбреА (рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдлрд╝реНрд▓реЛрдЯреНрд╕ рдХреЛ рдЧрд┐рд░рд╛рдирд╛ рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рд╢реЛрд╖рдХ рдирд╣реАрдВ рд╣реИред

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдлрд╝реНрд▓реЛрдЯреНрд╕ рдХреЛ рдЧрд┐рд░рд╛рдирд╛ рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рд╢реЛрд╖рдХ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЙрдореНрдореАрдж рдХреА рд╣реЛрдЧреА рдХрд┐ рдХрд┐рд╕реА рднреА Copy рдкреНрд░рдХрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдирд┐рдпрдорд┐рдд рд╡рд╛рд▓реЗ рднреА, рдПрдХ рдиреЛ-рдСрдк рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдмрджрд▓рдиреЗ рд▓рд╛рдпрдХ рд╣реИред

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдлрд╝реНрд▓реЛрдЯреНрд╕ рдХреЛ рдЧрд┐рд░рд╛рдирд╛ рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рд╢реЛрд╖рдХ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЙрдореНрдореАрдж рдХреА рд╣реЛрдЧреА рдХрд┐ рдХрд┐рд╕реА рднреА Copy рдкреНрд░рдХрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдирд┐рдпрдорд┐рдд рд╡рд╛рд▓реЗ рднреА, рдПрдХ рдиреЛ-рдСрдк рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдмрджрд▓рдиреЗ рд▓рд╛рдпрдХ рд╣реИред

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

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

рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдкрд░ рдЕрдЧрд░ рдореИрдВрдиреЗ рджреВрд╕рд░реЗ рдЯреЛрдХрд░реЗ (рдирд┐рд░реНрднрд░рддрд╛) рд╕реЗ const-param_ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП _aliases рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рдЯреЛрдХрд░рд╛ рдП, lib
    ```#![рдХреНрд░реЗрдЯ_рдЯрд╛рдЗрдк = "рд▓рд┐рдмрд╛рд╕"]

    ![рдлреАрдЪрд░ (const_generics)]

рдкрдм рдкреНрд░рдХрд╛рд░ рдЙрдкрдирд╛рдо= рд╕рдВрд░рдЪрдирд╛;
рдкрдм рд╕рдВрд░рдЪрдирд╛ рд╕рдВрд░рдЪрдирд╛(рдЯреА);

- crate B

рдмрд╛рд╣рд░реА рдЯреЛрдХрд░рд╛ рдЯреЛрдХрд░рд╛_рдП;
рдХреНрд░реЗрдЯ_рдП :: рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;

рдкрдм fn inner_fn(v: рдЙрдкрдирд╛рдо) {}
```
рдХреНрд░реИрд╢-рд▓реЙрдЧ (44580).txt

@fzzr- рд▓рдЧрддрд╛ рд╣реИ #64730

https://github.com/rust-lang/rust/issues/61624 рдЬреИрд╕рд╛ рднреА рд▓рдЧрддрд╛ рд╣реИ

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

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

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

@mqudsi рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреЛрдЬрдирд╛рдПрдВ рдФрд░ рдЪрд▓ рд░рд╣реЗ рдореВрд▓рднреВрдд рдХрд╛рд░реНрдп рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЗрдирд░рд┐рдХ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИред

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

let mut result: u32 = 0;
let mut digits = 0;
while digits < max_digits && src.has_remaining() {
    match src.get_u8() {
        d<strong i="6">@b</strong>'0'..=b'9' => {
            result = result*10 + (d - b'0') as u32;
            digits += 1;
        },
        b'>' => match result {
            0..=191 => break, // valid range
            _ => return Err(DecoderError::OutOfRange),
        },
        _ => return Err(DecoderError::Malformed)
    }
}

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

#[inline(always)]
fn read_str_digits<B: bytes::buf::Buf>(src: &mut B, stop_word: u8, 
    max_digits: u8, min_value: u32, max_value: u32) -> Result<u32, DecoderError> {
    let mut result: u32 = 0;
    let mut digits = 0;
    while digits < max_digits && src.has_remaining() {
        match src.get_u8() {
            d<strong i="10">@b</strong>'0'..=b'9' => {
                result = result*10 + (d - b'0') as u32;
                digits += 1;
            },
            stop_word => match result {
                min_value..=max_value => break, // valid range
                _ => return Err(DecoderError::OutOfRange),
            },
            _ => return Err(DecoderError::Malformed)
        }
    }

    ...
}

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

#[inline(always)]
fn read_str_digits<const MinValue: u32, const MaxValue: u32, const StopWord: u8, B: bytes::buf::Buf>
(src: &mut B, max_digits: u8) -> Result<u32, DecoderError> {
    let mut result: u32 = 0;
    let mut digits = 0;
    while digits < max_digits && src.has_remaining() {
        match src.get_u8() {
            d<strong i="14">@b</strong>'0'..=b'9' => {
                result = result*10 + (d - b'0') as u32;
                digits += 1;
            },
            StopWord => match result {
                MinValue..=MaxValue => break, // valid range
                _ => return Err(DecoderError::OutOfRange),
            },
            _ => return Err(DecoderError::Malformed)
        }
    }

    ...
}

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

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

fwiw, рдЗрд╕ рддрд░рд╣ рдореИрдВ рдХреЙрдиреНрд╕ рддрд░реНрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ:

#[inline(always)]
fn read_str_digits<B: Bytes>(src: &mut B, min_value: const u32, 
    max_value: const u32, stop_word: const u8, max_digits: u8) -> Result<u32, ()> {
    let mut result: u32 = 0;
    let mut digits = 0;
    while digits < max_digits && src.has_remaining() {
        match src.get_u8() {
            d<strong i="23">@b</strong>'0'..=b'9' => {
                result = result*10 + (d - b'0') as u32;
                digits += 1;
            },
            stop_word => match result {
                min_value..=max_value => break, // valid range
                _ => return Err(()),
            },
            _ => return Err(())
        }
    }

    ...
}

рдпрд╣ рд╡рд╕реНрддреБрддрдГ рдХрд╛рд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдПред

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

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

@mqudsi рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдПрдХ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреЙрдиреНрд╕ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдз рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдзрд┐рдХрддрдо/рдорд┐рдирдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдордирдорд╛рдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдкрд░ рдХреЙрдиреНрд╕реНрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд╛рдн рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдореЗрд░реЗ рдмрд░рд╛рдмрд░ рд▓рдЧрддреЗ рд╣реИрдВ; рдпрд╣реА рд╣реИ, рдХреЙрдиреНрд╕реНрдЯ рддрд░реНрдХреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ desugaring рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ?

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


  • @ skinny121 рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдмрдХрд╛рдпрд╛ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:

    • рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ (https://github.com/rust-lang/rust/pull/60550)

    • рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдЯрд╛рдЗрдк рдЗрдВрдлрд╝реЗрдХреНрд╢рди рдЗрд╢реНрдпреВ (https://github.com/rust-lang/rust/pull/64679, https://github.com/rust-lang/rust/pull/65579)

    • рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рд╕реНрд▓рд╛рдЗрд╕ (https://github.com/rust-lang/rust/pull/64858) рдФрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ (https://github.com/rust-lang/rust/pull/64986) рд╕рд╣рд┐рдд рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ ) (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрдиреНрд╣реЗрдВ рдмрд╛рдХреА рдХреЙрдиреНрд╕ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдореВрд▓ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ)

    • рдХрд╛рд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ (https://github.com/rust-lang/rust/pull/65154, https://github.com/rust-lang/rust/pull/65579)

    • рдХреЙрдиреНрд╕ рдЬреЗрдирд░рд┐рдХ рдХреНрд░реЙрд╕-рдХреНрд░реЗрдЯ (https://github.com/rust-lang/rust/pull/65365) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдХрдИ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛

  • @eddyb рдиреЗ рдХреЙрдиреНрд╕ рдЬреЗрдирд░рд┐рдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ
  • @matthewjasper рдиреЗ рдореИрдХреНрд░реЛрдЬрд╝ (https://github.com/rust-lang/rust/pull/63083) рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛
  • @davidtwco рдиреЗ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдЬреЗрдирд░рд┐рдХ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ (https://github.com/rust-lang/rust/pull/60839) рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдХ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред
  • @GuillaumeGomez рдиреЗ Rustdoc (https://github.com/rust-lang/rust/pull/61605) рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рддрдп рдХрд┐рдпрд╛
  • @varkor рдиреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/pull/61570, https://github.com/rust-lang/rust/pull/60742, https://github. com/rust-lang/rust/pull/60508), рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдореБрджреНрджрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (https://github.com/rust-lang/rust/pull/60717) рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрд░реИрд╢ (https:/ /github.com/rust-lang/rust/pull/61380, https://github.com/rust-lang/rust/pull/61333, https://github.com/rust-lang/rust/pull/60710 )

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рдЕрдиреНрдп рдХрд╛рдо рдиреЗ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред

рд╣рдордиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдЕрдВрджрд░ рд╣реА рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ: рд╕рд░рдгреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм @crlf0710 рдФрд░ @scottmcm (https://github.com/rust-lang/rust/pull/60466, https) рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдзрдиреНрдпрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред ://github.com/rust-lang/rust/pull/62435), рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ , рдФрд░ рдЬреЛ рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рд░рдгреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ @Centril рдиреЗ VecDeque (https://github.com/rust-lang/rust/pull/63061) рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред


рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдо рдмрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред @nikomatsakis рдЖрд▓рд╕реА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рд╢реЗрд╖ рдореБрджреНрджреЛрдВ рдХреЗ рдПрдХ рдореЗрдЬрдмрд╛рди рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ @jplatte рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдХреЙрдиреНрд╕реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА {X} рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА a рдХреЙрдиреНрд╕реНрдЯ рддрд░реНрдХ)ред

рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕рднреА рдкрд░рд╛рдорд░реНрд╢ рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП @eddyb рдХреЛ рднреА рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЕрдореВрд▓реНрдп рд░рд╣рд╛ рд╣реИред

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

@mqudsi @mark-im рдХреНрдпрд╛ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛, impl Trait рддрд░реНрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬреЗрдирд░рд┐рдХ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ @mqudsi рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ: рд╕рд╛рдорд╛рдиреНрдп рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИрдВред рдпрд╣ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ? рджрд┐рдЦрд╛рдУ рдХрд┐ рд╡реЗ рддрд░реНрдХ рд╣реИрдВ?
рддрд░реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ impl Trait рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯрд░реНрдмреЛрдлрд┐рд╢ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрд░реНрдХ рдореЗрдВ const , рдпрд╣ рдЙрд▓рдЯрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд▓рд╛рдн рдпрд╣рд╛рдВ "рдЕрдЬреАрдмрддрд╛" рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реИрд╕реЗ рднреА рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЪрд░реНрдЪрд╛ рдпрд╛рдж рдЖ рдЧрдИ рдереА, рдФрд░ рдЕрдм рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЧрдИ рд╣реИ: https://internals.rust-lang.org/t/pre-rfc-const-function-arguments/6709

@ PvdBerg1998 рдЬреЛ рдПрдХ рдмрд╣реБрдд рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ <тАж> рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ _рд╣рд╛рд░реНрдб рд╕рд┐рдВрдЯреИрдХреНрд╕_ рд╣реИред рдпрд╣рд╛рдВ рджреЛ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ:

  1. рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдХрд┐ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдИ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреАред
  2. рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ: рддреЛ рд╢рд╛рдпрдж рд╕рдорд╛рдзрд╛рди рдЙрдиреНрд╣реЗрдВ where рдХреНрд▓реЙрдЬ рдкрд░ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛?

рдЕрдм рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдкреНрд░реА-рдЖрд░рдПрдлрд╕реА рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдпрд╣ рдПрдХ _tag_ (рдЯрд╛рдЗрдк-рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрд░реНрде рдореЗрдВ) рд╕реАрдзреЗ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреЗрд╢ рдХрд░реЗрдЧрд╛, рдпрд╛рдиреА рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрд╛рдЗрдВрдбрд┐рдВрдЧред

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

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

let r = _mm_blend_ps::<{2 * C}>(a, b);
let r = _mm_blend_ps(a, b, 2 * C);

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛: MatrixF32::new(3, 3) рдмрдирд╛рдо MatrixF32::new::<3, 3>() ред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ "рдмрд╣реБрдд рднреНрд░рдорд┐рдд" рд╣реЛрдЧреАред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рд╣рдо рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА const рддрд░реНрдХреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( std рдЕрдВрджрд░ SIMD рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рджреЗрдЦреЗрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдмрджрд╕реВрд░рдд рдФрд░ рдЕрдХреНрд╖рдо рд╣реИред

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

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

рдПрдХ рдмрд╛рдд рдЬреЛ const рддрд░реНрдХреЛрдВ рдХреЛ impl Trait рддрд░реНрдХреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреА рд╣реИ (рдЬреЛ @PvdBerg1998 рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рддрд░реНрдХ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рд╣реИрдВ ред

рдЖрдк рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдорд╛рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрд╖реНрдардХ рддрд░реНрдХреЛрдВ рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рджреЗрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИред

рдпрд╣ рд╕реА ++ рдореЗрдВ рдХрд╛рдлреА рдЖрдо рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

template <typename T, size_t N>
size_t length(T (&array)[N]) {
    return N;
}

рдпрд╣ рдмрд╕ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ desugaring рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрд▓рдЧ рд╣реИ ( fn foo(const N: usize) -> fn foo<const N: usize>() )ред рдпрд╣ рдПрдХ рдХреЙрдиреНрд╕ рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд░реАрдм рд╣реИ, рдФрд░ рдлрд┐рд░ рддрд░реНрдХ рд╕реЗ рдЙрд╕ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ рддрд░реНрдХ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддрд╛ рд╣реИред рддреЛ рдЙрдкрд░реЛрдХреНрдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

impl<const W: usize, const H: usize> MatrixF32<W, H> {
    fn new(w: usize<W>, h: usize<H>) -> Self { .. }
}

...рдЬрд╣рд╛рдБ usize<X> "a usize рдХреЗ рд▓рд┐рдП X рдорд╛рди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИред" (рд╕рдорд╛рди рд░реВрдк рд╕реЗ, рдЖрдк рд╢реНрд░реЗрдгреАрдмрджреНрдз рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП usize<X..Y> рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреА рдЪрд░реНрдЪрд╛ NonZero рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреА рдЧрдИ рд╣реИред)

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

fn new(const W: usize, const H: usize) -> MatrixF32<W, H> { .. }

рд╡реЗ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдЬреЗрдирд░рд┐рдХ рд╣реИрдВ ред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ рдкрд░, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдирдХреЗ _values_ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рд░рд╣рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рдорд╛рди рд░рдирдЯрд╛рдЗрдо рдкрд░ рд░рд╣рддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдирд╛ рдмреЗрд╣рдж рднреНрд░рд╛рдордХ рд╣реИред

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

foo :: Integer -> Integer
foo 0 -- 0 has type Integer

-- but
data P (a :: Integer)

type MyP = P 10 -- 10 has kind Integer, which тАЬvalueтАЭ is the 10 type

рдЗрд╕рд▓рд┐рдП:

fn foo<const X:┬аusize>()

рдпрд╣рд╛рдВ, X рдПрдХ рдореВрд▓реНрдп рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдореЛрдиреЛрдореЛрд░реНрдлрд╛рдЗрдЬреЗрд╢рди рдХреА рдкрд░рд╡рд╛рд╣ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВ:

let x = foo(12, "Hello, world!", None);

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

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

рдЖрдкрдиреЗ рдореБрдЭреЗ рдЧрд▓рдд рдкрдврд╝рд╛ рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдерд╛ " const рддрд░реНрдХ ... рддрд░реНрдХ рд╣реИрдВ ," рдирд╣реАрдВ " const рдЬреЗрдирд░рд┐рдХред" рдореЗрд░реА рдкрд╣рд▓реА рдЬрдВрдЧ рдЙрджрд╛рд╣рд░рдг рднреА рдмрд┐рд▓реНрдХреБрд▓ DataKinds рдХреЗ рдмрд░рд╛рдмрд░ (рд╣реИ usize<N> рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрддрд░ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ N )ред рдкреНрд░рдХрд╛рд░ рд╢реБрджреНрдзрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ- рдореИрдВ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдмрд▓реНрдХрд┐ рдореМрдЬреВрджрд╛, рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдзреНрд╡рдирд┐ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рдирддрд╛ рд╕реЗ рдмрд╣рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

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

(рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рдЗрд╕ рджрд╛рд╡реЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИрд░рд╛рди рд╣реВрдВ рдХрд┐ рдореИрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рддрд░реНрдХреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рдерд╛ред)

рдореБрдЭреЗ рддреБрдореНрд╣рд╛рд░рд╛ рдорддрд▓рдм рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдмрд╣реБрдд рдЪрд┐рдВрддрд┐рдд рд╣реВрдВред рдХреНрдпреЛрдВрдХрд┐ _argument_ рдХреЛ _const_ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ _a value_, рд░рдирдЯрд╛рдЗрдо рд╕реНрдкреАрдХрд┐рдВрдЧ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЖрдкрдХреЛ рдЗрд╕реЗ _constant value_ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ _const рдЬреЗрдиреЗрд░рд┐рдХ_ рдкрд░ рдореИрдк рдХрд░реЗрдЧрд╛ред рд╡реИрд╕реЗ, рдЖрдкрдиреЗ рдпрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк 10 рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреЗрд╡рд▓ _singleton type_ рдХрд╛ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ: рдЗрд╕рдХрд╛ рдПрдХрд▓ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди 10 ред

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

  1. рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдмрдХрд┐ _const рдЬреЗрдирд┐рдХреНрд╕_ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореВрд▓реНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
  2. рдЪреВрдВрдХрд┐ рд╡реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдкреНрд░рдХрд╛рд░ рд╕реНрдерд┐рдд рд╣реИрдВ, рди рдХрд┐ рдЬрд╣рд╛рдВ рдЪрд░ рд╕реНрдерд┐рдд рд╣реИрдВред
  3. рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВ рдХреБрдЫ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ <тАж> (тАж) рд╕реЗ рдХрдард┐рди рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ struct рдмрдирд╛рдо fn ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, struct рдореЗрдВ рдХреЗрд╡рд▓ <тАж> рдФрд░ fn рдореЗрдВ рджреЛрдиреЛрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрди рджреЛрдиреЛрдВ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  4. рддрд░реНрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЬреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╛рдкрд╕рдВрдж рдерд╛, рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рдпрд╣ рджреЗрдЦрдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк foo<A, B> рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред foo(1, 3) рдЖрдкрдХреЗ рд▓рд┐рдП foo<3>(1) рд╕реЗ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ foo(1, 3) рдХреЛ рд░рдирдЯрд╛рдЗрдо-рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕реЗ рдордирд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ "рдпрджрд┐ рдХреЛрдИ рддрд░реНрдХ const , рддреЛ рд╣рдо рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ / рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред

fn foo<const N: usize>(a: usize, b: usize | N);

рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рд▓реНрдкрдирд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдкрдиреА рдмрд╛рдд рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реВрдВ: рдпрджрд┐ рдЖрдк b рдХреЛ рдПрдХ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ N = b рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдЕрдЪреНрдЫреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:

foo(1, 3)

рдпрджрд┐ b рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдорд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдк N рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ:

foo<3>(1, x)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:

fn foo<const N: usize>(x: [f32; N]);
fn new(const W: usize, const H: usize) -> MatrixF32<W, H> { .. }

рдпрд╣ рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ new() рдПрд╕реЛрд╕рд┐рдПрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ рдЗрд╕реЗ рдареЛрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ рдЖрдЗрдЯрдореНрд╕ рдХрд╛ рдЕрд░реНрде рд╣реИ "рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдпрд╣ рдкрд░рдо ...", рдпрд╛рдиреА рдЖрд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ред рддреЛ, рд╕рдВрджрд░реНрдн рдореЗрдВ new() рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ Type<32>::new() рдЬреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ рддрд░реНрдХреЛрдВ рдХреЛ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред foo(1, 3) рдЖрдкрдХреЗ рд▓рд┐рдП foo<3>(1) рд╕реЗ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ foo(1, 3) рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЛ рд░рдирдЯрд╛рдЗрдо-рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕реЗ рдордирд╛ рдХрд░рддрд╛ рд╣реИред

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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:

fn foo<const N: usize>(x: [f32; N]);

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

cppcon рдореЗрдВ constexpr рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЧрдИ рдереА, рдЬреЛ @ PvdBerg1998 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @mark-im рд╕реЗ рдЬреБрдбрд╝реЗ рдЖрдВрддрд░рд┐рдХ рдзрд╛рдЧреЗ рдХреА рддрд░рд╣ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

CppCon 2019: рдбреЗрд╡рд┐рдб рд╕реНрдЯреЛрди - C++ рд╕реЗ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣рдЯрд╛рдирд╛, N рдХрд╛ рднрд╛рдЧ 1: constexpr рдлрдВрдХреНрд╢рди рдкреИрд░рд╛рдореНрд╕

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЙрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣рд╛рдВ constexpr рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреЗрдкрд░ рд╣реИ
https://github.com/davidstone/isocpp/blob/master/constexpr-parameters.md

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

рдЕрдЧрд░ рд╣рдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╣рдо рд╢рд╛рдпрдж рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ @ рд░рд╕реНрдЯ-рд▓реИрдВрдЧ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЙрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдСрдлрдЯреЙрдкрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рд╕рднреА рдбрд┐рдЬрд╝рд╛рдЗрди рдЪрд░реНрдЪрд╛ RFC рд░реЗрдкреЛ рдкрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рднреА рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

cc @ рд░рд╕реНрдЯ-рд▓реИрдВрдЧ/рдореЙрдбрд░реЗрд╢рди рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдорд┐рд╕рд╛рд▓ рд╣реИ?

рдЖрдк рдХрд┐рд╕реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдХрд┐рд╕реА рдореБрджреНрджреЗ рдкрд░ _рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд▓реЙрдХ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рдФрд░ рдореИрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╖рдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛ рджреВрдВрдЧрд╛ред

рдирдП рд╕рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдПрдХ рдФрд░ рдЕрдкрдбреЗрдЯ рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╣рдо рдЕрдм рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рд╣реИрдВред рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ RFC рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рд╣реБрдП 2 рд╕рд╛рд▓ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╡рд░реНрд╖ (рд▓рдЧрднрдЧ 2018) рдореЗрдВ, рдЖрдо рддреМрд░ рдкрд░ рдкреВрд░реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдХреЗ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рдереАред рджреВрд╕рд░реЗ рд╡рд░реНрд╖ (рд▓рдЧрднрдЧ 2019) рдореЗрдВ, рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рд╣реБрдЖ: рдкрд╣рд▓реЗ рдирдВрдЧреЗ рдиреНрдпреВрдирддрдо рдХрд╛рдо рдХрд░рдХреЗ, рдФрд░ рдлрд┐рд░ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЕрдЦрдВрдбрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдХреЗред рд▓реЛрдЧреЛрдВ рдиреЗ рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╣реА рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЗрди рдкреНрд░рдпрд╛рд╕реЛрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкрд╣рд▓реЗ рджреЛ рдЕрджреНрдпрддрди рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣реИ: [1] , [2] ред


рдкрд┐рдЫрд▓реЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рд╕реЗ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИред

  • @ рдкрддрд▓рд╛121 :

    • рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдХрдВрдкрд╛рдЗрд▓реЗрд╢рди рдХреЗ рддрд╣рдд рдФрд░ рдХреНрд░реЗрдЯ рднрд░ рдореЗрдВ (https://github.com/rust-lang/rust/pull/65652) рдПрдХ рдЗрд╢реНрдпреВ рдмреНрд░реЗрдХрд┐рдВрдЧ рдХрд╛рд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛

    • рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ (https://github.com/rust-lang/rust/pull/65579) рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЧ рдлрд┐рдХреНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛

    • рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/pull/66877)

  • @yodaldevoid рдиреЗ рдЯрд╛рдЗрдк рдФрд░ рддрд╛рдХрд┐ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЛ рдЕрдм {} (https://github.com/rust-lang/rust/pull/66104) рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рди рдкрдбрд╝реЗред
  • рдПрдХ рдмрд╛рд░ рдЖрд▓рд╕реА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж @eddyb рдиреЗ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рддрдп рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/pull/66883)
  • @рд╡рд░реНрдХрд░ :

    • рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП structural_match рдХрд╕реНрдЯрдо рд╕рдорд╛рдирддрд╛ рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреЛ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдЬреЗрдирд░рд┐рдХ (https://github.com/rust-lang/rust/pull/65627) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдВред

    • рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/pull/65614)

    • рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдлрд┐рдХреНрд╕рд┐рдВрдЧ (https://github.com/rust-lang/rust/pull/65643, https://github.com/rust-lang/rust/pull/65660, https://github. рдХреЙрдо/рдЬрдВрдЧ-рд▓рдВрдЧ/рдЬрдВрдЧ/рдкреБрд▓/65696

рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!


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

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

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

рдЕрдм рд╣рдо рд╡рд░реНрд╖ рдХреЗ рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдЬреЛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ 6 рдорд╣реАрдиреЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдЬреЗрдирд░рд┐рдХ рд╕рдорд░реНрдерди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реБрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @ skinny121 рдФрд░ @lcnr рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдФрд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдореЗрдВ рддрд░реНрдХ рд╕рдорд░реНрдерди , рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрдИ рдХрдард┐рди рдмрдЧреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ред рдЙрдирдХреЗ рдкреНрд░рдпрд╛рд╕ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рд╛рд░рд╛рдВрд╢ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред

рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм рдкреВрд░реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдХрдИ рдЬрдЧрд╣реЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓рдХреНрд╖рдгреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреИрд╕реЗ slice::array_chunks рдФрд░ IntoIterator рдФрд░ FromIterator рд▓рд┐рдП [T; N] (https://github.com/rust-lang/rust/pull/65819, https://github.com/rust-lang/rust/pull/69985)ред рд╕рд░рдгреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╛рдИ 32 рдкреНрд░рддрд┐рдмрдВрдз рднреА рдЕрдВрддрддрдГ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдПрдХ


  • @ рдкрддрд▓рд╛121 :

    • рдЖрд▓рд╕реА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/pull/68505, https://github.com/rust-lang/rust/pull/69181, https://github. com/rust-lang/rust/pull/67717, https://github.com/rust-lang/rust/pull/67890)

    • рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди (https://github.com/rust-lang/rust/pull/68118)

    • рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ (https://github.com/rust-lang/rust/pull/68143)

  • @рдПрд▓рд╕реАрдПрдирдЖрд░ :

    • рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╕рдорд░реНрдерди (https://github.com/rust-lang/rust/pull/74113)

    • рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд╛ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░рд╛ рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/pull/71973) @ skinny121 рдХреЗ рд╕рд╛рде

    • unused_braces рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдЯ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ (https://github.com/rust-lang/rust/pull/70081)

    • рдкреИрдЯрд░реНрди рдореЗрдВ рдХрд╛рд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдлрд┐рдХреНрд╕реНрдб рдореБрджреНрджрд╛ (https://github.com/rust-lang/rust/pull/70562)

    • dyn Trait рдХрд╛рдВрд╕реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/pull/71038)

    • рдмреЗрд╣рддрд░ рд╕реБрдВрджрд░-рдореБрджреНрд░рдг (https://github.com/rust-lang/rust/pull/72052)

    • рдлрд┐рдХреНрд╕реНрдб рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ (https://github.com/rust-lang/rust/pull/70032, https://github.com/rust-lang/rust/pull/70107, https://github.com/rust- lang/rust/pull/70223, https://github.com/rust-lang/rust/pull/70249, https://github.com/rust-lang/rust/pull/70284, https://github. com/rust-lang/rust/pull/70319, https://github.com/rust-lang/rust/pull/70541, https://github.com/rust-lang/rust/pull/72066, https: //github.com/rust-lang/rust/pull/74159)

    • рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ (https://github.com/rust-lang/rust/pull/70478)

    • рдЬреЛрдбрд╝реЗ рдЧрдП рдкрд░реАрдХреНрд╖рдг (https://github.com/rust-lang/rust/pull/74392, https://github.com/rust-lang/rust/pull/74445)

  • @eddyb :

    • рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдлрд┐рдХреНрд╕реНрдб рдореБрджреНрджреЗ (https://github.com/rust-lang/rust/pull/70452)

    • рдмреЗрд╣рддрд░ рд╕реБрдВрджрд░-рдореБрджреНрд░рдг (https://github.com/rust-lang/rust/pull/71232)

    • рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди (https://github.com/rust-lang/rust/pull/71049)

    • рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ (https://github.com/rust-lang/rust/pull/70164)

  • @Aaron1011 : рдХреНрд░реЙрд╕-рдХреНрд░реЗрдЯ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдирд┐рд╢реНрдЪрд┐рдд рддреНрд░реБрдЯрд┐ (https://github.com/rust-lang/rust/pull/72600)
  • @petrochenkov : рдирд╛рдо рд╕рдорд╛рдзрд╛рди рдФрд░ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдирд┐рд╢реНрдЪрд┐рдд рдореБрджреНрджреЗ (https://github.com/rust-lang/rust/pull/70006)
  • @yodaldevoid : рд╕рдорд╛рдзрд╛рди (https://github.com/rust-lang/rust/pull/74051)
  • @contrun : рдПрдХ ICE рддрдп рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/pull/69859)
  • @ рдУрд▓реА-рдУрдмреАрдХреЗ: рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ (https://github.com/rust-lang/rust/pull/69981)
  • @Centril : рдмреЗрд╣рддрд░ рдирд┐рджрд╛рди (https://github.com/rust-lang/rust/pull/70261)
  • @DutchGhost : рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рд╛ (https://github.com/rust-lang/rust/pull/70539)
  • @рд╡рд░реНрдХрд░ :

    • рдмреЗрд╣рддрд░ рд╕реБрдВрджрд░-рдореБрджреНрд░рдг (https://github.com/rust-lang/rust/pull/67909, https://github.com/rust-lang/rust/pull/68111)

    • рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ (https://github.com/rust-lang/rust/pull/67906, https://github.com/rust-lang/rust/pull/68388, https://github.com/rust- рд▓реИрдВрдЧ/рд░рд╕реНрдЯ/рдкреБрд▓/68434)

    • рдмреЗрд╣рддрд░ рдирд┐рджрд╛рди (https://github.com/rust-lang/rust/pull/70845)

    • рдЬреЛрдбрд╝реЗ рдЧрдП рдкрд░реАрдХреНрд╖рдг (https://github.com/rust-lang/rust/pull/68312, https://github.com/rust-lang/rust/pull/70939)


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

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

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

wthrowe picture wthrowe  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Robbepop picture Robbepop  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

dwrensha picture dwrensha  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

defuz picture defuz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ