Rust: рдХреНрд▓реИрдВрдк RFC рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛

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

https://github.com/rust-lang/rfcs/pull/1961 . рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛

рдпрд╣рд╛рдВ рдкреАрдЖрд░: #44097 #58710
рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреАрдЖрд░: https://github.com/rust-lang/rust/pull/77872

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  • [x] рдЖрд░рдПрдлрд╕реА рдиреЗ рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдкрд╛рд╕ рдХрд░ рд▓реА рд╣реИ
  • [x] рдЖрд░рдПрдлрд╕реА рд▓рд╛рдЧреВ рдХрд░реЗрдВ
  • [ ] рд╕реНрдерд┐рд░ рдХрд░рдирд╛
B-unstable C-tracking-issue Libs-Tracked T-libs

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

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

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

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдЗрд╕рдиреЗ рд╕рд░реНрд╡реЛ рдФрд░ рдкрд╛рдердлрд╛рдЗрдВрдбрд░ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред

cc @rust-lang/libs, рдпрд╣ min / max рд╕рдорд╛рди рдорд╛рдорд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА clamp рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдкреИрджрд╛ рд╣реБрдИ рд╣реИред . рдпрд╣ рдкреНрд░рддрд┐ рд╕реЗрд╡рд░ рдиреАрддрд┐ рдХреЗ рдЯреВрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рджрд░реНрдж рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред

рдордВрдЧрд▓рд╡рд╛рд░ рдХреЛ рдЯреНрд░рд╛рдЗрдПрдЬ рдмреИрдардХ рдХреЗ рд▓рд┐рдП рдирд╛рдорд╛рдВрдХрдиред

рдЗрд╕ рдмреАрдЪ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдореИрдВ рдЗрд╕ рдкрд░ @bluss рдХреЗ рд╕рд╛рде

restrict
clamp_to_range
min_max (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рддрд░рд╣ рд╣реИред)
рдпреЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ clamp рдХрд╛ рдкреНрд░рднрд╛рд╡ рдХрд┐рддрдирд╛ рдмреБрд░рд╛ рд╣реИ? clamp рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЬрд╝рд░реВрд░ред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрднреА рдХреНрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реАрдЦ рд╕рдХрддрд╛ рд╣реВрдВред

@Xaeroxe рдЖрд╣ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдкреАрдЖрд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ред (рдореИрдВ рдЖрдЬ рдЫреБрдЯреНрдЯреА рдкрд░ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд╛рдо рдкрд░ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @BurntSushi рдпрд╛ @alexcrichton рдЬреИрд╕реЗ libs рдкрд░ рдХрд┐рд╕реА рдФрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред

рдореИрдВ рдЕрднреА рдкреАрдЖрд░ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдкрдиреА рдЫреБрдЯреНрдЯреА рдкрд░ рдордЬрд╝реЗ рдХрд░реЛ!

рдкреАрдЖрд░ рддреИрдпрд╛рд░ https://github.com/rust-lang/rust/pull/44438

рдХреНрдпрд╛ clamp_to_range(min, max) clamp_to_min(min) рдФрд░ clamp_to_max(max) (рдЕрддрд┐рд░рд┐рдХреНрдд рджрд╛рд╡реЗ рдХреЗ рд╕рд╛рде рдХрд┐ min <= max ) рд╕реЗ рдмрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рднреА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рдПрдХ RFC рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ 6 рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдЯреАрдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ 4 рд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдПрдХ рддрд░рд╣ рд╕реЗ рдШрд┐рд╕рд╛ рд╣реБрдЖ рд╣реВрдВред рд╡рд╣реА рдлрд╝рдВрдХреНрд╢рди 2 рджрд┐рдиреЛрдВ рдореЗрдВ num рдореЗрдВ рд╡рд┐рд▓реАрди рд╣реЛ рдЧрдпрд╛ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдПрд╕рдЯреАрдбреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ 6 рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реВрдВред

рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ @aturon рдХрд╛ рдкрд┐рдЫрд▓рд╛ рдирд╛рдорд╛рдВрдХрди рдЕрдм рднреА рджрд┐рдЦрд╛рдИ рджреЗ.

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

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

рдФрд░ рдЙрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереА "рдлрд╝рдВрдХреНрд╢рди Ord::min рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ [...] libs рдЯреАрдо рдиреЗ рдЖрдЬ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЯреВрдЯрдирд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ"ред рдФрд░ рд╡рд╣ рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ TMTOWTDI рд╕реБрд╡рд┐рдзрд╛ рдереА, рдЬрдмрдХрд┐ clamp рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рд░реВрдк рдХреЗ рддрд╣рдд рдПрд╕рдЯреАрдбреА рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП, рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд░реВрдк рд╕реЗ, рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдпрд╣ рдЖрд░рдПрдлрд╕реА рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рдпрдо рдпрд╣ рд╣реИ рдХрд┐ "рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ Iterator рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрд╕рдЯреАрдбреА рдореЗрдВ рд▓рдХреНрд╖рдгреЛрдВ рдкрд░ рдирдП рддрд░реАрдХреЗ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ"ред

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

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрдердб рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдХрд╣реАрдВ рднреА рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред

(рдореЗрдЯрд╛) рдмрд╕ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдпрд╣рд╛рдВ

рдЕрдЧрд░ рд╣рдо рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ #44438 рдЙрдЪрд┐рдд рд╣реИ,

  1. рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрд╛рд░рдВрдЯреА-рдкреНрд░рдХрд╛рд░-рдЕрдиреБрдорд╛рди-рдЯреВрдЯрдирд╛ рдЬреИрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ XIB рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╡рд╣реЗрд▓рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯрд╛рдЗрдк рдЕрдиреБрдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ RFCs 1105 рдФрд░ 1122 рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ UFCS рдпрд╛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдореБрджрд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ #42496 ( Ord::{min, max} ) рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЯреВрдЯ-рдлреВрдЯ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, #41336 ( T += &T рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕) 8 рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рдХрд╛рд░рдг "рдмрд╕" рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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

    рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрдиреБрдорд╛рди рд╡рд┐рдлрд▓рддрд╛ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ - #41793 рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ {f32, f64}::from_bits , рдЬреЛ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ ieee754::Ieee754::from_bits рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред

  3. рдЬрдм рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдХреНрд░реЗрдЯ рдиреЗ #![feature(clamp)] рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛, рддреЛ рдЙрдореНрдореАрджрд╡рд╛рд░ Ord::clamp рдХрднреА рднреА рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рднрд╡рд┐рд╖реНрдп рдХреЗ рдЕрдиреБрдХреВрд▓ рдЪреЗрддрд╛рд╡рдиреА рдЕрднреА рднреА рдЬрд╛рд░реА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ) рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЕрджреНрд╡рд┐рддреАрдп рд╕рдорд╛рдзрд╛рди рди рд╣реЛред рдпрд╣ "рдЗрдВрд╕реНрдЯрд╛-рдмреНрд░реЗрдХрд┐рдВрдЧ" рдирд╣реАрдВ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╢реБрд░реВрдЖрдд рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдкрд░ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред

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

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдзрд┐рдХрддрдо/рдорд┐рдирдЯ рдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд╛рди рдорд╛рд░рд╛ред рдЗрд╕реЗ рдХреНрд▓реИрдВрдк рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЖрдиреЗ рдХреЗ рд╕рд╛рде рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдбрд╛рд▓рдХрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВред

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

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

рдореБрдЭреЗ рдХреБрдЫ рдЪрд┐рдВрддрд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЪрд┐рдВрддрд╛ рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИрдВред

  • рдирд╛рдо рдФрд░ рдЫрд╛рдпрд╛рдВрдХрди рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
  • рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╡реИрдХреНрдЯрд░ рдФрд░ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрддрдо/рдорд┐рдирдЯ/рдХреНрд▓реИрдВрдк рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдСрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Ndarray рддрддреНрд╡рд╡рд╛рд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ (рд╕реНрдХреЗрд▓рд░ рдпрд╛ рд╕рд░рдгреА) рдХреНрд▓реИрдореНрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Ord рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВред
  • рдореМрдЬреВрджрд╛ рдпреМрдЧрд┐рдХ рдкреНрд░рдХрд╛рд░ рдЬреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИрдВ: BtreeMap рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдХреНрд▓реИрдВрдк рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдЕрд░реНрде рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
  • рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓рд┐рдВрдЧ рдореЛрдб рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, BtreeMap. рдХреНрдпрд╛ рдХреНрд▓реИрдВрдк рдХреЛ 3 рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпреМрдЧрд┐рдХ рдкреНрд░рдХрд╛рд░

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ BtreeSet<BtreeSet<impl Ord>>::range рдЬрд┐рддрдирд╛ рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬреЛ рдорджрджрдЧрд╛рд░ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ Vec<char> ред

рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓рд┐рдВрдЧ рдореЛрдб

рдЬрдм рдпрд╣ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рдЖрдпрд╛, рддреЛ рдЬрд╡рд╛рдм рд╕рд┐рд░реНрдл рдЧрд╛рдп рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдерд╛ред

рдмреЗрд╢рдХ, рднрдВрдбрд╛рд░рдг рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

    fn clamp<T>(mut self, low: &T, high: &T) -> Self
        where T: ?Sized + ToOwned<Owned=Self> + Ord, Self : Borrow<T>
    {
        assert!(low <= high);
        if self.borrow() < &low {
            low.clone_into(&mut self);
        } else if self.borrow() >= &high {
            high.clone_into(&mut self);
        }
        self
    }

рдХреМрди рд╕рд╛ https://github.com/rust-lang/rfcs/pull/2111 рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

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

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

рдХреНрдпрд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрднреА рдХреНрд░реЗрдЯрд░ рд░рди рд╣реБрдЖ?

#48552 рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рдмрд╛рдж рдореЗрд░реА рдпреЛрдЬрдирд╛ clamp() рдкрджреНрдзрддрд┐ рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ RangeInclusive рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд░реЗрдВрдЬ-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдХрд▓реНрдк рдЕрдм рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рдкрд╕ рд▓реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ ..= рдЗрддрдирд╛ рдЕрд╕реНрдерд┐рд░ рдерд╛ ЁЯШД):

// Current
trait Ord {
    fn clamp(self, min: Self, max: Self) -> Self { ... }
}
assert_eq!(9.clamp(6, 7), 7);


// Alternative
trait Ord {
    fn clamp(self, range: RangeInclusive<Self>) -> Self { ... }
}
assert_eq!(9.clamp(6..=7), 7);

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

impl<T: Ord + Clone> RangeInclusive<T> {
    fn clamp(&self, mut x: T) -> T {
        if x < self.start { x.clone_from(&self.start); }
        else if x > self.end { x.clone_from(&self.end); }
        x
    } 
} 

    assert_eq!((1..=10).clamp(11), 10);

    let strings = String::from("aa")..=String::from("b");
    assert_eq!(strings.clamp(String::from("a")), "aa");
    assert_eq!(strings.clamp(String::from("aaa")), "aaa");

https://play.rust-lang.org/?gist=38def79ba2f3f8380197918377dc66f5&version=nightly

рдореИрдВрдиреЗ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ ...

рдпрджрд┐ рд░реЗрдВрдЬ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

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

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

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╢рд╛рдпрдж рдПрдХ рдкреВрд░реНрдг RFC рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдПрдХ рдирд┐рд░реНрдгрдп рдЬреЛ рд╡рд░реНрддрдиреА рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реИ:

  1. value.clamp(min, max) (рдЖрд░рдПрдлрд╕реА рдХрд╛ рдпрдерд╛рд╡рдд рдкрд╛рд▓рди рдХрд░реЗрдВ)
  2. value.clamp(min..=max)
  3. (min..=max).clamp(value)

рд╡рд┐рдХрд▓реНрдк 2 рдпрд╛ 3 рдЖрд╕рд╛рди рдЖрдВрд╢рд┐рдХ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ value.clamp(min..) рдпрд╛ value.clamp(..=max) , рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖ рдХреА рдЬрд░реВрд░рдд clamp_to_start рдпрд╛ clamp_to_end рддрд░реАрдХреЛрдВред

@egilburg : рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ: clamp_to_start max рдФрд░ clamp_to_end min : рдкрд▓рдХ:

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрдЧрддрд┐ рдЕрдЪреНрдЫреА рд╣реИред

@egilburg Rust рдкреНрд░рддреНрдпрдХреНрд╖ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк 2 рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ RangeInclusive , RangeToInclusive рдФрд░ RangeFrom рд▓рд┐рдП рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдХрд╛рдлреА рднрд╛рд░реА рд╡рдЬрди рдорд╣рд╕реВрд╕ рдХрд░рддреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╡рд╣ рд╡рд┐рдХрд▓реНрдк 3 рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред

1 рдпрд╛ 2 рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИрдВред рдореИрдВ 1 рдХреЗ рд╕рд╛рде рд░рд╣реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрд╕рдЯреАрдбреА рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХрдо рд╣реЛрдВрдЧреЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╛ рддреЛ _all_ the range* рдкреНрд░рдХрд╛рд░ рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ _none_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдмреЗрд╢рдХ, рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИ рдХрд┐ Range рдХреЗ рд▓рд┐рдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ RangeInclusive ред рд▓реЗрдХрд┐рди (0.0..1.0).clamp(2.0_f32) => 0.99999994_f32 рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реИред

@kennytm рддреЛ рдЕрдЧрд░ рдореИрдВ рд╡рд┐рдХрд▓реНрдк 3 рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз
рдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЧреЗ рдХреИрд╕реЗ рдмрдврд╝рдирд╛ рд╣реИ?

@EdorianDark рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ @

рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡рд┐рдХрд▓реНрдк 2 рдкрд╕рдВрдж рд╣реИ, рдХреЗрд╡рд▓ RangeInclusive ред рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ "рдЖрдВрд╢рд┐рдХ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ" рдкрд╣рд▓реЗ рд╕реЗ рд╣реА min рдФрд░ max ред

рдореИрдВ @SimonSapin рд╕реЗ рд╕рд╣рдордд рд░рд╣реВрдВрдЧрд╛ ред рд╡рд┐рдХрд▓реНрдк 3 рдХреЗ рд╕рд╛рде, рдореИрдВ рд╕рдВрднрд╡рддрдГ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд▓рдЧрддрд╛ рд╣реИред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ/рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдХреНрд▓реИрдВрдк рдХреЗ рд╕рд╛рде @kennytm рдиреЗ рдкрд╣рд▓реЗ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХрд┐рдпрд╛ рдерд╛ , 7 рдореЗрдВ рд╕реЗ 5 (рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рдХреНрдпреВрдЯреА рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдореЗрдВ рдкрд╣рд▓реЗ рдореВрд▓реНрдп рд╣реИ, рдлрд┐рд░ рд╢реНрд░реЗрдгреАред

рдХреНрд▓реИрдВрдк рдЕрдм рдлрд┐рд░ рд╕реЗ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╣реИ!

рдореИрдВ рдЦреБрд╢ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдЕрдм рд╕реНрд╡реАрдХрд╛рд░реНрдп рдмрдирд╛ рджрд┐рдпрд╛, рдЬрдмрдХрд┐ рдпрд╣ #44097 рдореЗрдВ рдирд╣реАрдВ рдерд╛ред

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

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

@kennytm рдореИрдВ рд╕рд┐рд░реНрдл рдЖрдкрдХреЛ #48552 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП @EdorianDark рдЗрд╕рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕реЗ рдЕрдВрдд рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛрддреЗ рджреЗрдЦрдирд╛ рдЕрджреНрднреБрдд рд╣реИред

https://rust.godbolt.org/z/JmLWJi

pub fn clamped(a: f32) -> f32 {
   a.clamp(0.,255.)
}

рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:

  vxorps xmm1, xmm1, xmm1
  vmaxss xmm0, xmm1, xmm0
  vmovss xmm1, dword ptr [rip + .LCPI0_0]
  vminss xmm0, xmm1, xmm0

рдЬреЛ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ ( vmaxss рдФрд░ vminss рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди:

pub fn maxmined(a: f32) -> f32 {
   (0f32).max(a).min(255.)
}

рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

  vxorps xmm1, xmm1, xmm1
  vmaxss xmm0, xmm0, xmm1
  vminss xmm0, xmm0, dword ptr [rip + .LCPI1_0]

рдХреНрдпрд╛ рдпрд╣ рдХреНрд▓реИрдВрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рд╣реИ, рдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рд╣реИ?

@kornelski clamp рдПрдХ NAN рдХреЛ рдЙрд╕ NAN рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ maxmined рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ max / min _non_- NAN ред

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

https://github.com/rust-lang/rust/blob/b762283e57ff71f6763effb9cfc7fc0c7967b6b0/src/libstd/f32.rs#L1089 -L1094

рдпрджрд┐ рдиреНрдпреВрдирддрдо рдпрд╛ рдЕрдзрд┐рдХрддрдо NaN рд╣реИ рддреЛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рд╕реЗ рдШрдмрд░рд╛рд╣рдЯ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИ? рдореИрдВ рджрд╛рд╡реЗ рдХреЛ assert!(min <= max) рд╕реЗ assert!(!(min > max)) рдореЗрдВ рдмрджрд▓ рджреВрдВрдЧрд╛, рддрд╛рдХрд┐ рдЕрдзрд┐рдХрддрдо рдФрд░ рдиреНрдпреВрдирддрдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рд╣реА рдиреНрдпреВрдирддрдо рдпрд╛ рдЕрдзрд┐рдХрддрдо рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рди рдкрдбрд╝реЗред

рдХреНрд▓реИрдореНрдк рдореЗрдВ min рдпрд╛ max рд▓рд┐рдП NAN рд╕рдВрднрд╡рддрдГ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд▓рдЧрд╛ рдХрд┐ рдЖрдИрдУ рдХреЛ рдЕрдирдХреНрд▓реИрдВрдк рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЦрд┐рд▓рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдШрдмрд░рд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрджрд┐ рдЖрдк рдКрдкрд░реА рдпрд╛ рдирд┐рдЪрд▓реА рд╕реАрдорд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдк рдКрдкрд░реА рдпрд╛ рдирд┐рдЪрд▓реА рд╕реАрдорд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ INF рдФрд░ -INF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛? рдЬреЛ NaN рдХреЗ рд╡рд┐рдкрд░реАрдд рдЧрдгрд┐рддреАрдп рдЕрд░реНрде рднреА рд░рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдЗрд╕рдХреЗ рд▓рд┐рдП max рдФрд░ min рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред

@Xaeroxe рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╢рд╛рдпрдж рдпрд╣ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рд╕реНрдерд┐рд░ рдХреЛрдб рддреЛрдбрд╝ рджреЗрдЧрд╛?

рдПрдХ рдмрд╛рдд рдЬрд┐рд╕ рдкрд░ IMO рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд╡рд╣ рд╣реИ f32 / f64 рдПрдХрддрд░рдлрд╛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЪрд░реНрдЪрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╣реБрдИ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрджрд┐ рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдВрдк рдХрд╛ рдЗрдирдкреБрдЯ NAN рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рд╕реАрдорд╛ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ NAN рд╣реЛрдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореМрдЬреВрджрд╛ f32::min рдФрд░ f64::max рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред (рдЬрдВрдЧ-рд╕рдВрдЦреНрдпрд╛/рд╕рдВрдЦреНрдпрд╛-рд▓рдХреНрд╖рдг#122 рджреЗрдЦреЗрдВред)

рдореИрдВ рдЗрд╕реЗ рдХреНрдпреЛрдВ рд▓рд╛рддрд╛ рд╣реВрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рджреЛ-рддрд░рдлрд╛ clamp рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреЛ-рддрд░рдлрд╛ рдФрд░ рдПрдХ-рддрд░рдлрд╛ рдХреНрд▓реИрдВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╕рдВрдЧрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  1. input.clamp(min, max) , input.clamp_min(min) , рдФрд░ input.clamp_max(max)
  2. input.clamp(min..=max) , input.clamp(min..) , input.clamp(..=max)
  3. input.clamp(min, max) , input.clamp(min, std::f64::INFINITY) , input.clamp(std::f64::NEG_INFINITY, max)

рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде ( min рдФрд░ max рдЕрд▓рдЧ f32 / f64 рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ), рд╣рдореЗрдВ рд╡рд┐рдХрд▓реНрдк 1 рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИ , рдпрд╛ рд╡рд┐рдХрд▓реНрдк 3, рдЬреЛ IMO рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИред рд╣рдореЗрдВ рдмрд╕ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдмрд▓рд┐рджрд╛рди рдХреЛ рдЕрд▓рдЧ clamp_min рдФрд░ clamp_max рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдкрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ/рдирдХрд╛рд░рд╛рддреНрдордХ рдЕрдирдВрдд рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

impl f32 {
    pub fn clamp<T>(self, bounds: T) -> f32
    where
        T: RangeBounds<f32>,
    {
         // ...
    }
}

// and for f64

рдЪреВрдВрдХрд┐ f32 / f64 рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп Ord рд╡рд┐рдкрд░реАрдд, рд╡рд┐рд╢реЗрд╖ рд╕реАрдорд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИред рдмреЗрд╢рдХ, рддрдм рд╣рдо рд╢рд╛рдпрдж Ord::clamp рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП RangeInclusive рддрд░реНрдХ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд╛рдд рдХреА рдкреНрд░рдмрд▓ рд░рд╛рдп рдпрд╛ рддреЛ рджреЛ рддрд░реНрдХ рдпрд╛ рдПрдХ рд╣реА рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ RangeInclusive рдХреЗ рд▓рд┐рдП рддрд░реНрдХ Ord::clamp ред

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

рдЯреНрд░рд╛рдЗрдПрдЬ: рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ NaN рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ Ord::clamp рдкрд╣рд▓реЗ NaN рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкрд░ рдмреНрд▓реЙрдХ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ?

```рдЬрдВрдЧ
рдкрдм рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреНрд░рдо: Eq + PartialOrd{
//тАж
рдПрдлрдПрди рдХреНрд▓реИрдВрдк (рд╕реНрд╡рдпрдВ, рдиреНрдпреВрдирддрдо: рд╕реНрд╡рдпрдВ, рдЕрдзрд┐рдХрддрдо: рд╕реНрд╡рдпрдВ) -> рд╕реНрд╡рдпрдВ рдЬрд╣рд╛рдВ рд╕реНрд╡рдпрдВ: рдЖрдХрд╛рд░ {...}
}
рдЗрдореНрдкреНрд▓рд╛ f32 {
рдкрдм рдПрдлрдПрди рдХреНрд▓реИрдВрдк (рд╕реНрд╡рдпрдВ, рдиреНрдпреВрдирддрдо: рдПрдл 32, рдЕрдзрд┐рдХрддрдо: рдПрдл 32) -> рдПрдл 32 {...}
}
рдЗрдореНрдкреНрд▓рд╛ f64 {
рдкрдм рдПрдлрдПрди рдХреНрд▓реИрдВрдк (рд╕реНрд╡рдпрдВ, рдиреНрдпреВрдирддрдо: рдПрдл 64, рдЕрдзрд┐рдХрддрдо: рдПрдл 64) -> рдПрдл 64 {...}
}

@SimonSapin рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА

+1, рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдЖрд░рдПрдлрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рддрдм рд╕реЗ рдХреБрдЫ рднреА рд╕рд╛рдордЧреНрд░реА рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, IRLO рдФрд░ RFC рдЪрд░реНрдЪрд╛ рдореЗрдВ NaN рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ ред

рдареАрдХ рд╣реИ, рдпрд╣ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

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

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

  • [x] @Amanieu
  • [ ] @рдХрд┐рдореБрдВрдбреА
  • [рдПрдХреНрд╕] @ рд╕рд╛рдЗрдорди рд╕реИрдкрд┐рди
  • [рдПрдХреНрд╕] @ рдПрд▓реЗрдХреНрд╕рдХреНрд░рд┐рдЪрдЯрди
  • [x] @dtolnay
  • [ ] @sfackler
  • [ ] @ рдирд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛

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

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

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

рдХреНрдпрд╛ x.clamp(7..=13) рдмрдирд╛рдо x.clamp(7, 13) рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? https://github.com/rust-lang/rust/issues/44095#issuecomment -533764997 рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рд╛рде рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ f64::clamp ред

@ рдПрдо-рдХрд╣рд╛рдВ-рд╕реЗ рджреЗрдЦреЗрдВ рдЪрд░реНрдЪрд╛ рд╕реЗ рд╢реБрд░реВ https://github.com/rust-lang/rust/issues/44095#issuecomment -+рекрез,резрек,релрен,рейрезрей рдФрд░ рднреА https://github.com/rust-lang/rust/pull/ 58710#рдкреБрд▓рдЕрдиреБрд░реЛрдзрд╕рдореАрдХреНрд╖рд╛ -207529970.

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

@CryZe рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдмрдирд╛рддрд╛ рд╣реИ: рднрд▓реЗ рд╣реА рдЖрдк min = рдЕрдкрд░ рдмрд╛рдЙрдВрдб, рдореИрдХреНрд╕ = рд▓реЛрдЕрд░ рдмрд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рдХрднреА рдЧрд▓рддреА рди рдХрд░реЗрдВ, рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╕рд┐рдХ рдЬрд┐рдореНрдирд╛рд╕реНрдЯрд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдЬрд┐рд╕ рднреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕ рдкрд░ рдпрд╣ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ x.clamp(y, z) рдЕрдзрд┐рдХ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдирдпрд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ;)

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

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

@m-ou-se #44095 (рдЯрд┐рдкреНрдкрдгреА) рдФрд░ #58710 (рд╕рдореАрдХреНрд╖рд╛) рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВред

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

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

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

рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/rust-lang/rfcs/pull/1961#issuecomment -302600351

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

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

рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдЕрдирдиреНрдп рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдХрднреА рднреА рдлреНрд▓реЛрдЯ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ (рд░реЗрдВрдЬ 0..10 рдореЗрдВ рдирд┐рдЪрд▓реА рдмрд╛рдЙрдВрдб рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдКрдкрд░реА рдмрд╛рдЙрдВрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕реАрдорд╛ 0.0...10.0 рдХреНрдпреЛрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

@varkor рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рдж, рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдкрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ред

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

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рддрд░реНрдХ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣рд╛рдБ рд╣реИ: https://github.com/rust-lang/rfcs/pull/1961#issuecomment -302600351

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ @Xaeroxe рдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рд╣рд░рд╛ рджрд┐рдпрд╛ :)

рд╕рдордп рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдиреЗ рдЖрдкрдХреА рд░рд╛рдп рдмрджрд▓ рджреА рд╣реИ

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

рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рддреЛ рдХреБрдЫ рдХрд╛рд░рдг рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

  1. рдЖрд╡рд╢реНрдпрдХ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдиреНрдпрд╛рд╕ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╢реНрд░реЗрдгреА, Range ред

  2. рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд░рдПрдлрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрдЧреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдПрд╕рдЯреАрдбреА рд╣рд╛рд╕рд┐рд▓ рд╣реЛрддреА рд╣реИ рдЬреЛ .max() рдпрд╛ .min() рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрд░рдПрдлрд╕реА рдХреЛ рд╡рд╛рдкрд╕ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рддрд╛рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрдВрдЧ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛

... рдЗрд╕рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬ рдПрд╕рдЯреАрдбреА рд╣рд╛рд╕рд┐рд▓ рд╣реЛрддреА рд╣реИ, рд╡рд╣ рд╣реИ .max() рдпрд╛ .min() рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, input.max(0.) рдХреЛ рдЛрдгрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрдВрдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВред рдпрджрд┐ input рдЧреИрд░- NAN , рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм input рд╣реИ NAN , рддреЛ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди 0. ред рдпрд╣ рд▓рдЧрднрдЧ рдХрднреА рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИ; рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рдХреЛ NAN рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред ( рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред) рдЕрдВрдд рдореЗрдВ, .max() рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрддрд░рдлрд╛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди ( .min() / .max() ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдЧреИрд░-рдЕрд╕реНрдерд╛рдпреА-рдмрд┐рдВрджреБ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХрддрд░рдлрд╛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рддрд░реНрдХ рджрд┐рдПред рдЕрдЧрд▓рд╛ рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЙрди рд╕рдВрдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░реЗрдВ

.clamp() рд╕рд╛рде INFINITY

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХрддрд░рдлрд╛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рди рдЬреЛрдбрд╝реЗрдВ; рдмрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ .clamp() рдХрд╛ рдЙрдкрдпреЛрдЧ INFINITY рдпрд╛ NEG_INFINITY рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ input.clamp(0., std::f64::INFINITY) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред

рдпрд╣ рдмрд╣реБрдд рд╣реА рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧрд▓рдд .min() / .max() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╡реЗ NAN рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ T: Ord рд▓рд┐рдП рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ IMO рдпрд╣ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИред

.clamp_min() рдФрд░ .clamp_max()

рдПрдХ рдЙрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк .clamp_min() рдФрд░ .clamp_max() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ; рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рдереЗ рдХрд┐ рдпрджрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд clamp рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд░реЗрдВрдЬ рддрд░реНрдХ

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ clamp рдПрдХ рд╢реНрд░реЗрдгреА рддрд░реНрдХ рд▓реЗрдВред @Xaeroxe рдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХреБрдЫ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрд▓рд╛рдЗрд╕рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ ( SliceIndex рд╡рд┐рд╢реЗрд╖рддрд╛)ред рдпрд╣ рдЙрди рд╕рднреА рдЖрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЪрд░реНрдЪрд╛ рдореЗрдВ рджреЗрдЦреА рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рд╢реНрд░реЗрдгреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЪрд┐рдВрддрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдИрдПрдордУ .clamp_min() / .clamp_max() рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИред Ord , рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛:

pub trait Ord: Eq + PartialOrd<Self> {
    // ...

    fn clamp<B>(self, bounds: B) -> B::Output
    where
        B: Clamp<Self>,
    {
        bounds.clamp(self)
    }
}

pub trait Clamp<T> {
    type Output;
    fn clamp(self, input: T) -> Self::Output;
}

impl<T> Clamp<T> for RangeFull {
    type Output = T;
    fn clamp(self, input: T) -> T {
        input
    }
}

impl<T: Ord> Clamp<T> for RangeFrom<T> {
    type Output = T;
    fn clamp(self, input: T) -> T {
        if input < self.start {
            self.start
        } else {
            input
        }
    }
}

impl<T: Ord> Clamp<T> for RangeToInclusive<T> {
    type Output = T;
    fn clamp(self, input: T) -> T {
        if input > self.end {
            self.end
        } else {
            input
        }
    }
}

impl<T: Ord> Clamp<T> for RangeInclusive<T> {
    type Output = T;
    fn clamp(self, input: T) -> T {
        assert!(self.start <= self.end);
        let mut x = input;
        if x < self.start { x = self.start; }
        if x > self.end { x = self.end; }
        x
    }
}

рдЗрд╕ рдкрд░ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░:

  • рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ T: Ord + Step ред
  • рд╣рдо рд░рдЦ рд╕рдХрддрд╛ рд╣реИ Clamp рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рд╛рдд-рдХреЗрд╡рд▓, рдХреЗ рд╕рдорд╛рди SliceIndex рд╡рд┐рд╢реЗрд╖рддрд╛ред
  • f32 / f64 , рд╣рдо рдХрд░ рд╕рдХрддреЗ рдереЗ

    1. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ T: PartialOrd ред (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ clamp рдХрд╛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди Ord рдмрдЬрд╛рдп PartialOrd ред рд╢рд╛рдпрдж рдореБрдЭреЗ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреБрдЫ рдпрд╛рдж рдЖрдпрд╛? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ PartialOrd рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред)

    2. рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ f32 рдФрд░ f64 рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦреЗрдВред (рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рд╡рд┐рдХрд▓реНрдк i рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред)

    рдФрд░ рдлрд┐рд░ рдЬреЛрдбрд╝реЗрдВ

    impl f32 {
      // ...
      fn clamp<B>(self, bounds: B) -> B::Output
      where
          B: Clamp<Self>,
      {
          bounds.clamp(self)
      }
    }
    
    impl f64 {
      // ...
      fn clamp<B>(self, bounds: B) -> B::Output
      where
          B: Clamp<Self>,
      {
          bounds.clamp(self)
      }
    }
    
  • рд╣рдо рдЪрд╛рд╣реЗрдВ рддреЛ рдмрд╛рдж рдореЗрдВ Clamp рдХреЛ f32 / f64 рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ( @scottmcm рдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдХрд┐ рдпрд╣ рд╕реАрдзрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ std рдЬрд╛рдирдмреВрдЭрдХрд░ f32 / f64 рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ std рдЙрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИ; рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ? рднрд▓реЗ рд╣реА, рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред)

    рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо Clamp рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ f32 / f64 рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рднреА рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ @varkor рдмрддрд╛рддреЗ рд╣реИрдВ, рд░рд╕реНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Copy рдФрд░ Iterator / IntoIterator рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд░реЗрдВрдЬ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред (рдЖрдИрдПрдордУ, рдпрд╣ std рдХрд╛ рдПрдХ рдорд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рд╢реНрд░реЗрдгреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред) рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ ( "рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрд╛рдзреНрдп std::ops::Range<f32>: Clamp<f32> рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ")ред

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

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

рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, " .clamp() рд╕рд╛рде INFINITY " рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрд╛рдлреА рдиреБрдХрд╕рд╛рди рд╣реИрдВред

"рдореМрдЬреВрджрд╛ .clamp " + .clamp_min() + .clamp_max() рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреБрдХрд╕рд╛рди рд╣реИрдВ:

  • рдпрд╣ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП input.clamp_min(0) рдмрдЬрд╛рдп input.clamp(0..) ред
  • рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ .clamp() рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо u32 рдорд╛рди рдХреЛ u8 рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреЛ рдХрд┐ RFC рдЪрд░реНрдЪрд╛ рд╕реЗ рдЕрдиреБрд░реЛрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ ред рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдХреЛ .saturating_into() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реЗ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЕрдзрд┐рдХ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред
  • рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП .min() , .max() , .clamp_min() , рдФрд░ .clamp_max() рдХреЗ рдмреАрдЪ рдХреЛрдИ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред ( .clamp_min() рд╕рд╛рде рдХреНрд▓реИрдВрдкрд┐рдВрдЧ .max() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдФрд░ .clamp_max() рд╕рд╛рде рдХреНрд▓реИрдВрдкрд┐рдВрдЧ .min() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред) рд╣рдо рдЬреНрдпрд╛рджрд╛рддрд░ рдирд╛рдо рджреЗрдХрд░ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди .clamp_lower() / .clamp_upper() рдпрд╛ .clamp_to_start() / .clamp_to_end() рдмрдЬрд╛рдп .clamp_min() / .clamp_max() , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдФрд░ рднреА рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛ ( input.clamp_lower(0) рдмрдирд╛рдо input.clamp(0..) )ред

рд░реЗрдВрдЬ рддрд░реНрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреБрдХрд╕рд╛рди рд╣реИрдВ:

  • рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди .clamp_min() / .clamp_max() рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
  • рдпрджрд┐ рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реНрд░реЗрдгреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП Clamp рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд░реЗрдВрдЬ рддрд░реНрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрдирд╛рдо "рдореМрдЬреВрджрд╛ .clamp " + .clamp_min() + .clamp_max() рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдореЗрд░реА рдХреЛрдИ рдордЬрдмреВрдд рд░рд╛рдп рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рд╕реМрджреЗрдмрд╛рдЬреА рд╣реИред

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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд╛рдЦрд╛ рдХреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ рдкрд░

рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдореЗрдВ рд╕рдорд╛рд╡реЗрд╢реА рд╣реИ, рдХреЛрдИ рдХреЗрд╡рд▓ рдПрдХ-рддрд░рдлрд╛ рдХреНрд▓реИрдореНрдкрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдПрдВ/рджрд╛рдПрдВ рдкрд░ рдиреНрдпреВрдирддрдо/рдЕрдзрд┐рдХрддрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдпрдХреАрдирди .clamp((Bound::Unbounded, Inclusive(3.2))) рдЬрд╣рд╛рдВ рдХреЛрдИ Range* рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡реИрд╕реЗ рднреА рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ:

x.clamp(i32::MIN, 10);
x.clamp(-f32::INFINITY, 10.0);

рдХреЛрдИ рдкреВрд░реНрдг рд╣рд╛рдирд┐ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореГрдд рдкрдХреНрд╖ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИ: https://rust.godbolt.org/z/l_uBLO

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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ min / max NaN рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕реНрд╡рдпрдВ рд╣реА рддрдп рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП f32 рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдХрд░? рдпрд╛ PartialOrd::min/max ? (рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд░рд╕реНрдЯ libstd рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ)ред

@scottmcm рддреБрдо рдмрд╛рд╣рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП RangeToInclusive ред

рдЗрд╕ рдкрд░ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрд░реЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ "рдЖрд░рдПрдлрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛" рдХреЛ рдмрджрд▓рд╛рд╡ рди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдЪрд╛рд╣рд┐рдПред

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

  • рдЖрд╡рд╢реНрдпрдХ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдиреНрдпрд╛рд╕ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╢реНрд░реЗрдгреА, Range ред

    • @jturner314 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдирдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ Range* рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╕реАрдорд╛рдПрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреИрд╕реЗ Ord + Step ред рдЗрд╕рд▓рд┐рдП, рднрд▓реЗ рд╣реА рдПрдХреНрд╕рдХреНрд▓реВрд╕рд┐рд╡ рд░реЗрдВрдЬ рдХреНрд▓реИрдореНрдк рдХреА рдЕрдХреНрд╕рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЗрдВрдЬ рдХреА рдкреВрд░реА рд░реЗрдВрдЬ рдХреЛ рдпрд╣рд╛рдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдЙрди рд░реЗрдВрдЬ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд┐рдП, рдЬрд┐рдирдореЗрдВ рдпреЗ рддрдХрдиреАрдХреА рд╕реАрдорд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред
  • рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рддрд░рдлрд╛ рдХреНрд▓реИрдВрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдиреНрдлрд┐рдирд┐рдЯреА/рдиреНрдпреВрдирддрдо/рдЕрдзрд┐рдХрддрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓реИрдореНрдк рдХреЛ рдореМрдЬреВрджрд╛ рд╕реНрд╡рд░реВрдк рдореЗрдВ рд╣реА рдЫреЛрдбрд╝ рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдХрд╛рдлреА рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИред
рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз #58710 рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рддреЛ рдореИрдВрдиреЗ рд░реЗрдВрдЬ рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
рд▓реЗрдХрд┐рди rust-lang/rfcs#1961 (рдЯрд┐рдкреНрдкрдгреА) ) рдиреЗ рдореБрдЭреЗ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛, рдХрд┐ рдпрд╣ рдорд╛рдирдХ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИред

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

let mut x: f64 = some_number_source();
x.clamp(0.0, 1.0);
//Proceeds to assume that 0.0 <= x <= 1.0

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд░рд╕реНрдЯ рдЕрдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП (number).method() рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрддрд╛ рд╣реИ (рдЬрдмрдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ Math.Method(number) ), рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рднреА, рдпрд╣ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдзрд╛рд░рдгрд╛ рд╣реЛрдЧреА рдХрд┐ рдпрд╣ number рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

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

@SimonSapin @scottmcm рдХреНрдпрд╛ рд╣рдо рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЬреИрд╕рд╛ рдХрд┐ @ jturner314 рдиреЗ рдХрд╣рд╛, рдСрд░реНрдб рдХреЗ рдмрдЬрд╛рдп рдкрд╛рд░реНрдЯрд┐рдпрд▓рдСрд░реНрдб рдкрд░ рдХреНрд▓реИрдВрдк рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдлреНрд▓реЛрдЯреНрд╕ рдкрд░ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ f32::clamp рдФрд░ f64::clamp рд╣реИред

рдореИрдВ рдпрд╣реА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

use num_traits::float::FloatCore;

struct Foo<T> (T);

impl<T: FloatCore> Foo<T> {
    fn foo(&self) -> T {
        self.0.clamp(1, 10)
    }
}

fn main() {
    let foo = Foo(15.3);
    println!("{}", foo.foo())
}

рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред

PartialOrd рдПрдХ рдлреНрд▓реЛрдЯ-рдУрдирд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИред рдлреНрд▓реЛрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐ рд╣реЛрдиреЗ рд╕реЗ рдХрд╕реНрдЯрдо PartialOrd рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд▓реИрдВрдк рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП Eq , рднрд▓реЗ рд╣реА рд╡рд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗред

PartialOrd рд╕рд╛рде рдкреНрд░рдореБрдЦ рдЪрд┐рдВрддрд╛ рдпрд╣ рдереА рдХрд┐ рдпрд╣ рдХрдордЬреЛрд░ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдХреНрд▓реИрдВрдк рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рдХрдордЬреЛрд░ рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ PartialOrd рд╣реЛ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ https://docs.rs/num/0.2.1/num/fn.clamp.html

рдпреЗ рдЧрд╛рд░рдВрдЯреА рдХреНрдпрд╛ рд╣реИрдВ?

рдПрдХ рдХрд╛рдлреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдЕрдкреЗрдХреНрд╖рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ x.clamp(a, b) == x рддреЛ a <= x && x <= b ред рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ PartialCmp рдЬрд╣рд╛рдВ x рдпрд╛ рддреЛ a рдпрд╛ b рд╕рд╛рде рдЕрддреБрд▓рдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛рдж рдХрд┐рдП рдЧрдП clamp() рддрд▓рд╛рд╢ рдореЗрдВ рдЖрдЬ рдпрд╣рд╛рдВ рдЖрдпрд╛ рдФрд░ рд░реБрдЪрд┐ рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреЛ рдкрдврд╝рд╛ред

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

#![allow(unstable_name_collisions)]

pub trait Clamp: Sized {
    fn clamp<L, U>(self, lower: L, upper: U) -> Self
    where
        L: Into<Option<Self>>,
        U: Into<Option<Self>>;
}

impl Clamp for f32 {
    fn clamp<L, U>(self, lower: L, upper: U) -> Self
    where
        L: Into<Option<Self>>,
        U: Into<Option<Self>>,
    {
        let below = match lower.into() {
            None => self,
            Some(lower) => self.max(lower),
        };
        match upper.into() {
            None => below,
            Some(upper) => below.min(upper),
        }
    }
}

#[test]
fn test_clamp() {
    assert_eq!(1.0, f32::clamp(2.0, -1.0, 1.0));
    assert_eq!(-1.0, f32::clamp(-2.0, -1.0, 1.0));
    assert_eq!(1.0, f32::clamp(2.0, None, 1.0));
    assert_eq!(-1.0, f32::clamp(-2.0, -1.0, None));
    assert_eq!(2.0, f32::clamp(2.0, -1.0, None));
    assert_eq!(-2.0, f32::clamp(-2.0, None, 1.0));
}

рдпрджрд┐ рдпрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдереЗ std рдПрдХ рдХрдВрдмрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ T: Ord , рдЬреЛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдард╛рдпрд╛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ PartialOrd рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐ clamp(a,b,c) рдХреЛ рд╡реИрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ min(max(a,b), c) ред
рдЪреВрдВрдХрд┐ max рдФрд░ min рдХреЛ PartialOrd рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рди рд╣реА clamp рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
NaN рдореБрджреНрджреЗ рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдЪрд░реНрдЪрд╛ рд╣реЛ рдЪреБрдХреА

@EdorianDark рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо рдХреЛ рднреА рдХреЗрд╡рд▓ рдкрд╛рд░реНрдЯрд┐рдпрд▓рдСрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

@noonien min рдФрд░ max рдХреЛ Rust 1.0 рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ Ord рдФрд░ f32 рдФрд░ f64 рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред
рдЗрди рд╕рдорд╛рд░реЛрд╣реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред
рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ min , max рдФрд░ clamp рддреБрд▓рдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВ рдФрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ PartialOrd рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп float рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ Ord , рд▓реЗрдХрд┐рди 1.0 рдХреЗ рдмрд╛рдж рдЕрдм рдЗрд╕реЗ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдЕрдм рд▓рдЧрднрдЧ рдбреЗрдврд╝ рд╕рд╛рд▓ рд╕реЗ рд╡рд┐рд▓рдп рдФрд░ рдЕрд╕реНрдерд┐рд░ рд╣реИред рд╣рдо рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛!

рдпрджрд┐ clamp рд╡рд┐рдзрд┐ рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ https://github.com/rust-lang/rust/pull/66852#issuecomment -561667812 рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдирд╛рдо рд╕рдорд╛рдзрд╛рди рдмрджрд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдФрд░ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА рдЗрд╕рдХреЗ рд╕рд╛рде рднреАред

@Xaeroxe рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ libs рдЯреАрдо рдХреА рд╕рд╣рдорддрд┐ рдорд╛рдВрдЧрдирд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ t-libs рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдЧреИрд░-fcped рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рдореЗрд▓ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд┐рдпрд╛ https://github.com/rust-lang/rust/pull/77872

@matklad рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ FCP рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ https://github.com/rust-lang/rust/issues/44095#issuecomment -544393395 рдкрд░ рдкрд╣рд▓реЗ рд╣реА рд╢реБрд░реВ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЯрдХрд╛ рд╣реБрдЖ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╢реЗрд╖ рдЪреЗрдХрдмреЙрдХреНрд╕ рд╣реИред

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

@рдХрд┐рдореБрдВрдбреА
@sfackler
@ рдирд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛

https://github.com/rust-lang/rust/issues/44095#issuecomment -544393395 рдЕрднреА рднреА рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдЬрдм рд╕реЗ FCP рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ рддрдм рд╕реЗ libs рдЯреАрдо рдХрд╛рдлреА рдмрджрд▓ рдЧрдИ рд╣реИред рдХреНрдпрд╛ рддреБрдо рд╕рдм рдмрд╕ рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ FCP рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреАрдЖрд░ рдореЗрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╢реЗрд╖ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрдирд╛ рдЪрд╛рд╣рд┐рдПред

@LukasKalbertodt рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рд╛рдд рдорд╛рд░рдиреЗ рдХрд╛ рдорди рд╣реИ?

рдпрд╣рд╛рдБ FCP рд░рджреНрдж рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ FCP рдЕрдм рд╕реНрдерд┐рд░реАрдХрд░рдг PR рдкрд░ рд╣реБрдЖ: https://github.com/rust-lang/rust/pull/77872#issuecomment -722982535

@fcpbot рд░рджреНрдж рдХрд░реЗрдВ

рдЙрд╣

@rfcbot рд░рджреНрдж рдХрд░реЗрдВ

@m-ou-se рдкреНрд░рд╕реНрддрд╛рд╡ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред

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

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

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

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

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

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

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