Rust: рдкреВрд░реНрдгрд╛рдВрдХ рдЬрд╛рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдЕрдХреНрддреВре░ 2013  ┬╖  234рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

2020-04-18 рддрдХ рдХреА рд╕реНрдерд┐рддрд┐

рд╣рдо as рд▓рд┐рдП рд╕рдВрддреГрдкреНрдд-рдлреНрд▓реЛрдЯ-рдХрд╛рд╕реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдкрд┐рдЫрд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рд╣реИред рдЙрд╕ рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдирд╡реАрдирддрдо рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП # 71269 рджреЗрдЦреЗрдВред

2018-11-05 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдерд┐рддрд┐

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

рдЕрдЧрд▓реЗ рдХрджрдо рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣реЗ рд╣реИрдВ:

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

рдкреБрд░рд╛рдиреА рд╕реНрдерд┐рддрд┐

рдЕрджреНрдпрддрди (@nikomatsakis рджреНрд╡рд╛рд░рд╛): рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорджрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!


рдореВрд▓ ISSUE FOLLOWS:

рдпрджрд┐ рдорд╛рди ty2 рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред

1.04E+17 as u8
A-LLVM C-bug I-unsound ЁЯТе P-medium T-lang

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

рдореИрдВрдиреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЗрдВрдЯ рдХрд╛рд╕реНрдЯ рдХреЛ рдлреНрд▓реЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреНрд░реЗрдВрд╕рд┐рдХреНрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ: https://reviews.llvm.org/D54749

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

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

рдирд╛рдорд╛рдВрдХрди

рдкреА-рд╣рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛, # 10183 рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рддрд░реНрдХ

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

рдкреА-рд╣рд╛рдИ рдореЗрдВ рдмрджрд▓рдирд╛, # 10183 рдХреЗ рд╕рдорд╛рди рддрд░реНрдХ

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

рд╣рдо LLVM рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ "рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг" рдХрд░рддрд╛ рд╣реИред @zwarich рдХреЗ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдУрд╣, рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред

ping @pnkfelix рдХреНрдпрд╛ рдпрд╣ рдирдП рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдЬрд╛рдБрдЪ рд╕рд╛рдорд╛рди рд╕реЗ рдЖрдЪреНрдЫрд╛рджрд┐рдд рд╣реИ?

рдЗрди рдЬрд╛рддрд┐рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдЕрднрд┐рдХрдерди рдХреЗ рд╕рд╛рде рдЬрдВрдЧ рджреНрд╡рд╛рд░рд╛ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдЫ рд╕реНрдерд┐рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдПрдХ ICE рдкреИрджрд╛ рдХрд░ рд░рд╣реА рд╣реИред

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

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

#[inline(never)]
pub fn f(ary: &[u8; 5]) -> &[u8] {
    let idx = 1e100f64 as usize;
    &ary[idx..]
}

fn main() {
    println!("{}", f(&[1; 5])[0xdeadbeef]);
}

рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ segfaults (рдирд╡реАрдирддрдо рд░рд╛рддреНрд░рд┐рдХрд╛рд▓реАрди) -O рдХреЗ рд╕рд╛рдеред

рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрдВрдЧ рдореЗрдВ рд╕реНрдореГрддрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП I-unsound рдХреЗ рд╕рд╛рде рдЕрдВрдХрдиред

@bluss , рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рдЬреЛрд░рджрд╛рд░ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рд╛ рдерд╛, рддрдм рд╕реЗ рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛

рдЖрд╣, рдореИрдВ -O, рдлрд┐рд░ рд╕реЗ рдЯреИрдЧрд┐рдВрдЧ рднреВрд▓ рдЧрдпрд╛ред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЗрдмрд▓ рдЬреЛрдбрд╝рдХрд░, рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рди рдХрд░реЗрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕рд╛рдордЧреНрд░реА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рдг) рд╕реЗ рдорд┐рд╕рд╛рд▓ рд╕рд┐рд░реНрдл рдХреБрдЫ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдмрд╕рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЬрд╛рд╡рд╛ рдкрд░рд┐рдгрд╛рдо modulo рд░реЗрдВрдЬ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрдЪрд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ; рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ LLVM рдХреЛрдб рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред

Https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls -5.1.3 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬрд╛рд╡рд╛ рдЗрд╕ рдмрд╛рдд рдХреА рднреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ NaN рдорд╛рдиреЛрдВ рдХреЛ 0 рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╢рд┐рд╢реБрдУрдВ рдХреЛ рдиреНрдпреВрдирддрдо / рдЕрдзрд┐рдХрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдирд┐рдпрдо рдХреЗрд╡рд▓ рд░реИрдкрд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдпрд╣ рд╕рдВрддреГрдкреНрддрд┐ ( int рдпрд╛ long рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг) рдФрд░ рд░реИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЫреЛрдЯреЗ рдЕрднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП) , рдЕрдЧрд░ рдЬрд░реБрд░рдд рд╣реЛ)ред рдЬрд╛рд╡рд╛ рд╕реЗ рдкреВрд░реЗ рд░реВрдкрд╛рдВрддрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ fpto[us]i рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд░реЗрдВрдЬ рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдлреНрд▓реЛрдЯ-> рдЗрдВрдЯ рдХрд╛рд╕реНрдЯреНрд╕ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдорд╛рдиреНрдп рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдореВрд▓ рдореВрд▓реНрдп рдХреЗ рдЯреНрд░рдВрдХреЗрд╢рди рдХреЛ рдЧрдВрддрд╡реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рд╢рд╛рдпрдж [iu]size ?) рдФрд░ рдбрд┐рдмрдЧ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрддрдВрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

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

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

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

@ рдЬрдВрдЧ-рд▓рдВрдЧ / рд╕рдВрдХрд▓рдХ рдмреИрдардХ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд╕рдВрдЧрдд рдкрд╛рдареНрдпрдХреНрд░рдо рдмрдирд╛ рд╣реБрдЖ рд╣реИ:

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

рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд┐рдХрд▓реНрдк 2 рдХреЗ рд▓рд┐рдП рдПрдХ рдареЛрд╕ рд╕реБрдЭрд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

triage: рдкреА-рдореАрдбрд┐рдпрдо

@nikomatsakis рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рдореЗрдВ as рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрддрдВрдХ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ _should рд╣реИ_, рдЕрдВрдХрдЧрдгрд┐рдд рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдФрд░ рдЕрддреАрдд, рдмрд╣рд╕ рд╣реИред)

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

рдареЛрд╕ рд╕реБрдЭрд╛рд╡: рдкреНрд░рддрд┐рдкрд╛рджрдХ рджреНрд╡рд╛рд░рд╛ u64 рдФрд░ рдмрд┐рдЯрд╢рд┐рдлреНрдЯ рдЕрдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрдХ рдФрд░ рдШрд╛рддрд╛рдВрдХ рдирд┐рдХрд╛рд▓реЗрдВред

fn f64_as_u64(f: f64) -> u64 {
    let (mantissa, exponent, _sign) = f.integer_decode();
    mantissa >> ((-exponent) & 63)
}

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

рдХреНрдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдордВрдЪ рдЖрдВрддрд░рд┐рдХ рдирд╣реАрдВ рд╣реИ?

EDIT : @zwarich рдиреЗ рдХрд╣рд╛ (рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ):

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

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдШрдмрд░рд╛рд╣рдЯ рдХреНрдпреЛрдВ? AFAIK, @glaebhoerl рд╕рд╣реА рд╣реИ, as рдХреЛ рдЫреЛрдЯрд╛ / рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛, _not_ рдСрдкрд░реЗрдВрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╣реИред

рд╢рдирд┐, рдорд╛рд░реНрдЪ 05, 2016 рдХреЛ 03:47:55 рдкреВрд░реНрд╡рд╛рд╣реНрди -0800 рдкрд░, рдЧреИрдмрд░ рд▓реЗрд╣реЗрд▓ рдиреЗ рд▓рд┐рдЦрд╛:

@nikomatsakis рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рдореЗрдВ as рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрддрдВрдХ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ _should рд╣реИ_, рдЕрдВрдХрдЧрдгрд┐рдд рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдФрд░ рдЕрддреАрдд, рдмрд╣рд╕ рд╣реИред)

рд╕рдЪред рдореБрдЭреЗ рд╡рд╣ рдкреНрд░реЗрд░рдХ рд▓рдЧрддрд╛ рд╣реИред

рдмреБрдз рдкрд░, рдорд╛рд░реНрдЪ 09, 2016 рдХреЛ 02:31:05 рдкреВрд░реНрд╡рд╛рд╣реНрди -0800, рдПрдбреБрдЖрд░реНрдб-рдорд┐рд╣рд╛рдИ рдмрд░реНрдЯреЗрд╕реНрдХреБ рдиреЗ рд▓рд┐рдЦрд╛:

рдХреНрдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдордВрдЪ рдЖрдВрддрд░рд┐рдХ рдирд╣реАрдВ рд╣реИ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ :

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

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдШрдмрд░рд╛рд╣рдЯ рдХреНрдпреЛрдВ? AFAIK, @glaebhoerl рд╕рд╣реА рд╣реИ, as рдХреЛ рдЫреЛрдЯрд╛ / рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛, _not_ рдСрдкрд░реЗрдВрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╣реИред

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

@nikomatsakis : рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рддрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

рдмрд╕ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рднрд╛рдЧ рдЧрдпрд╛

    let x: f64 = -1.0;
    x as u8

рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 0, 16, рдЖрджрд┐ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдЗрд╕реЗ 255 рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ x as i16 as u8 рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рд╣реИред

@gmorenz рдХреНрдпрд╛ рдЖрдкрдиреЗ !0u8 ?

рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдореБрдЭреЗ [-255, 255] рдХреА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ f64 рдорд┐рд▓ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рдкреЗрдЯреЗрдЧрд╛ (рд╕рдЯреАрдХ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐ <i32> as u8 wraps)ред

рдпрд╣рд╛рдБ "undef рдорд╛рд░рдиреЗ" рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ LLVM рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ http://lists.llvm.org/pipermail/llvm-dev/2016-October/106182.html , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░ рдкрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рд╕реНрд╡рддрдГ рд╣реЛрдЧрд╛ рд╕рдВрдХрд▓реНрдк рдЗрд╕ рдореБрджреНрджреЗред

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

рд╣рдореЗрдВ рд╢рд╛рдпрдж рдПрдХ рд╕рдВрддреГрдкреНрдд рдХрд╛рд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд╡рд╣ рд╕рдЯреАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЖрдИ-рдХреНрд░реИрд╢ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, https://github.com/rust-lang/rust/issues/10184#issuecomment -139858153ред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ #rust-beginners рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╡рд╛рд▓ рдерд╛, рдЖрдЬ рдХреЛрдИ рдЬрдВрдЧрд▓реА рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред

рдореИрдВ рдЬреЛ рдХрд┐рддрд╛рдм @jimblandy ,

рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рддрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

  • рд╕рдВрдЦреНрдпрд╛рдПрдБ рдмрд┐рд▓реНрдЯ-рдЗрди рдиреНрдпреВрдореЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдбрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

    (...)

    рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдмрдбрд╝реЗ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╡реИрд▓реНрдпреВ рдХреЛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдирд╛ рдЬреЛ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрдВрдЧ рдореЗрдВ рднреА рджреБрд░реНрдШрдЯрдирд╛ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдХрд▓рдХ, github.com/rust-lang/rust/issues/10184 рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред

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

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рд╡рд░реНрддрдорд╛рди JavaScriptCore x86 рдкрд░

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ as рд╕рд╛рде рд╕рд╛рдВрдЦреНрдпрд┐рдХ рдЬрд╛рддрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ From рдФрд░ TryFrom рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЙрдиреНрдЯреЗ рдХреНрд░реЗрдЯ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдУрд░реНрдереЛрдЧреЛрдирд▓ рд▓рдЧрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдЕрднреА рдкреВрд░реА рдмрд╛рддрдЪреАрдд рдлрд┐рд░ рд╕реЗ рдкрдврд╝реА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордЭреМрддреЗ рд╕реЗ рдШрдмрд░рд╛рд╣рдЯ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ( as рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП)ред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдореБрдЦ рджрд╛рд╡реЗрджрд╛рд░ рд╣реИрдВ:

  • рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░

    • рдкреНрд░реЛ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд╛рдорд╛рдиреНрдп рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХрддрдо рд╕рдВрдЧрдд рд╣реИ ред

    • Con: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреЛрд░реНрдЯреЗрдмрд▓ рддрд░реАрдХрд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХ рдЗрдВрдЯреНрд░рд┐рдВрд╕рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реЗрдВрдЬ рд╡реИрд▓реНрдпреВ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдордмреИрдХ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрддреГрдкреНрддрд┐ рдкрд░ рд╡рд╛рдкрд╕ рдЧрд┐рд░рдирд╛, рдпрд╣ рдХрд╛рд░реНрдп рдЬреЛ @ oli-obk рдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ , рдЬрд╛рд╡рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ , рдпрд╛ рдЬреЛ рднреА "рд╕реА + +" JSC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред

    • рд╕рдмрд╕реЗ рдХрдо, рд╣рдо "рд╕реАрдорд╛ рдХреЗ рдмрд╛рд╣рд░" рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ ifs рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдп (рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ)

    • рдкреНрд░реЛ: рдпрд╣ рд╣рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

    • Con: рдпрд╣ рдПрдХ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдЦрддрд░рд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рдмрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рднрд╛рд╖рд╛ рдореЗрдВ (рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред

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

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

рдореБрдЭреЗ рд╕рдВрддреГрдкреНрддрд┐ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ u64 as u32 рдЯреНрд░рдВрдХреЗрд╢рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЯреНрд░рдВрдХреЗрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж @ рдУрд▓реА-рдУрдмреНрдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ - рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдХреЛрдб рдХрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред =)

рдореЗрд░рд╛ рдХреЛрдб 0..2 ^ 64 рдХреА рд╕реАрдорд╛ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдореВрд▓реНрдп рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдХреА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд╛рддреНрдордХ рд▓реЗрдХрд┐рди рдлрд░реНрдЬреА рдореВрд▓реНрдп рд╣реИред

рдлрд╝реНрд▓реЛрдЯреНрд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдордВрдЯрд┐рд╕рд╛ ^ рдПрдХреНрд╕рдкреЛрдиреЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 1.0 (2 << 52) ^ -52 рдФрд░ рдЪреВрдВрдХрд┐ рдмрд┐рдЯрд╢рд┐рдлреНрдЯреНрд╕ рдФрд░ рдПрдХреНрд╕рдкреЛрдЬрд╝рд░ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╢рд┐рдлреНрдЯ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕ рддрд░рд╣ рдШрд╛рддрд╛рдВрдХ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рдХреА рдЙрдкреЗрдХреНрд╖рд╛) рдЦрд┐рд╕рдХ рдЬрд╛рдирд╛)ред

рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЗ рд▓рд┐рдП +1ред

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

  • рд╕рдВрддреГрдкреНрддрд┐ (рдЖрдЙрдЯ-рдСрдлрд╝-рд░реЗрдВрдЬ рдорд╛рди IntType::max_value() / min_value() ) рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
  • рдореЛрдбреБрд▓реЛ (рдЖрдЙрдЯ-рдСрдл-рд░реЗрдВрдЬ рдорд╛рдиреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкрд╣рд▓реЗ рдПрдХ рдмрд┐рдЧрд┐рдВрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ, рдлрд┐рд░ рдЯреНрд░рдВрдХрдЯрд┐рдВрдЧ)

рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред T рдХрд┐рд╕реА рднреА рдорд╢реАрди рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред Tmin рдФрд░ Tmax T::min_value() рдФрд░ T::max_value() ред RTZ (v) рдХрд╛ рдЕрд░реНрде рд╣реИ рдЧрдгрд┐рддреАрдп рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП v рдФрд░ рд░рд╛рдЙрдВрдб рдЯреЛрд╡рд░реНрдб рдЬрд╝реАрд░реЛ рдХрд╛ рдЧрдгрд┐рддреАрдп рдорд╛рди рд▓реЗрдВред

v | v as T (рд╕рдВрддреГрдкреНрддрд┐) | v as T (рдореЛрдбреБрд▓реЛ)
---- | ---- | ----
in рд░реЗрдВрдЬ (Tmin <= v <= Tmax) | RTZ (v) | RTZ (v)
рдирдХрд╛рд░рд╛рддреНрдордХ рд╢реВрдиреНрдп | 0 | 0
NaN | 0 | 0
рдЕрдирдВрдд | Tmax | 0
-рдЗрдирдлрд┐рдирд┐рдЯреА | рдЯрдорд┐рди | 0
v> Tmax | Tmax | RTZ (v) рдЯреА рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛
v <рддрдорд┐рди | рдЯрдорд┐рди | RTZ (v) рдЯреА рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛

ECMAScript рдорд╛рдирдХ TOInt32 , ToUint32, ToInt16, ToUint16, ToInt8, ToUint8, рдФрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП "modulo" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЗрд░рд╛рджреЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ

ECMAScript рднреА ToInt8Clamp рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИ: рдпрд╣ "рд░рд╛рдЙрдВрдб рдЯреВ рдЯреВ" рдХреЗ рдмрдЬрд╛рдп "рдлреНрд░реИрдХреНрд╢рдирд▓ рд╡реИрд▓реНрдпреВрдЬ рдкрд░ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ" рдХреЛ "рд░рд╛рдЙрдВрдб рд╣рд╛рдл" рдХрд░рддрд╛ рд╣реИред

@ рдУрд▓реА-рдУрдмреНрдХ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдПрдХ рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реИ, рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реАрдорд╛ рдореЗрдВ рд╣реИрдВред

@ oli-obk рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рд╕рдВрдмрдВрдзрд┐рдд https://github.com/rust-lang/rust/issues/41799

рдорд┐рд╢реНрд░рдг рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдлреЗрдВрдХрдирд╛: рдорд╛рд░реНрдХ u128 рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рддреИрд░рддрд╛ рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ u128 рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИред

@ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдБ тЖТ рдлрд╝реНрд▓реЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрд░рддрд╛ рд╣реИ тЖТ рдкреВрд░реНрдгрд╛рдВрдХред рдЪреВрдВрдХрд┐ рджреЛрдиреЛрдВ рдпреВрдмреА-рдлреБрд▓ рд╣реИрдВ, рдФрд░ рд╣рдо рдлреНрд▓реЛрдЯ тЖТ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдкреВрд░реНрдгрд╛рдВрдХ тЖТ рдлреНрд▓реЛрдЯ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рднреА рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлреНрд▓реЛрдЯ рдХреЗ рд▓рд┐рдП тЖТ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрддреГрдкреНрдд рддреЗрдЬреА рд╕реЗ AFAICT рд╣реЛрдЧрд╛ (рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк and рдЕрдиреБрдХреНрд░рдо рдореЗрдВ, рдЯреЗрд╕реНрдЯ + рдЬрдВрдк рдлреНрд▓реЛрдЯ рддреБрд▓рдирд╛ рдФрд░ рдХреВрдж, рд╕рднреА рдЖрдзреБрдирд┐рдХ рдореЗрд╣рд░рд╛рдм рдкрд░ 0.66 рдпрд╛ 0.5 2-3 рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП)ред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдХрдо рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рд╣рдо рдХрд┐рддрдиреЗ рд╕рдЯреАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЗрди-рд░реЗрдВрдЬ рдорд╛рди рдЙрддрдиреЗ рд╣реА рддреЗрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рддрдиреЗ рд╕рдВрднрд╡рддрдГ рд╡реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдПрдЧрд╛? рдпрджрд┐ рдЖрдк рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рдореЗрдВ рдпрд╣ рдШрдмрд░рд╛рд╣рдЯ рд╣реЛрдЧреАред рддрдм рдЖрдкрдХреЗ рдкрд╛рд╕ 1.04E+17.saturating_cast::<u8>() , unsafe { 1.04E+17.unsafe_cast::<u8>() } рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдиреНрдп рдЬреИрд╕реЗ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реЛ рд╕рдХрддреЗ рдереЗред

рдУрд╣, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ u128 рдХреЗ рд▓рд┐рдП рдерд╛, рдФрд░ рд╣рдо рдЙрд╕ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

@ рдХреЛрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдореЗрдВ рд░рд┐рд▓реАрдЬ рдореЛрдб рдореЗрдВ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕рд╛рдорд╛рди рдЕрднреА рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

рдХрд╣рд╛ рдХрд┐, рдбреАрдмрдЧ рдкрд░ рдЖрддрдВрдХ, рдФрд░рд░рд┐рд▓реАрдЬ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ:

  • f32 -> u8, u16, u32, u64, u128, usize ( -1f32 as _ рд╕рднреА рдХреЗ рд▓рд┐рдП, f32::MAX as _ рд╕рднреА рдХреЗ рд▓рд┐рдП рд▓реЗрдХрд┐рди u128)
  • f32 -> i8, i16, i32, i64, i128, isize ( f32::MAX as _ рд╕рднреА рдХреЗ рд▓рд┐рдП)
  • f64 -> рд╕рднреА ints ( f64::MAX as _ рд╕рднреА рдХреЗ рд▓рд┐рдП)

f32::INFINITY as u128 рднреА UB рд╣реИ

@CryZe

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

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

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

3) рдПрдХ рдирдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдПрдВ, '% y = рдлреНрд░реАрдЬ% x', рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХрд╛ рдкреНрд░рд╕рд╛рд░ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ
рдЬрд╝рд╣рд░ред рдпрджрд┐ рдЗрдирдкреБрдЯ рдЬрд╣рд░ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдордирдорд╛рдирд╛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд╣реИ,
рдореВрд▓реНрдпред (рдкреБрд░рд╛рдиреЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рддрд░рд╣, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдорд╛рди рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИ), рдЕрдиреНрдпрдерд╛ рдпрд╣
рдмрд╕ рдЗрд╕рдХрд╛ рдЗрдирдкреБрдЯ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред

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

... рд▓реЗрдХрд┐рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдкрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рдХ рдирд╣реАрдВ, рдЕрдЧрд░ рдХреЛрдИ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред x86 рд╕рднреА рдЦрд░рд╛рдм рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП 0x80000000 рджреЗрддрд╛ рд╣реИ; рдПрдЖрд░рдПрдо рдЖрдЙрдЯ-рдСрдл-рд░реЗрдВрдЬ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрддреГрдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ (рдпрджрд┐ рдореИрдВ рдЗрд╕ рдЫрджреНрдордХреЛрдб рд╕рд╣реА рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ) NaN рдХреЗ рд▓рд┐рдП 0 рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╕реНрд╡рддрдВрддреНрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ fp-to-int рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ; рдХрдо рд╕реЗ рдХрдо рдПрдЖрд░рдПрдо рдкрд░ рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдШрдЯрдирд╛ рдореЗрдВ рдСрдЯреЛрд╡реЗрд░рд╛рдЗрдЬреЗрд╢рди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ рдерд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рддреБрд▓рдирд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди-рд░реЗрдВрдЬ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдлреНрд▓реЛрдЯ-рдЯреВ-рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд╢рд╛рд╡рд╛рджреА рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ ...

as рд░реВрдкрд╛рдВрддрд░рдг рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдШрдмрд░рд╛рддреЗ рд╣реИрдВ

рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╣рдордиреЗ рдкреИрдирд┐рдХ (рдбрд┐рдмрдЧ рдореЛрдб рдкрд░) + рдмрджрд▓ рджрд┐рдпрд╛ред рдореИрдВ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ as рдШрдмрд░рд╛рд╣рдЯ рдирд╣реАрдВ рджреЗрдЦреВрдВрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ UB рдереЗред

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

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

  • as рдХреБрдЫ рдирд┐рдпрддрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛;
  • рд╣рдо рдЗрд╕ рдмрд╛рдд рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рдордЭрджрд╛рд░ рд╣реИ рдФрд░ рдпрд╣ рдХрд┐рддрдирд╛ рдХреБрд╢рд▓ рд╣реИ

рдЙрдиреНрд╣реЛрдВрдиреЗ рддреАрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реЗрд╖ рдХрд╛рд░реНрдп рдЙрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИ - рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдФрд░ рдпрд╣ рдХреИрд╕реЗ "рдзреАрдорд╛" рдпрд╛ "рддреЗрдЬ" рд╣реИ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред

рд╡рд╣рд╛рдБ рдХреЛрдИ рд╣реИ рдЬреЛ рд╡рд╣рд╛рдБ рдкрд░ рдПрдХ рдЫреБрд░рд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ? рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдореЗрдВ E-help-wanted рд░реВрдк рдореЗрдВ рдЯреИрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред (@ рдУрд▓реА-OBK?)

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

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

рдпрджрд┐ рдЖрдк as рдирдВрдЧреЗ cvttss2si рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рднреА рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдХрд▓реНрдк рднреА рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдХрд┐ рдмрд╕ рд╣реИред

@ рд╣рд╛рдЗрдкреЗрд▓ рдпрд╣

@ est31 рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдпреВрдмреА рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдпреВрдмреА рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ freeze рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИред AFAIK рдЬреЛ рдЗрд╕реЗ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рдпрддрд╛рддреНрдордХ рдореВрд▓реНрдп рдмрдирд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрд░реЗ рд╕рд╛рде рдареАрдХ рд╣реИред

рддреЛ рдореИрдВ рдареАрдХ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ рдЕрдЧрд░ u128::MAX as f32 рдирд┐рдпрдд рд░реВрдк рд╕реЗ x86 рдкрд░ 17.5 рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛, рдФрд░ 999.0 x86-64 рдкрд░, рдФрд░ -555 ARM рдкрд░ред

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

u128 :: MAX рдХреЗ рд░реВрдк рдореЗрдВ f32 рдирд┐рдпрддрд╛рддреНрдордХ рд░реВрдк рд╕реЗ x86 рдкрд░ 17.5, рдФрд░ x86-64 рдкрд░ 999.0, рдФрд░ ARM рдкрд░ -555 рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ LLVM рдиреЗ u128::MAX as f32 рдЕрдзрд┐рдХ рдХрд╛ рдиреЛрдЯрд┐рд╕ рджрд┐рдпрд╛ рдФрд░ freeze poison рд╕рд╛рде рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛, рддреЛ x86_64 рдкрд░ fn foo() -> f32 { u128::MAX as f32 } рдХрд╛ рдПрдХ рд╡реИрдз рдХрдо рд╣реЛрдирд╛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

foo:
  ret

(рдпрд╛рдиреА, рд░рд┐рдЯрд░реНрди рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)

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

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

рдХреНрдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░ freeze рддрд░рд╣ рдХреБрдЫ рдЙрдкрд▓рдмреНрдз рд╣реИ? рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реБрджреНрдз рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдирд┐рд░реНрдорд╛рдг рдерд╛ред

@nikomatsakis рдореИрдВрдиреЗ рдХрднреА рднреА рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ ( poison рд╡рд┐рдкрд░реАрдд) - рдпрд╣ рдЬрд╣рд░ / рдЕрдкрд╡рд┐рддреНрд░ рдХреА рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╕реБрдзрд╛рд░ рд╣реИред

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

рдХреНрдпрд╛ рд╣рдо рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдЪрд░реНрдЪрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RFC рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? IMO, рдЬреЛ рдХреБрдЫ рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ as рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЛрдЧреБрдирд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдирдХреА рдЖрд╡рд╛рдЬ рд╕реБрдирдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

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

  • unsafe_trunc(Int64, x) рдирдХреНрд╢реЗ рд╕рдВрдЧрдд LLVM рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдВрддрд░рд┐рдХ fptosi (1.5 ns)
  • trunc(Int64, x) рд░реЗрдВрдЬ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ (3 ns)
  • convert(Int64, x) рд╕реАрдорд╛ рдпрд╛ рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ (6 ns) рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ

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

@ рдореИрдВ рдПрдХ RFC рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛! рд╣рд╛рд▓рд╛рдБрдХрд┐ , рдЙрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ

рдореИрдВрдиреЗ JS рд╢рдмреНрджрд╛рд░реНрде (modulo @jorendorff рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ) рдФрд░ рдЬрд╛рд╡рд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ "рд╕рдВрддреГрдкреНрддрд┐" рдХреЙрд▓рдо рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рд▓рд┐рдВрдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ JS рдФрд░ Java рд╣реИ ред

рдореИрдВрдиреЗ рд░рд╕реНрдЯ рдореЗрдВ рд╕рдВрддреГрдкреНрддрд┐ рдХреЗ рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рднреА рдЬрд╝реЛрд░ рджрд┐рдпрд╛, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ (?) рд╕рд╣реА рд╣реИред рдФрд░ рдХреБрдЫ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирдВрдмрд░ рднреА рдорд┐рд▓реЗред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрддреГрдкреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдВрддрд░рд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2-3 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИ, рдЬреЛ рдХрд┐

рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рд╕реНрдЯ рдореЗрдВ "рдореЙрдб" рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП ...

рдореЗрд░реЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдореЗрдВ f32::as_u32_unchecked() рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ f32::as_u32_unchecked() рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрд╣ рдПрдХ рдмреБрдореЗрд░ рд╣реИ - рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ?

рдХреНрдпрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рддреЗрдЬ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ?

@eddyb рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ unsafe fn as_u32_unchecked(self) -> u32 f32 рдФрд░ рдЬреЛ рдХрд┐ as рд▓рд┐рдП рдПрдХ рд╕реАрдзрд╛ рдПрдирд╛рд▓реЙрдЧ рд╣реИ рд╡рд╣ рдЖрдЬ рд╣реИред

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

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

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдпрджрд┐ рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреИрдиреЛрдирд┐рдХрд▓ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдЙрдЯ-рдСрдл-рд░реЗрдВрдЬ рдЗрдирдкреБрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рддрд╛ undef / poison " рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рдПрдХ рдЖрд╢реНрд╡рд╕реНрдд RFC (llvm-dev рд╕реВрдЪреА рдкрд░) рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЦрд░реАрджрдирд╛-рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдмреИрдХреЗрдВрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рдЧрд┐рд░рд╛рд╡рдЯ-рд╡рд╛рдкрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде) рд▓рдХреНрд╖реНрдп)ред рд╕рдВрднрд╡рддрдГ рдореМрдЬреВрджрд╛ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЛ рди-рдпреВрдмреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП llvm-dev рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдХрд┐рд╕реА рднреА C рдФрд░ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛" рдЬреИрд╕реЗ рд╕рд╛рдЗрдб-рд╕реНрдЯреЗрдк рдкреНрд░рд╢реНрди), рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмрд╣реБрдд рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

рдмрд╕ рдЕрдЧрд░ рдЖрдк рдЗрди рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░реЗрдВрдЧреЗ:

рд╕рдВрддреГрдкреНрддрд┐ (рдЖрдЙрдЯ-рдСрдл-рд░реЗрдВрдЬ рдорд╛рди рдмрди рдЬрд╛рддреЗ рд╣реИрдВ
рдореЛрдбреБрд▓реЛ (рдЖрдЙрдЯ-рдСрдл-рд░реЗрдВрдЬ рдорд╛рдиреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкрд╣рд▓реЗ рдПрдХ рдмрд┐рдЧрд┐рдВрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ, рдлрд┐рд░ рдЯреНрд░рдВрдХрдЯрд┐рдВрдЧ)

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

рдореИрдВрдиреЗ рдЗрд╕реЗ E-needs-mentor рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ WG-compiler-middle рд╕рд╛рде рдЯреИрдЧ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрд╡рдзрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ! рд╣рд╛рд▓рд╛рдВрдХрд┐ , рдиреЛрдЯреНрд╕ рдмрд╣реБрдд рд╡рд┐рд░рд▓ рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ @ рд░рд╕реНрдЯ-рд▓реЗрдВрдЧ / рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд┐рд╕реА рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ!

@nikomatsakis

IIRC LLVM рдЕрдВрддрддрдГ freeze рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ freeze рдХрд░ рдпреВрдмреА рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред

рдЕрдм рддрдХ рдХреЗ рдореЗрд░реЗ рдкрд░рд┐рдгрд╛рдо: https://gist.github.com/s3bk/4bdfbe2acca30fcf587006ebb4811744

_Array рд╡реЗрд░рд┐рдПрдВрдЯ 1024 рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд▓реВрдк рдЪрд▓рд╛рддрд╛ рд╣реИред
_cast: x as i32
_clip: x.min (MAX) .max (MIN) i32 рдХреЗ рд░реВрдк рдореЗрдВ
_рдкреИрдирд┐рдХ: рдЕрдЧрд░ x рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ рджрд╣рд╢рдд
_zero: рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ

test bench_array_cast       ... bench:       1,840 ns/iter (+/- 37)
test bench_array_cast_clip  ... bench:       2,657 ns/iter (+/- 13)
test bench_array_cast_panic ... bench:       2,397 ns/iter (+/- 20)
test bench_array_cast_zero  ... bench:       2,671 ns/iter (+/- 19)
test bench_cast             ... bench:           2 ns/iter (+/- 0)
test bench_cast_clip        ... bench:           2 ns/iter (+/- 0)
test bench_cast_panic       ... bench:           2 ns/iter (+/- 0)
test bench_cast_zero        ... bench:           2 ns/iter (+/- 0)

рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЧреЛрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрди 2 ns / iter рдХреЗ рдкреАрдЫреЗ рдХреБрдЫ рдЕрдВрддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИ, рд╕рднреА 4 рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд▓рд┐рдП _exactly_ 2 ns?

@ рд╕рдкрд╛ 1234 рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред

@ sp-1234 рдпрд╣ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИред рдЧреИрд░-рд╕рд░рдгреА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореВрд▓ рд░реВрдк рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдПрдХрд▓-рдореВрд▓реНрдп рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ #[inline(never)] рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ 2ns рдмрдирд╛рдо 3ns рдорд┐рд▓рддреЗ рд╣реИрдВред

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

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

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

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, black_box рд╕реНрдкреИрдорд┐рдВрдЧ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЙрдкрдпреЛрдЧреА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рд▓рдЧрд╛рддрд╛рд░ рд╕реНрдХреЗрд▓рд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП 0ns рджреЗрддрд╛ рд╣реИ ( cast_zero , рдЬреЛ 1ns рджрд┐рдЦрд╛рддрд╛ рд╣реИ)ред рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ @alexcrichton рдиреЗ рдЕрдкрдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рддреБрд▓рдирд╛ 100 рдмрд╛рд░ рдХреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд╣реА рд╣реИрдХ рдЕрдкрдирд╛рдпрд╛ред рдЕрдм рдореИрдВ рдЗрди рдирдВрдмрд░реЛрдВ ( рд╕реНрд░реЛрдд рдХреЛрдб ) рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ:

test bench_cast             ... bench:          53 ns/iter (+/- 0)
test bench_cast_clip        ... bench:         164 ns/iter (+/- 1)
test bench_cast_panic       ... bench:         172 ns/iter (+/- 2)
test bench_cast_zero        ... bench:         100 ns/iter (+/- 0)

рдореЗрд░реЗ рд▓рд┐рдП рдЙрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЦреИрд░, рд╕рдЪ рдХрд╣рд╛ рдЬрд╛рдП рддреЛ, рдореБрдЭреЗ test рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкрд░ рд╡реИрд╕реЗ рднреА рд╕рдВрджреЗрд╣ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЬреЛ рдлреНрд▓реИрдЯ 0ns рдореБрдЭреЗ рдкрд╣рд▓реЗ рдорд┐рд▓реЗ рдереЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ black_box(x); (рдПрдХ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ) рдХреЗ рдХреЗрд╡рд▓ 100 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ 34ns рд▓рдЧрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрди рдирдВрдмрд░реЛрдВ рдХреА рдордЬрд╝рдмреВрддреА рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдФрд░ рднреА рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рджреЛ рдмрд┐рдВрджреБ:

  • NaN рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж (рдпрд╣ 0 рдХреЗ рдмрдЬрд╛рдп рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ?), cast_clip рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди @alexcrichton рдХреЗ рд╕рдВрддреГрдкреНрдд рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдирдХреЗ рд░рди рдФрд░ рдорд╛рдЗрди рдореЗрдВ as рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╕рдордп рд╣реИ
  • @ S3bk рдХреЗ рд╕рд░рдгреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореИрдВ cast_panic рдХреЛ рдЕрдиреНрдп рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдЬрд╛рддрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдРрд░реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░ рдФрд░ рднреА рдЕрдзрд┐рдХ рдордВрджреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдмрд╛рддреЗрдВ рдХреЗрд╡рд▓ рд╕реВрдХреНрд╖реНрдо-рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд╡рд┐рд╡рд░рдг рдФрд░ / рдпрд╛ рдЖрд╢рд╛рд╡рд╛рджреА рдордиреЛрджрд╢рд╛ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реЛрдВ?

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╣рд▓реНрдХреЗ рд▓реЛрдб рдХреЗ рддрд╣рдд рдПрдХ i7-6700K рдкрд░ 1.21.0-рд░рд╛рдд (d692a91fa 2017-08-04), -C opt-level=3 , рдХреЗ рд╕рд╛рде рдорд╛рдкрд╛ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдореЗрд░рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рдВрджреЗрд╣ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рдСрдкрд░реЗрд╢рди рдкрд░ рдЕрдкрдиреА рджреАрд╡рд╛рд░ рдШрдбрд╝реА рдХреЗ рд╕рдордп рдХрд╛ 1% рднреА рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдПрдХ -Z рдзреНрд╡рдЬ рдХреЗ рдкреАрдЫреЗ, рдЬрдВрдЧ рдореЗрдВ as рдЬрд╛рддрд┐рдпреЛрдВ рдХреЛ рджреВрдВрдЧрд╛ , рдФрд░ рдлрд┐рд░ рдЗрд╕ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рдХреБрдЫ рдЧреИрд░-рдХреГрддреНрд░рд┐рдо рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдХрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдкреНрд░рднрд╛рд╡ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЕрдиреБрдкреНрд░рдпреЛрдЧред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдРрд╕реЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рд╡рд┐рднрд┐рдиреНрди рдХрд┐рд╕реНрдореЛрдВ (рдЬреИрд╕реЗ рдПрдЖрд░рдПрдо рд╕рд╣рд┐рдд) рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдРрд╕реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЬрдВрдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░реЗрдЦрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЧрд▓рдд рд╣реИ: std::i32::MAX (2 ^ 31-1) рдлреНрд▓реЛрдЯ 32 рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП std::i32::MAX as f32 рд╣реЛрдЧрд╛ рдирд┐рдХрдЯрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рдореВрд▓реНрдп (2 ^ 31) рдХреЗ рд▓рд┐рдП рдЧреЛрд▓ред рдпрджрд┐ рдпрд╣ рдорд╛рди x рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдПрдХ рд╕рдЦреНрдд рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдБ, рд╣рдо рдкрд╣рд▓реЗ рд╕рд░реНрд╡реЛ рдореЗрдВ рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди f64 рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реА рдЧрдИ рдФрд░ рдлрд┐рд░ рдХреНрд▓реИрдВрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ред

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

рдКрдкрд░реА рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ 0x7FFF_FF80i32 рдФрд░ -0x8000_0000i32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЗрд╕реЗ f64 рдХреЗ рд▓рд┐рдП рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕рд╣реА рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм 0x7fff_ff80 , рд▓реЗрдХрд┐рди рдмрд╕ рдПрдХ рд╕рдЦреНрдд рдЕрд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╢рд╛рдпрдж рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

x < 0x8000_0000u32 as f32 ? рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ред

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

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

рдКрдкрд░ рджрд┐рдП рдЧрдП рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдВрддреГрдкреНрддрд┐ рд╢рдмреНрджрд╛рд░реНрде рдФрд░ @simonbyrne рдХреЗ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде @alexcrichton рдХрд╛рд╕реНрдЯ рдХреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢рд╛рдЦрд╛ рд░рд╣рд┐рдд рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдЙрдиреНрдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ u16 , i16 рдФрд░ i32 рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╕рднреА рдХреЛ рдХреБрдЫ рдЕрд▓рдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо:

test i16_bench_array_cast       ... bench:          99 ns/iter (+/- 2)
test i16_bench_array_cast_clip  ... bench:         197 ns/iter (+/- 3)
test i16_bench_array_cast_clip2 ... bench:         113 ns/iter (+/- 3)
test i16_bench_cast             ... bench:          76 ns/iter (+/- 1)
test i16_bench_cast_clip        ... bench:         218 ns/iter (+/- 25)
test i16_bench_cast_clip2       ... bench:         148 ns/iter (+/- 4)
test i16_bench_rng_cast         ... bench:       1,181 ns/iter (+/- 17)
test i16_bench_rng_cast_clip    ... bench:       1,952 ns/iter (+/- 27)
test i16_bench_rng_cast_clip2   ... bench:       1,287 ns/iter (+/- 19)

test i32_bench_array_cast       ... bench:         114 ns/iter (+/- 1)
test i32_bench_array_cast_clip  ... bench:         200 ns/iter (+/- 3)
test i32_bench_array_cast_clip2 ... bench:         128 ns/iter (+/- 3)
test i32_bench_cast             ... bench:          74 ns/iter (+/- 1)
test i32_bench_cast_clip        ... bench:         168 ns/iter (+/- 3)
test i32_bench_cast_clip2       ... bench:         189 ns/iter (+/- 3)
test i32_bench_rng_cast         ... bench:       1,184 ns/iter (+/- 13)
test i32_bench_rng_cast_clip    ... bench:       2,398 ns/iter (+/- 41)
test i32_bench_rng_cast_clip2   ... bench:       1,349 ns/iter (+/- 19)

test u16_bench_array_cast       ... bench:          99 ns/iter (+/- 1)
test u16_bench_array_cast_clip  ... bench:         136 ns/iter (+/- 3)
test u16_bench_array_cast_clip2 ... bench:         105 ns/iter (+/- 3)
test u16_bench_cast             ... bench:          76 ns/iter (+/- 2)
test u16_bench_cast_clip        ... bench:         184 ns/iter (+/- 7)
test u16_bench_cast_clip2       ... bench:         110 ns/iter (+/- 0)
test u16_bench_rng_cast         ... bench:       1,178 ns/iter (+/- 22)
test u16_bench_rng_cast_clip    ... bench:       1,336 ns/iter (+/- 26)
test u16_bench_rng_cast_clip2   ... bench:       1,207 ns/iter (+/- 21)

рдкрд░реАрдХреНрд╖рдг рдПрдХ рдЗрдВрдЯреЗрд▓ рд╣рд╕рд╡реЗрд▓ i5-4570 рд╕реАрдкреАрдпреВ рдФрд░ рд░рд╕реНрдЯ 1.22.0-рд░рд╛рддреНрд░рд┐ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
clip2 рдирдИ рд╢рд╛рдЦрд╛ рд░рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рд╕рднреА 2 ^ 32 рд╕рдВрднрд╛рд╡рд┐рдд f32 рдЗрдирдкреБрдЯ рдореВрд▓реНрдпреЛрдВ рдкрд░ clip рд╕рд╣рдордд рд╣реИред

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

X86 рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВ :
рд╢рд╛рдЦрд╛ рд░рд╣рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ minss / maxss рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░рддрд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ Rust рд╕реЗ рдПрдЖрд░рдПрдо рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЙрдбрдмреЛрд▓реНрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдХреНрд▓реИрдо рдХреЗ рд╕рд╛рде рдПрдЖрд░рдПрдо рдХреА рддреБрд▓рдирд╛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХреА рдЧрдИ рд╣реИ: https://godbolt.org/g/s7ronw
рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдФрд░ рдПрдЖрд░рдПрдо рдХреЗ рдмрд╣реБрдд рдХреБрдЫ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛: рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЬреНрдпрд╛рджрд╛рддрд░ vmax / vmin рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрд╢рд╛рдЬрдирдХ рджрд┐рдЦрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ LLVM рдХреЛ рдЕрдВрддрддрдГ рдПрдХ рд╣реА рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЛ рдореЛрдбрд╝рдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

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

рдореИрдВ u16_cast_clip2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ: рдпрд╣ NaN рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ?! NaN рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди NaN рдХреЛ рдЕрдирдореЙрдбрд┐рдлрд╛рдЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ f32 рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ (рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рднреА рд╣реБрдЖ, рддреЛ рдпрд╣ 0 рдХреЗ рдмрдЬрд╛рдп рд╕реАрдорд╛ рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред )ред

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

@rkruppe рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ if рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХрд░ рд▓реА рдФрд░ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ред f32 as u16 рдКрдкрд░реА 0x8000 рдХреЛ рджреВрд░ рдХрд░рдХреЗ рд╕рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЗрд╕реЗ рдкрдХрдбрд╝ рдирд╣реАрдВ рдкрд╛рдПред рдореИрдВрдиреЗ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрд╡реИрдк рдХрд░рдХреЗ рдФрд░ рдЗрд╕ рд╕рдордп if (y.is_nan()) { panic!("NaN"); } рд╕рд╛рде рд╕рднреА рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдЕрдкрдбреЗрдЯ рдХреАред X86 рдХреЛрдб рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖ рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдмрджрд▓рд╛рд╡ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ vmax u16 ARM рдХреЗрд╕ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╕реЗ LLVM рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдЖрд░рдПрдо рдирд┐рд░реНрджреЗрд╢ рдХреЗ NaN рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рдПрдХ LLVM рд╕реАрдорд╛ рд╣реИред

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

рд╕рд░рдгреА рд╕рдВрд╕реНрдХрд░рдг рд╕рджрд┐рд╢ рд╣реИрдВред
Godbolt: https://godbolt.org/g/HnmsSV

рдкреБрди :: рдПрдЖрд░рдПрдо asm , рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдХрд╛рд░рдг vmax рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ NaN рджреЗрддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╛ рддреЛ рдСрдкрд░реЗрдВрдб NaN рд╣реИ ред рдХреЛрдб рдЕрднреА рднреА рд╢рд╛рдЦрд╛рд╣реАрди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдкреВрд░реНрд╡рд╡рд░реНрддреА vcmp 0 рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдП, рдЪрд╛рд▓рд┐рдд рдЪрд╛рд▓реЛрдВ ( vmovgt ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

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

рдУрд╣реНрд╣, рдареАрдХ рд╣реИред рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред

рдореИрдВ рдПрдХ -Z рдЭрдВрдбреЗ рдХреЗ рдкреАрдЫреЗ, рдЬрдВрдЧ рдореЗрдВ рд╕рдВрддреГрдкреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрддреГрдкреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛

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

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

@rkruppe рдЖрдкрдХреЛ @ oli-obk рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ miri рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПред

рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╣реИ: # 45205

45205 рдХреЛ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдХреЛрдИ рднреА (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЕрдЧрд▓реА рд░рд╛рдд рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ) -Z saturating-float-casts рдорд╛рдзреНрдпрдо рд╕реЗ RUSTFLAGS -Z saturating-float-casts рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рд╕рдВрддреГрдкреНрддрд┐ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рдХреЛ рдорд╛рдкрддрд╛ рд╣реИ ред [рез] рдЗрд╕ рддрд░рд╣ рдХреА рдорд╛рдк рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧреАред

[рез] рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЧреИрд░-рд╕рд╛рдорд╛рдиреНрдп, рдЧреИрд░- #[inline] рднрд╛рдЧреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП резрежреж% рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ Xargo рдХреЗ рд╕рд╛рде std рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВрдЧреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд░реВрдкрд╛рдВрддрд░рдг рд▓рдХреНрд╖рдг рдирд┐рд╣рд┐рддрд╛рд░реНрде #[inline] )ред

@rkruppe рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░реНрдирд▓ / рдпреВрдЬрд░реНрд╕ рдкреЗрдЬ рд╢реБрд░реВ рдХрд░реЗрдВ, рдПрдХ рд╣реА рдирд╕ рдореЗрдВ https://internals.rust-lang.org/t/help-us-benchmark-incremental-compilation/6th3/ (рд╣рдо рддрдм рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рд╣рдорд╛рд░реЗ рдореБрджреНрджреЗ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрд╕рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ)

@rkruppe рдЖрдкрдХреЛ рдПрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЪрд░реНрдЪрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ!

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

@ est31 рд╣рдореНрдоред рд╣рд╛рд▓рд╛рдБрдХрд┐, -Z рдзреНрд╡рдЬ рджреЛрдиреЛрдВ рдХрд╛рд╕реНрдЯ рджрд┐рд╢рд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдПрдХ рдЧрд▓рддреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рд░реЗрдЯреНрд░реЛрд╕реНрдкреЗрдХреНрдЯ рдореЗрдВ), рдРрд╕рд╛ рд▓рдЧрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛрдиреЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХреЛ рдлреНрд▓рд┐рдк рдХрд░реЗрдВрдЧреЗ, рдФрд░ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝рд╛ рдУрд╡рд░рд▓реИрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ рдЪрд╛рд╣рд┐рдП рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдореБрджреНрджрд╛ рд╕рдВрддреГрдкреНрддрд┐ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЯрд┐рдХрд╛ рд╣реИ, рдЬрдмрдХрд┐ # 41799 рдореЗрдВ рдЗрд╕ рдкрд░ рд╕рд╣рдорддрд┐ рд╣реИ рдХрд┐ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ)ред
рдпрд╣ рдереЛрдбрд╝рд╛ рдкрд╛рдЧрд▓ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдХреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд▓рдХреНрд╖рд┐рдд рднреА # 41,799 рдХреЛ рдареАрдХ рдХрд░ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдорд╛рдкрдиреЗ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рддрд┐рдЧрдорди рдХреА overreporting рддреЛ рдореИрдВ рдЙрд╕ рдХреЗ рд╕рд╛рде рдареАрдХ рдХреА рддрд░рд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдиреЗрддреГрддреНрд╡ рдореЗрдВ рд╣реИ рдХрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ -Z рдзреНрд╡рдЬ рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдЧреЗ рдмрдврд╝реЗрдВред)

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

рдореИрдВрдиреЗ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкрдж рдХрд╛ рдорд╕реМрджрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ: https://gist.github.com/Gankro/feab9fb0c42881984caf93c7ad494ebd

рдЗрд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдЭрд┐рдЭрдХ, рдпрд╛ рдмрд╕ рдореБрдЭреЗ рдиреЛрдЯреНрд╕ рджреЗрдВ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХреВрдВред (рдиреЛрдЯ рдореИрдВ const fn рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдВ)

рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд┐рдбрдмрд┐рдЯ рдпрд╣ рд╣реИ рдХрд┐ рдлреНрд▓реЛрдЯ рдХреА рд▓рд╛рдЧрдд>> рдЕрдВрддрд░ рд░реВрдкрд╛рдВрддрд░рдг рдореМрд▓рд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред 86 рдкрд░, cvtss2si cvttss2si рд░рд┐рдЯрд░реНрди рднреА рдХрдо рдореЗрдВ 0x80000000, рднреА рдЙрдЪреНрдЪ рд╣реИ, рдФрд░ рдиреЗрди рдорд╛рдорд▓реЛрдВ, рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддреЛ -Zsaturating-float-casts рдПрдХ рд╕рд╛рде cvtss2si cvttss2si 0x80000000 рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкреАрдЫрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рддреБрд▓рдирд╛ рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реА рд╢рд╛рдЦрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред ARM рдкрд░, vcvt.s32.f32 рдкрд╛рд╕ -Zsaturating-float-casts рд╢рдмреНрджрд╛рд░реНрде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдВред рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@Gankro

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЧрд┐рд╕реНрдЯ рдкрд░ рдХреБрдЫ рдиреЛрдЯреНрд╕ рдЫреЛрдбрд╝ рджрд┐рдПред рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ -Z рдзреНрд╡рдЬ рд╕реЗ u128-> f32 рдЬрд╛рддрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдкрд░ рдПрдХ рд╕реНрдЯреИрдм рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рд┐рд░реНрдл рджреЛ рдУрд░реНрдереЛрдЧреЛрдирд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзреНрд╡рдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзреНрдпрд╛рди рднрдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреИрд╡рд┐рдПрдЯ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

(рдореИрдВрдиреЗ -Z рдЭрдВрдбреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП # 45900 рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдлреНрд▓реЛрдЯ рдХреЛ рдХрд╡рд░ рдХрд░реЗ-> int рдореБрджреНрджрд╛)

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдордВрдЪ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рд▓рд╛ @ sunfishcode (рдХрдо рд╕реЗ рдХрдо x86) рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ рдореИрдВ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рдПрдЧрд╛ред

рдореИрдВрдиреЗ рдЪрд░реНрдЪрд╛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╕реМрджреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ (рдореВрд▓ рд░реВрдк рд╕реЗ u128 рдХреЗ рдХрд┐рд╕реА рднреА рдЗрдирд▓рд╛рдЗрди рдЙрд▓реНрд▓реЗрдЦ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ -> рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП f32)ред

@sunfishcode рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ? рдХреНрдпрд╛ llvm.x86.sse.cvttss2si рдЖрдВрддрд░рд┐рдХ рдЬреЛ рдЖрдк рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ?

рдпрд╣рд╛рдБ рдПрдХ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд▓рд┐рдВрдХ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

https://play.rust-lang.org/?gist=33cf9e0871df2eb2475b845af4f1b574&version=nightly

рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВ, float_to_int_with_intrinsic рдФрд░ float_to_int_with_as рджреЛрдиреЛрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред (рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ, float_to_int_with_intrinsic рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ рдЙрдЪреНрдЪ рдореЗрдВ рд╢реВрдиреНрдп рдбрд╛рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред)

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░рдВрддрд░ рддрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд▓рдЧрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

float_to_int_with_intrinsic(42.0)

рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

movl    $42, %eax

рд▓реЗрдХрд┐рди рдПрдХ рдЖрдЙрдЯ-рдСрдл-рдж-рд░реЗрдВрдЬ рдорд╛рди,

float_to_int_with_intrinsic(42.0e33)

рдореБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ:

cvttss2si   .LCPI2_0(%rip), %eax

(рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░рдВрддрд░ 0x80000000 рдХреА рдУрд░ рдмрдврд╝реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкрд░рд╛рдЬрд┐рдд рдирд╣реАрдВ рд╣реИред)

рдУрд╣ рдмрдврд╝рд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░реЗрдЧрд╛!

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

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

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

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

  • рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг 0x80000000 рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдПрдХ рдФрд░ рддреБрд▓рдирд╛ (рдЗрдирдкреБрдЯ рдорд╛рди рдХреЗ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ int :: MIN рдпрд╛ int :: MAX рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рддреЛ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдПрдирдПрдПрди рдХреЛ рднреЗрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВред рддреЛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ:

    • рдЖрдк рддреБрд▓рдирд╛ / рдЪрдпрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ

    • рдЖрдк рдПрдХ рдлреНрд▓реЛрдЯ рдХреА рддреБрд▓рдирд╛ рдПрдХ int рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ OoO рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк FUs рдкрд░ рдЕрдбрд╝рдЪрди рдбрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмрдбрд╝рд╛ рд▓рдЧрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рддреБрд▓рдирд╛ рдлреНрд▓реЛрдЯ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рд╣реИ -> рдЗрдВрдЯ рддреБрд▓рдирд╛, рдЬрдмрдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рддреБрд▓рдирд╛ рд╕рднреА рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЬреАрдд рд╣реИред

  • рд╡реИрд╢реНрд╡реАрдХрд░рдг рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдХрдард┐рди рдпрд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реВрдк рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬрд╝рд░ рдЗрд╕ рдЖрдВрддрд░рд┐рдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
  • рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ (AFAIK) рдпрд╣ рд░рдгрдиреАрддрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред f32 -> u8, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд┐рдХреНрд╕рдЕрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдЗрд╕ рд░рдгрдиреАрддрд┐ рдХреЛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рднрд╣реАрди рдмрдирд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдкреНрд░рдХрд╛рд░ рдЗрд╕рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ f32 -> u32 рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢ рд╣реИ), рд▓реЗрдХрд┐рди рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
  • рдЖрдк рдЦреБрд╢ рдкрде рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рд╛рдЦрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рджреЛ рдпрд╛ рддреАрди рддреБрд▓рдирд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдЦрд╛рдПрдВ, рдкрд┐рдЫрд▓реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ @ActuallyaDeviloper рдиреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рджрд┐рдпрд╛ рдерд╛, рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рд╡рд╛рдВрдЫрдиреАрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ: рдкреНрд░рджрд░реНрд╢рди рдЕрдм рдФрд░ рднреА рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрднрд╛рд░-рдирд┐рд░реНрднрд░ рдФрд░ рд╢рд╛рдЦрд╛-рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рд╢реЛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ unsafe fn as_u32_unchecked(self) -> u32 рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреА рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рд╡рд╛рд▓реА рд╣реИ? рдЕрдЧрд░ рд╡реЗ рдЕрдВрдд рдерд╛ рдПрдХ рдордВрджреА рдХреЛ рджреЗрдЦ рдХрд┐рд╕реА рдХреЛ рдХреНрдпрд╛ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рд╕рд╣рд╛рд░рд╛ рд╣реЛрдЧрд╛?

@bstrie рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ as <type> [unchecked] рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдФрд░ unchecked рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП unsafe рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╕рдВрджрд░реНрднреЛрдВред

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

@ssokolow рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ рд╕рдм рд╕рд┐рд░реНрдл рджрд╕ рд░рдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдзреНрдпрд╛рди рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп foo.as_unchecked::<u32>() рдХрд╛ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди (рдФрд░ рд╕рд╣рд╡рд░реНрддреА рдЕрдВрддрд░реНрд╡рд┐рд░реЛрдзрд┐рдд рдмрд┐рдХреЗрд╢реЗрдб) рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рд╣рдореЗрдВ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрдврд╝рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рдЙрди рдЪреАрдЬреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ unsafe рдЕрдирд▓реЙрдХ рдХрд░рддреА рд╣реИред

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

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

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ UncheckedFrom / UncheckedInto unsafe fn рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдП рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ From / Into рдЬреБрдбрд╝рддреА рд╣реИред TryFrom / TryInto рд╕рдВрдЧреНрд░рд╣ред

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

X86 рдЕрдиреБрджреЗрд╢ рд╕реЗрдЯ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдкрд░ рдХреБрдЫ рдиреЛрдЯреНрд╕:

SSE2 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реАрдорд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЖрдкрдХреЛ рджреЗрддреА рд╣реИрдВред рдЖрдкрдХреЗ рдкрд╛рд╕:

  • 32-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде CVTTSS2SI рдкрд░рд┐рд╡рд╛рд░: рдПрдХрд▓ рдлреНрд▓реЛрдЯ рдХреЛ i32 рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ
  • 64-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде CVTTSS2SI рдкрд░рд┐рд╡рд╛рд░: рдПрдХрд▓ рдлреНрд▓реЛрдЯ рдХреЛ i64 (x86-64) рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ
  • CVTTPS2PI рдкрд░рд┐рд╡рд╛рд░: рджреЛ рдлрд╝реНрд▓реЛрдЯреНрд╕ рдХреЛ рджреЛ i32s рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ

рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╛рд╕ f32 рдФрд░ f64 (рдФрд░ рд╕рд╛рде рд╣реА рдРрд╕реЗ рд╡реЗрд░рд┐рдПрдВрдЯ рд╣реИрдВ рдЬреЛ рд░реМрдВрджрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЧреЛрд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдмреЗрдХрд╛рд░ рд╣реИ)ред

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

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореМрдЬреВрджрд╛ ('рдЕрд╕реБрд░рдХреНрд╖рд┐рдд') рд╡реНрдпрд╡рд╣рд╛рд░:

  • U32 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ i64 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВред (рдпрд╣ рдЖрдЙрдЯ-рдСрдл-рд░реЗрдВрдЬ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпреВрдмреА рд╣реИ рдЬреЛ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред)
  • рдХреБрдЫ рднреА 16-рдмрд┐рдЯ рдпрд╛ 8-рдмрд┐рдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ i64 рдпрд╛ i32 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдХрд╛рдЯ рджреЗрддреЗ рд╣реИрдВред
  • U64 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред F32 рд╕реЗ u64 рдХреЗ рд▓рд┐рдП GCC рдФрд░ LLVM рдПрдХ рдмрд░рд╛рдмрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:
fn f32_to_u64(f: f32) -> u64 {
    const CUTOFF: f32 = 0x8000000000000000 as f32; // 2^63 exactly
    if !(f >= CUTOFF) { // less, or NaN
        // just use the signed conversion
        f as i64 as u64
    } else {
        0x8000000000000000u64 + ((f - CUTOFF) as i64 as u64)
    }
}

рдЕрд╕рдВрдмрдВрдзрд┐рдд рдордЬреЗрджрд╛рд░ рддрдереНрдп: "рдХрдиреНрд╡рд░реНрдЯ-рдереНрд░реВ-рдЯреНрд░рдВрдХрдЯ" рдХреЛрдб рдкреАрдврд╝реА рд╡рд╣ рд╣реИ рдЬреЛ рд╕реБрдкрд░ рдорд╛рд░рд┐рдпреЛ 64 рдореЗрдВ " рд╕рдорд╛рдирд╛рдВрддрд░ рдмреНрд░рд╣реНрдорд╛рдВрдб " рдЧрдбрд╝рдмрдбрд╝ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред рдЯрдХрд░рд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдкрд╣рд▓реЗ MIPS рдирд┐рд░реНрджреЗрд╢ рдХреЛ i32 рдореЗрдВ i32 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ i16 рдХреЛ рдЯреНрд░реБрдиреЗрдЯ рдХрд░рддрд╛ рд╣реИ; рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬреЛ i16 рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди i32 'рд░реИрдк' рдореЗрдВ рдирд╣реАрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 65536.0 рдореЗрдВ рд╕рдордиреНрд╡рдп рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ 0.0 рд╕реЗ рдЯрдХрд░рд╛рд╡ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред

рд╡реИрд╕реЗ рднреА, рдирд┐рд╖реНрдХрд░реНрд╖:

  • "0x80000000 рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд░ рд╣реИ" рдХреЗрд╡рд▓ i32 рдФрд░ i64 рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • U32, u / i16, рдФрд░ u / i8 рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, "рдкрд░реАрдХреНрд╖рдг рдпрджрд┐ рдЯреНрд░рдВрдХрд┐рдЯ / рд╕рд╛рдЗрди-рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдореВрд▓ рд╕реЗ рдЕрд▓рдЧ рд╣реИ" рдПрдХ рд╕рдордХрдХреНрд╖ рд╣реИред (рдпрд╣ рджреЛрдиреЛрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдореВрд▓ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░, рдФрд░ 0x8000000000000000, рд╕рдВрдХреЗрддрдХ рдерд╛ рдХрд┐ рдлреНрд▓реЛрдЯ NaN рдерд╛ рдпрд╛ рдореВрд▓ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдерд╛ред)
  • рд▓реЗрдХрд┐рди рдПрдХ рд╢рд╛рдЦрд╛ рдХреА рд▓рд╛рдЧрдд рдФрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╢рд╛рдпрдж рдУрд╡рд░рдХрд┐рд▓ рд╣реИред рдпрд╣ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • @ActallyaDeviloper рдХреА minss / maxss рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд░реЛрдЪ рдЗрддрдиреА рдмреБрд░реА рдирд╣реАрдВ рд╣реИ! рдиреНрдпреВрдирддрдо рд░реВрдк,
minss %xmm2, %xmm1
maxss %xmm3, %xmm1
cvttss2si %rax, %xmm1

рдХреЗрд╡рд▓ рддреАрди рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ (рдЬрд┐рдирдореЗрдВ рд╕рднреНрдп рдХреЛрдб рдЖрдХрд╛рд░ рдФрд░ рдереНрд░реВрдкреБрдЯ / рд╡рд┐рд▓рдВрдмрддрд╛ рд╣реИ) рдФрд░ рдХреЛрдИ рд╢рд╛рдЦрд╛ рдирд╣реАрдВ рд╣реИред

рддрдерд╛рдкрд┐:

  • рд╢реБрджреНрдз-рдЬрдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ NaN рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 32-рдмрд┐рдЯ рдпрд╛ рдЙрд╕рд╕реЗ рдЫреЛрдЯреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕реЗ 64-рдмрд┐рдЯ cvttss2si рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдХреЗ, рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЗрдирдкреБрдЯ NaN рдирд╣реАрдВ рдерд╛, рддреЛ рдиреНрдпреВрдирддрдо / рдЕрдзрд┐рдХрддрдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдЯреНрд░рдВрдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИред рдпрджрд┐ рдЗрдирдкреБрдЯ NaN рдерд╛, рддреЛ рдкреВрд░реНрдгрд╛рдВрдХ 0x8000000000000000 рд╣реИ рдЬреЛ рдХрд┐ 0 рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рдореИрдВ 2147483647.0 рдФрд░ -2148473648.0 рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдореЛрд░реА рд╕реЗ рдПрдХ movред
  • F32 рдХреЗ рд▓рд┐рдП, 2147483647.0 рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реЛрддреА рд╣реИрдВред F64 рд╕реЗ u / i64 рдХреЗ рд▓рд┐рдП Ditto, рд▓реЗрдХрд┐рди f64 рд╕реЗ u / i32 рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ:

  • F32 / f64 рд╕реЗ u / i16 рдФрд░ u / i8 рдХреЗ рд▓рд┐рдП, рдФрд░ f64 рд╕реЗ u / i32 рдХреЗ рд▓рд┐рдП, рдорд┐рдирдЯ / рдЕрдзрд┐рдХрддрдо + рдЫрдВрдЯрдиреА рдХреЗ рд╕рд╛рде рдКрдкрд░, рдЬреИрд╕реЗ:
    let f = if f > 32767.0 { 32767.0 } else { f };
    let f = if f < -32768.0 { -32768.0 } else { f };
    cvttss2si(f) as i16

(U / i16 рдФрд░ u / i8 рдХреЗ рд▓рд┐рдП, рдореВрд▓ рд░реВрдкрд╛рдВрддрд░рдг i32 рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; f64 рд╕реЗ u / i32 рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ i64 рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред)

  • F32 / 64 рд╕реЗ u32 рдХреЗ рд▓рд┐рдП,
    let r = cvttss2si64(f) as u32;
    if f >= 4294967296.0 { 4294967295 } else { r }

рдХреЗрд╡рд▓ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдХреЛрдИ рд╢рд╛рдЦрд╛ рдирд╣реАрдВ рд╣реИ:

    cvttss2si   %xmm0, %rcx
    ucomiss .LCPI0_0(%rip), %xmm0
    movl    $-1, %eax
    cmovbl  %ecx, %eax
  • F32 / 64 рд╕реЗ i64 рдХреЗ рд▓рд┐рдП, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
    let r = cvttss2si64(f);
    if f >= 9223372036854775808. {
        9223372036854775807 
    } else if f != f {
        0
    } else {
        r
    }

рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ (рдЕрднреА рднреА рд╢рд╛рдЦрд╛ рд░рд╣рд┐рдд) рдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

    cvttss2si   %xmm0, %rax
    xorl    %ecx, %ecx
    ucomiss %xmm0, %xmm0
    cmovnpq %rax, %rcx
    ucomiss .LCPI0_0(%rip), %xmm0
    movabsq $9223372036854775807, %rax
    cmovbq  %rcx, %rax

... рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╣рдо рднреЛрд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рддреБрд▓рдирд╛ рдмрдЪрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ f рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, 0x8000000000000000 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИ (рдпрд╛рдиреА i64 :: MIN)ред

  • F32 рд╕реЗ i32 рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдЬреИрд╕рд╛ рд╣реА рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдпрд╛ рдмрд╕ рдкрд╣рд▓реЗ f64 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЫреЛрдЯреА рдорд┐рдирдЯ / рдЕрдзрд┐рдХрддрдо рдХрд░реЗрдВред

  • u64 рдПрдХ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ред : p

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдКрдкрд░ рд╣реИ: https://internals.rust-lang.org/t/help-us-benchmark-saturating-float-casts/6231

Https://internals.rust-lang.org/t/help-us-benchmark-saturating-float-casts/6231/14 рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЬреЗрдкреАрдИрдЬреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкрд░ рдПрдХ рдФрд╕рдд рджрд░реНрдЬреЗ рдХрд╛ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдордВрджреА рдХреА рд╕реВрдЪрдирд╛ рджреАред рдореИрдВрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЫреЛрдЯрд╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╣реЛ рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛ рдЬреЛ рдордВрджреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ: https://gist.github.com/rkruppe/4e7972a209f74654ebd872eb4cc57722 (рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрд░реЗ рд▓рд┐рдП рд╕рдВрддреГрдкреНрддрддрд╛ рдХреЗ рд╕рд╛рде ~ 15% рдордВрджреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдбрд╛рд▓реЗ)ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд╛рддрд┐рдпрд╛рдВ рд╕рдорд╛рди рдЕрдиреБрдкрд╛рдд рдореЗрдВ f32-> u8 ( rgb_to_ycbcr ) рдФрд░ f32-> i32 ( encode_rgb , "рдХреНрд╡рд╛рдВрдЯрд┐рдЬрд╝реЗрд╢рди" рд▓реВрдк) рд╣реИрдВред рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯреНрд╕ рд╕рднреА рд░реЗрдВрдЬ рдореЗрдВ рд╣реИрдВ, рдпрд╛рдиреА, рд╕рдВрддреГрдкреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдЧрд┐рд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди f32-> u8 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╣реБрдкрдж рдХреА рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рдФрд░ рдЧреЛрд▓ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрди рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдХреБрдЫ рдкреВрдЫрдирд╛ рд╣реИред I32 рдХреЗ рд▓рд┐рдП f32-> i32 рдХреА рд╕реАрдорд╛рдПрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ self.tables рдХреЗ рддрддреНрд╡ рдиреЙрдирдЬрд╝рд░реЛ рд╣реИрдВ, рдЬреЛ рдХрд┐ (рдЬрд╛рд╣рд┐рд░ рд╣реИ?) рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВред tl; dr: рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрддреГрдкреНрддрд┐ рдЬрд╛рдБрдЪреЗрдВ рд╣реИрдВ, рдПрдХрдорд╛рддреНрд░ рдЖрд╢рд╛ рдЙрдиреНрд╣реЗрдВ рдФрд░ рддреЗрдЬрд╝ рдХрд░ рд░рд╣реА рд╣реИред

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

@ Welcomex рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ f32-> u8 рдФрд░ f32-> i32 рдЬрд╛рддрд┐рдпреЛрдВ рдХреЛ CVTTSS2SI рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдорд╛рдореВрд▓реА рдЕрджреНрдпрддрди, rustc 1.28.0-nightly (952f344cd 2018-05-18) , -Zsaturating-float-casts рдзреНрд╡рдЬ рдЕрднреА рднреА https://github.com/rust-lang/rust/issues/10184#issuecomment -345479698 рдореЗрдВ рдХреЛрдб рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ ~ 20 x86_64 рдкрд░% рдзреАрдорд╛ред рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ LLVM 6 рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

| рдЭрдВрдбреЗ | рд╕рдордп |
| ------- | -------: |
| -рдЪреЛрдЯ-рд╕реНрддрд░ = 3 -рдХрд░реНрдЧреЗрдЯ-рд╕реАрдкреАрдпреВ = рджреЗрд╢реА | 325,699 ns / iter (+/- 7,607) |
| -рд╕реАрдЯ-рд▓реЗрд╡рд▓ = 3 -рдХрд░реНрдЧреЗрдЯ-рд╕реАрдкреАрдпреВ = рджреЗрд╢реА -рд╕рд░реНрдЬреЗрдЯрд┐рдВрдЧ-рдлреНрд▓реЛрдЯ-рдХрд╛рд╕реНрдЯ | 386,962 ns / iter (+/- 11,601)
(19% рдзреАрдореА) |
| -рдЪреЛрдЯ-рд╕реНрддрд░ = рей | 331,521 ns / iter (+/- 14,096) |
| -рдкрддреНрдерд░-рд╕реНрддрд░ = рей -рд╕реГрдЬрди-рдлреНрд▓реЛрдЯ-рдХрд╛рд╕реНрдЯ | 413,572 ns / iter (+/- 19,183)
(25% рдзреАрдореА) |

@kennytm рдХреНрдпрд╛ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ LLVM 6 рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛? рдХреНрдпрд╛ рд╡реЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡реГрджреНрдзрд┐ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рдн рд╣реЛрдЧрд╛? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЯрд┐рдХрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?

@insanitybit рдпрд╣ ... рдЕрднреА рднреА рдЦреБрд▓рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ ...?

image

рд╡реЗрд▓реНрдб, рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рдзрдиреНрдпрд╡рд╛рдж!

@rkruppe рд╣рдордиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдЗрдВрдЯ
(рдбреЙрдХреНрд╕ рдмрджрд▓рдХрд░)?

рдЬреБрд▓рд╛рдИ 20, 2018 4:31 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкрд░, "рдХреЙрд▓рд┐рди" рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╡реЗрд▓реНрдб, рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред

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

@ рдирдЧреАрд╕рд╛ рд╢рд╛рдпрдж рдЖрдк f32::from_bits(v: u32) -> f32 (рдФрд░ рдЗрд╕реА рддрд░рд╣ f64 ) рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ? рдпрд╣ NaNs рдХреЗ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╕рд┐рд░реНрдл transmute ред

рдпрд╣ рдореБрджреНрджрд╛ as рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХрд╛ рд╣реИ рдЬреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

@ рдирдЧреАрд╕рд╛ рдЖрдк рдлреНрд▓реЛрдЯ-> рдлреНрд▓реЛрдЯ рдХрд╛рд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, # 15536 тАЛтАЛрдФрд░ https://github.com/rust-lang-nursery/nomicon/pull/65 рджреЗрдЦреЗрдВред

рдЖрд╣, рд╣рд╛рдБ, рдЬреЛ рддреИрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрд░ рд░рд╣рд╛ рдерд╛ред

рд╢реБрдХреНрд░ рдкрд░, рдЬреБрд▓рд╛рдИ 20, 2018, 12:24 рд░реЙрдмрд┐рди рдХреНрд░реБрдкреЗ рд╕реВрдЪрдирд╛рдПрдБ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@nagisa https://github.com/nagisa рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдлреНрд▓реЛрдЯ-> рдлреНрд▓реЛрдЯ
рдЬрд╛рддрд┐, # 15536 https://github.com/rust-lang/rust/issues/15536 рдФрд░ рджреЗрдЦреЗрдВ
рдЬрдВрдЧ-lang-рдирд░реНрд╕рд░реА / nomicon # 65
https://github.com/rust-lang-nursery/nomicon/pull/65

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

LLVM 7 рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреЛрдВ рдореЗрдВ рдХреБрдЫ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ:

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

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрд╕рд░ рдкрдбрд╝рддрд╛ рд╣реИ?

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

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрд╕рд░ рдкрдбрд╝рддрд╛ рд╣реИ?

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

@rkruppe рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЧрд┐рд░ рдЧрдпрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://internals.rust-lang.org/t/help-us-benchmark-saturating-float-casts/6231/14 рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреАрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдорд╛рдореВрд▓реА рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рддрд┐рдЧрдорди рд╣рдореЗрд╢рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрдердХ рдЯреНрд░реЗрдбрдСрдл рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди рдХреЗ рдкрд╛рд░ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИ? рдпрд╛ рдЕрдиреНрдп рдЬреНрдЮрд╛рдд рдЕрд╡рд░реЛрдзрдХ рд╣реИрдВ?

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

рдЕрдкрдбреЗрдЯ @rkruppe рдХреЗ рд▓рд┐рдП рдареАрдХ рдард╛рдХ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдБ рдЕрдЧрд░ рд╡рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрдЪрд░рд╛ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ? рдореИрдВ рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ unsafe fn i32::unchecked_from_f32(...) рдФрд░ рдЬреИрд╕реЗ рдХреБрдЫ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдЖрдЬ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?

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

рдПрдХ unsafe рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдпреВрдмреА рдХреЛ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ (рдФрд░ as рд░реВрдк рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХреЛрдб рд╣реИ) рдЖрдЬ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХрдо рдЖрдХрд░реНрд╖рдХ рдПрдХ, рдореИрдВ ' d рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ рдпрджрд┐ рд╡рд╣ рдХрд╛рдо рдХрд░ рд╕рдХреЗред

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

     cvttsd2si %xmm0, %eax   # x86's cvttsd2si returns 0x80000000 on overflow and invalid cases
     cmp $1, %eax            # a compact way to test whether %eax is equal to 0x80000000
     jno ok
     ...  # slow path: check for and handle overflow and invalid cases
ok:

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬреЛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬреА рд╕реЗ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

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

рдХреНрдпрд╛ рдЕрдиреНрдп рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреА рд░рдгрдиреАрддрд┐ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░реЗрдВрдЧреЗ? рдХреНрдпрд╛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмреАрдЪ рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА cvttsd2si (рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ) рдХреЗ рд▓рд┐рдП рд╕рд╣рди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдЧреА рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдкреНрд░рдпреБрдХреНрдд рдФрд░ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд░реЛрдХреЗрдВ, LLVM рдХреЗрд╡рд▓ рдЗрдирд░реЗрд▓ рдФрд░ рдЗрдирд▓рд╛рдЗрди asm рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ред рдпрд╣ рдЖрдЦрд┐рд░реА рдмрд┐рдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдб рдЕрдиреБрдХреНрд░рдо @sunfishcode рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди asm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрддреГрдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ: рд╕рдВрддреГрдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдЪреЗрдХ рдЖрдЬ рдХрднреА-рдХрднреА рд╣рдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдирд┐рд░рд░реНрдердХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдирд▓рд╛рдЗрди рдЗрди рдмреНрд▓реЙрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рд╢рд╛рдЦрд╛рдПрдБ ' рдЯреА рд╕рд░рд▓реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдХреНрдпрд╛ рдЕрдиреНрдп рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреА рд░рдгрдиреАрддрд┐ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░реЗрдВрдЧреЗ? рдХреНрдпрд╛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмреАрдЪ рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ?

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

рдореИрдВрдиреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЗрдВрдЯ рдХрд╛рд╕реНрдЯ рдХреЛ рдлреНрд▓реЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреНрд░реЗрдВрд╕рд┐рдХреНрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ: https://reviews.llvm.org/D54749

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

рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо 255 , рдЬреЛ рдореБрдЭреЗ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ:

println!("{}", 1.04E+17 as u8);

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

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

@ AaronM04 рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрдЬ reddit рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

fn main() {
    let a = 360.0f32;
    println!("{}", a as u8);

    let a = 360.0f32 as u8;
    println!("{}", a);

    println!("{}", 360.0f32 as u8);
}

( рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рджреЗрдЦреЗрдВ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА @ AaronM04 рдХреЗ рд▓рд┐рдП рдереА, рдЙрдирдХреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред

"рдУрд╣, рдпрд╣ рддреЛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред"

  • @ рдкреАрд╕реАрд╡рд▓реНрдЯрди , реирежрезрек

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

рддреЛ, рдХреГрдкрдпрд╛, рдХрд┐рд╕реА рдХреЛ рднреА, рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рддрд╛ рд╣реИ?

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢реБрд░реВ рд╕реЗ рд╣реА рдХрдард┐рди рдерд╛ рдФрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЬрд░реВрд░рдд рд╣реИред

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

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдпрд╣ рдзрд╛рд░рдгрд╛ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рд╣реИред

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

рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдЬрд╛рдирд╛ рдлреНрд▓реЛрдЯ рдХреЛ рдЗрдВрдЯ рдХрд╛рд╕реНрдЯ рдореЗрдВ unsafe рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ Result рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдмрдВрдзреЗ рд╣реБрдП рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдирдХ рд╕рд╣рд╛рдпрдХ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

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

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

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

рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

https://reviews.llvm.org/D54749

@ рдореИрдХреЗрдирд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐

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

https://github.com/rust-lang/rust/blob/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/librustc_code_ssa/mir/rvalue.rs#L774 -L901

рд╣рдо рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрддреГрдкреНрддрд┐ рдХреЗ рд▓рд┐рдП LLVM IR рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдУрдкрди-рдХреЛрдбреЗрдб IR рд╣реЛ рдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ llvm.fpto[su]i.sat рд╣реЛ) -Z рдзреНрд╡рдЬ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ред рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

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

рдЗрд╕реА рд╕рдордп, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рднреА рдмрджрддрд░ рд╣реИред рдпрджрд┐ рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА API рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрддреГрдкреНрддрд┐ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ unsafe рдЖрдВрддрд░рд┐рдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ NaN рдФрд░ рдЖрдЙрдЯ-рдСрдл-рд░реЗрдВрдЬ рдирдВрдмрд░ (рдФрд░ рдирд┐рдореНрди) рдкрд░ UB рд╣реИ рдПрдХ рд╕рд╛рджрд╛ fpto[su]i )ред рдпрд╣ рдЕрднреА рднреА рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рд╡рд┐рдХрд▓реНрдк рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдзреНрд╡рдирд┐ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рдФрд░ рдирдП рдПрдкреАрдЖрдИ рд╕рдВрднрд╡рддрдГ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдмрдиреЗрдВрдЧреЗред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдзреНрд╡рдирд┐ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЧреЗрдЯ-рдЧреЛ рдХреА рдмрдЬрд╛рдп рдЕрдиреБрд░реЛрдз рдкрд░ рдЖрдВрддрд░рд┐рдХ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рдХреЙрдиреНрд╕реНрдЯрд▓ рдЗрд╡реИрд▓реНрдпреВрд╢рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рд╕рдВрддреГрдкреНрддрд┐ рдХрд░реЗрдЧрд╛? (cc @RalfJung @eddyb @ oli-obk)

рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрддреГрдкреНрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд╕реНрдЯ eval рдФрд░ рдЙрдореНрд░ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рднреА miri (рдореИрдВ рдЗрд╕реЗ рдкреБрд░рд╛рдиреЗ llvm::Constant -рдЖрдзрд╛рд░рд┐рдд рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ рдмрджрд▓рддреЗ рд╣реБрдП рдпрд╛рдж рд░рдЦрдирд╛)ред

@rkruppe рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЪреВрдВрдХрд┐ рдЖрдк рдкреНрд░рд╢реНрди рдореЗрдВ рдХреЛрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдбрд┐рдлреЙрд▓реНрдЯрд░реЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

@rkruppe

рд╣рдо рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрддреГрдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ

рд╕реНрд░реЛрдд рдФрд░ рдЧрдВрддрд╡реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдпрд╣ 10 рдпрд╛ 12 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдВрддрд░рд┐рдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

@Centril

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ "рдЖрдВрддрд░рд┐рдХ" рдХрд╛ рдорддрд▓рдм рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ as рд╕рдВрддреГрдкреНрддрд┐ рд╣реЛрдиреЗ рдкрд░ рдХрдо рдкреНрд░реАрдлрд╝реНрд░реЗрд╢рди рдкреНрд░рддрд┐рдЧрдорди рд╣реЛрдЧрд╛ред

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

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

рд╕реНрд░реЛрдд рдФрд░ рдЧрдВрддрд╡реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдпрд╣ 10 рдпрд╛ 12 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдВрддрд░рд┐рдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдареАрдХ рд╣реИ, рддреБрдо рдореБрдЭреЗ рдорд┐рд▓ рдЧрдП, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ? рдЗрд╕реЗ 30 рдЖрдВрддрд░рд┐рдХ рд╣реЛрдиреЗ рджреЗрдВ, рдЗрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рддреБрдЪреНрдЫ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрди рдкрддрд▓реА рдЖрд╡рд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдПрдХрд▓ рд╕рд╛рдорд╛рдиреНрдп рдЖрдВрддрд░рд┐рдХ рдХреЛ рд░рдЦрдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рд╣рдо " as рдзреНрд╡рдирд┐ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ unsafe рдХрд╛рд╕реНрдЯ API" рд╡рд┐рдХрд▓реНрдк рдЪреБрдирддреЗ рд╣реИрдВ рддреЛ рднреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИред

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

+1

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

рд╣рдо -Zsaturating-float-casts рдЖрд╕рдкрд╛рд╕ (рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ) рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд░рд╛рддреНрд░рд┐рдХрд╛рд▓реАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдХреИрди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИред

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

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

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ freeze рдЗрддрдирд╛ рдирдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ LLVM рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдлрд┐рд░ рднреА, рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреА рдЦреЛрдЬ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рд╢рд╛рдпрдж 2020 рдХреА рдкрд╣рд▓реА рдЫрдорд╛рд╣реА рдХреЗ рджреМрд░рд╛рди?

рдЯреА-рдХрдВрдкрд╛рдЗрд▓рд░ рдмреИрдардХ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдирд╛рдорд╛рдВрдХрд┐рдд рдХрд░рдирд╛, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдорд╛рд░реЗ рдЗрдЪреНрдЫрд┐рдд рдкрде рдкрд░ рдЖрдо рд╕рд╣рдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ред

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

рдФрд░ рд╡реИрд╕реЗ рднреА, рдмреЗрддрд░рддреАрдм рдХрдЪрд░рд╛ рд▓реМрдЯрд╛рдирд╛ рднреА as рдХрд╛рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ unchecked_add рд╕рдорд╛рди рдЖрд╡рд╢реНрдпрдХ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рддреЗрдЬ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд╕реНрдЯ рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХрд╛рдлреА рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИред

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

@pnkfelix

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

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

рджреВрд╕рд░рд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ "рдмрд╕ рдпреВрдмреА рдирд╣реАрдВ" рд╣реИ, рдЬрдмрдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ freeze(fptosi %x) рдмреЗрд╣рдж рдкреНрд░рддрд┐-рд╕рд╣рдЬрддрд╛ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реИ рдФрд░ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдореЗрдореЛрд░реА рд╕реЗ @RalfJung рдиреЗ рдХрд╣рд╛ рдХрд┐) рдХреЛ рд╣рд░ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЕрдм рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмреИрдардХ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╕рдВрддреГрдкреНрддрд┐ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд (рдпрд╛ рддреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдпрд╛ freeze -рдЙрдкрдпреЛрдЧреА) рд░реВрдкрд╛рдВрддрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдкред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ as рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ UB рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ unsafe рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдЪрд░рд╛ рд▓реМрдЯрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╣рдореЗрдВ рд╕рдВрддреГрдкреНрдд рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рдЬреНрдЮрд╛рдд рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╢рдорди / рд╕рдВрдХреНрд░рдордг / рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЙрд╕ рдмрджрд▓рд╛рд╡ рдкрд░ рдЗрд╕ рдбреНрд░рд╛рдлреНрдЯ RFC рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрддреГрдкреНрдд рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрд╛ред

@SimonSapin

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

рдорд╛рдирд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк as рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдЧреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ: D:

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

рддреЛ рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдпрд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдлреНрд▓реЛрдЯ-рдЯреВ-рдЗрдВрдЯ as рд╕рдВрддреГрдкреНрдд рд╣реЛ? рдЬрдм рддрдХ рд╣рдо рдЬрд┐рд╕ рд▓рдХреНрд╖реНрдп рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдХреНрд░рдордг рдпреЛрдЬрдирд╛ рд╕реЗ рдЦреБрд╢ рд╣реВрдВред

рд╡рд╣ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

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

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

рдЗрд╕ рдмреАрдЪ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЬреЛ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЧрд▓рддрдлрд╣рдореА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреИрд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рди рд╣рд╛рдирд┐ рд╣реЛ рд░рд╣реА рд╣реИред рд╣рдореЗрдВ рдХрд┐рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП? рд╣рдо рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдРрд╕реА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреА рдЬрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП RFC 1122 рдкреВрд░реНрдгрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред

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

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

рдареАрдХ рд╣реИ, рддреБрдо рдореБрдЭреЗ рдорд┐рд▓ рдЧрдП, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ? рдЗрд╕реЗ 30 рдЖрдВрддрд░рд┐рдХ рд╣реЛрдиреЗ рджреЗрдВ, рдЗрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рддреБрдЪреНрдЫ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрди рдкрддрд▓реА рдЖрд╡рд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдПрдХрд▓ рд╕рд╛рдорд╛рдиреНрдп рдЖрдВрддрд░рд┐рдХ рдХреЛ рд░рдЦрдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рд╣рдо " as рдзреНрд╡рдирд┐ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ unsafe рдХрд╛рд╕реНрдЯ API" рд╡рд┐рдХрд▓реНрдк рдЪреБрдирддреЗ рд╣реИрдВ рддреЛ рднреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИред

рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХрд▓ рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдВрдЯреНрд░реЗрдВрд╕рд┐рдХ рдХреЛ рдЙрди 12/30 рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЛрдиреЛрдореЛрд░реНрдлрд┐рдХ рдЗрдВрд╕реНрдЯреЗрдВрдЯрд┐рдПрд╢рди рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?

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

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

рд╣рдо -Zsaturating-float-casts рдЖрд╕рдкрд╛рд╕ (рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ) рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд░рд╛рддреНрд░рд┐рдХрд╛рд▓реАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдХреИрди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддрд╛ рд╣реИред

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

@Centril

рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХрд▓ рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдВрдЯреНрд░реЗрдВрд╕рд┐рдХ рдХреЛ рдЙрди 12/30 рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЛрдиреЛрдореЛрд░реНрдлрд┐рдХ рдЗрдВрд╕реНрдЯреЗрдВрдЯрд┐рдПрд╢рди рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?

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

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

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рдЙрдирдХреА рдЬрд░реВрд░рдд рдХреЗ рдореМрдХреЗ рдкрд░ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдмрдВрдз рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдореМрдЬреВрджрд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдирдВрдмрд░реЛрдВ рд╕реЗ рдареАрдХ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдХреНрдд рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдХреНрд░рд┐рдп рдЗрдЪреНрдЫрд╛ рд╣реИред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░реВрдВрдЧрд╛:

  1. рдЗрд╕рдХреЗ рд╕рд╛рде-рд╕рд╛рде:

    • #[unstable(...)] рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд╛рдд рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЧрдП рдЖрдВрддрд░рд┐рдХрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВред

    • рдирд┐рдХрд╛рд▓реЗрдВ -Zsaturating-float-casts рдФрд░ рдкрд░рд┐рдЪрдп -Zunsaturating-float-casts ред

    • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ -Zsaturating-float-casts рдХреНрдпрд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред

  2. рд╣рдо рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдЖрдВрддрд░рд┐рдХрддрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ; рд╣рдо рддреЗрдЬреА рд╕реЗ рдереЛрдбрд╝рд╛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  3. рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж -Zunsaturating-float-casts рдирд┐рдХрд╛рд▓реЗрдВред

рдмрдврд╝рд┐рдпрд╛ рд╣реИред рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреБрдЫ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИрдВ, рд╢рд╛рдпрдж f32 рдФрд░ f64 рддрд░реАрдХреЛрдВ рдкрд░ред рд╡реЗ рдпрд╛ рддреЛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдЬреЗрдиреЗрд░рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рддрд░реАрдХреЗ (рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде), рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдореЗрдВ
  • рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рд╣рд┐рдд рддрд░реАрдХреЗ ( str::parse рдФрд░ FromStr )
  • рдирд╛рдо рдореЗрдВ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрдИ рдЧреИрд░-рдЬреЗрдиреЗрд░рд┐рдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХреЗ

рд╣рд╛рдБ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рддрд░реАрдХреЛрдВ рдпрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ред

рдирд╛рдо рдореЗрдВ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрдИ рдЧреИрд░-рдЬреЗрдиреЗрд░рд┐рдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХреЗ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдХреЛрдИ рдЖрдкрддреНрддрд┐?

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо (рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛) рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ "рдПрдХ рддрд░рд╣ рдХрд╛" рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ Vec::as_slice рдФрд░ [T]::to_vec ) , рдпрд╛ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╣рд╛рдВ рдЕрдВрддрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ to_ne_bytes , to_be_bytes , to_le_bytes )ред рд▓реЗрдХрд┐рди std::convert рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ u8::to_u16 , u8::to_u32 , u8::to_u64 , рдЖрджрд┐ рдЬреИрд╕реЗ рджрд░реНрдЬрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред

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

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

рдПрдХ рд▓рдВрдмреЗ рдзрд╛рдЧреЗ рдкрд░ рддреМрд▓рдирд╛ рдирд╣реАрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХреБрд▓ рдЕрдЬреНрдЮрд╛рдирддрд╛ рдореЗрдВ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ рдпрд╛ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреИрд╕реЗ f32::to_integer_unsaturated рдЬреЛ u32 рдпрд╛ рдХреБрдЫ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ? рдХреНрдпрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реИ?

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

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

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ 128 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдФрд░ 64 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рд╛рдорд╛рдиреНрдп 32 рдмрд┐рдЯ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рдХреНрдпреЛрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг рдкрд░ рдЪрд░реНрдЪрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ NaN рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рдмрджрд▓рдирд╛ рдЙрдЪрд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд▓рдЧрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдХреЛрдИ рдкреВрд░реНрдгрд╛рдВрдХ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП NaN рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╣реА рд░реВрдкрд╛рдВрддрд░рдг рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, 1000000.0 рдХреЛ 65535 (u16) рдореЗрдВ рдмрджрд▓рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред рдмрд╕ рдХреЛрдИ рдпреВ 16 рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдореИрдВ рдЗрд╕реЗ резрем реп ремреж рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдорд╛рдирддрд╛, рдЬреЛ рдХрд┐ рдХрдо рд╕реЗ рдХрдо C / C ++, C #, рдЧреЛ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╣рдж рддрдХ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реИред

рд╡рд┐рднрд┐рдиреНрди рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИ, рдФрд░ рдореИрдВ рдЙрдирд╕реЗ рд╕рд╣рдордд рд╣реВрдБред рдпрд╣ рд╢реВрдиреНрдп рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╕рдорд╛рди рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдорд╛рдиреНрдп рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдЕрдВрдХрдЧрдгрд┐рдд рдХреА рддрд░рд╣ рд╣реА рдШрдмрд░рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред NaN -> 0 рдФрд░ 1000000.0 -> 65535 (рдпрд╛ 16960) рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдпрд╛ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ n / 0 == рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред (рд░рд┐рд▓реАрдЬрд╝ рдмрд┐рд▓реНрдб рдореЗрдВ, рдЬрдВрдЧ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред) рдФрд░ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рдЖрдк NaN рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП _want_ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдВрддреГрдкреНрддрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдЖрдкрдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдореЗрдВ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ред

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

@admilazz рд╣рдо LLVM рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ LLVM рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП

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

рдЗрд╕реА рддрд░рд╣, 1000000.0 рдХреЛ 65535 (u16) рдореЗрдВ рдмрджрд▓рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред рдмрд╕ рдХреЛрдИ рдпреВ 16 рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдореИрдВ рдЗрд╕реЗ резрем реп ремреж рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рджреЗрдЦрддрд╛,

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ: 16960 1000000.0 рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдлрд┐рд░ 16 рдирд┐рдЪрд▓реЗ рдмрд┐рдЯреНрд╕ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рдВрдХрдЯрд┐рдВрдЧред

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

fn main() {
    dbg!(1000000.0 as u16);
}

рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди ред рдЙрджрд╛рд╣рд░рдг рдЖрдЙрдЯрдкреБрдЯ:

[src/main.rs:2] 1000000.0 as u16 = 49072

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

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

рдпрд╛ "wraparound" рдЕрд░реНрде рд╡рд┐рдЬреНрдЮрд╛рди "рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЧрдгрд┐рддреАрдп рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ, рддреЛ рд▓рдХреНрд╖реНрдп рдЪреМрдбрд╝рд╛рдИ рдХреЛ рдХрд╛рдЯрдирд╛" рдЗрд╕ рд╕реВрддреНрд░ (https://github.com/rust-lang/rust/issues/10184#issuecomment-299229143) рдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ:

  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрддреГрдкреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рд╕рдордЭрджрд╛рд░ рд╣реИред рд╕рдВрддреГрдкреНрддрд┐ рдЖрдорддреМрд░ рдкрд░ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдордЭрджрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди:

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

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

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

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

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

https://github.com/rust-lang/rust/pull/66841 рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ fptoui рдФрд░ fptosi рд╕рд╛рде unsafe fn рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕реАрдорд╛ рдореЗрдВ рд╣реЛрдирд╛ рдФрд░ рд╕рдВрддреГрдкреНрдд рд╣реЛрдирд╛ рдПрдХ рдФрд╕рдд рджрд░реНрдЬреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рддрд┐рдЧрдорди рд╣реИред

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

рдЙрд╕ рднреВрдорд┐ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ as рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдареАрдХ рд╣реИ (рдФрд░ рд╢рд╛рдпрдж рдПрдХ рдФрд░ -Z рдлреНрд▓реИрдЧ рдХреЛ рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд▓реИрдВрдЧ рдЯреАрдо рдирд┐рд░реНрдгрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ (рднрд╛рд╖рд╛ рдЯреАрдо, рдХрдо рд╕реЗ рдХрдо рд╡рд╣рд╛рдВ рдореМрдЬреВрдж рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде) https://github.com/rust-lang/lang-team/blob/master/minutes/2019-11-21.md рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдФрд░ рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдирдП рдЖрдВрддрд░рд┐рдХ рдЬреЛрдбрд╝ + -Zunsaturated-float-casts рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдЙрд╕ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдЗрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╕рдВрднрд╡рддрдГ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ FCP рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдирдП рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдЖрдкрдХрд╛ рдорддрд▓рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕реЗ https://github.com/rust-lang/rust/pull/66841

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ -Z unsaturated-float-casts рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? "рддреНрд░реБрдЯрд┐: рдЕрдЬреНрдЮрд╛рдд рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк" рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдиреЛ-рдСрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдИ рдЖрдВрддрд░рд┐рдХрддрд╛ рд╕реЗ рдЖрдкрдХрд╛ рдорддрд▓рдм # 66841 рд╕реЗ рдХреБрдЫ рд╣реИ

рд╣рд╛рдВ thanks - рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ -Z unsaturated-float-casts рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? "рддреНрд░реБрдЯрд┐: рдЕрдЬреНрдЮрд╛рдд рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк" рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдиреЛ-рдСрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ?

рд╣рд╛рдБ рдореВрд▓ рд░реВрдк рд╕реЗред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо -Z saturated-float-casts -Z unsaturated-float-casts рдкрдХреНрд╖ рдореЗрдВ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реАрдзреЗ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо PRs рдкрд░ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

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

unchecked рдПрдкреАрдЖрдИ рдирд╛рдореЛрдВ рдореЗрдВ рдХреБрдЫ рдорд┐рд╕рд╛рд▓ рдХреЗ рд╕рд╛рде рд╢рдмреНрдж рд╣реИред

@admilazz рд╣рдо LLVM рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ LLVM рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП

рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдЖрдк рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдЪреЗрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

рдПрдПрдлрдПрдЖрдИрдХреЗ рдХреЗрд╡рд▓ рд░реИрдкрд░рд╛рдЙрдВрдб рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдореНрдпреВрд▓реЗрд╢рди рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рд╣реИ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЧрд▓рдд рдпрд╛ рд╕рдВрддреГрдкреНрддрд┐ рдкрд╕рдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдЧрд▓рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд░реИрдкрдкрд░рд╛рдЙрдВрдб рдХреЛ рдЬрдВрдЧ рдХреЗ рд╕рдорд╛рди рдХрдИ рднрд╛рд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рд▓рд╛рдн рд╣реИ: C / C ++, C #, go, рд╕рдВрднрд╡рддрдГ D, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рдЕрдзрд┐рдХ, рдФрд░ рднреА рдЬрдВрдЧ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ (рдХрдо рд╕реЗ рдХрдо рдХрднреА-рдХрднреА) рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗред рдореИрдВрдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЕрдорд╛рдиреНрдп рд░реВрдкрд╛рдВрддрд░рдг (рд╕рдВрднрд╡рддрдГ рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рдореЗрдВ рдХреЗрд╡рд▓) рдкрд░ рдШрдмрд░рд╛рд╣рдЯ" рдЖрджрд░реНрд╢ рд╣реИ, рдЬреИрд╕реЗ рд╣рдо рдкреВрд░реНрдгрд╛рдВрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдЕрдорд╛рдиреНрдп рдЕрдВрдХрдЧрдгрд┐рдд рдЬреИрд╕реЗ рд╡рд┐рднрд╛рдЬрди рд╢реВрдиреНрдп рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

(рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЦреЗрд▓ рдХреЗ

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо NaN рдкрд░ рдЖрддрдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛ рддреЛ рдпрд╣ рдЕрдирдВрдд рдкрд░ рднреА рдЖрддрдВрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рд░реИрдкрд░рд╛рдЙрдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ рдХрдард┐рди рдмрдирд╛ рджреЗрдЧрд╛

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

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

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

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ 16960 рдорд┐рд▓реЗред

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

рд░реИрдкрд░рд╛рдЙрдВрдб рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдЬрдВрдЧ рдХреЗ рд╕рдорд╛рди рдХрдИ рднрд╛рд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИ: рд╕реА / рд╕реА ++, рд╕реА #, рдЧреЛ, рд╕рдВрднрд╡рддрдГ рдбреА, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ,

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

C11 рдорд╛рдирдХ https://port70.net/~nsz/c/c11/n1570.html#6.3.1.4

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

рдЬрдм рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рдХреЛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╢реЗрд╖ рд╕рдВрдЪрд╛рд▓рди рддрдм рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд╕реНрдерд╛рдпреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреЛрд░реНрдЯреЗрдмрд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреА рд╕реАрдорд╛ рд╣реИ (-1, рдпреВрдЯрд╛рдЗрдк_рдореИрдХреНрд╕ + 1)ред

C ++ 17 рдорд╛рдирдХ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf#section.7.10

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

C # рд╕рдВрджрд░реНрдн https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/numeric-conversions

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

рддреЛ рдпрд╣ рдпреВрдмреА рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд░реНрдл рдПрдХ "рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореВрд▓реНрдп" рд╣реИред

@admilazz рдЗрд╕ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХреЗ рдмреАрдЪ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ: рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ ред рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХрд╛рд╕реНрдЯ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИрдВ ред

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

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

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

@admilazz рдЗрд╕ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХреЗ рдмреАрдЪ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ: рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХрд╛рд╕реНрдЯ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИрдВред

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

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

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

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ? рдХрдо рд╕реЗ рдХрдо C рдФрд░ C ++ рдореЗрдВ рдирд╣реАрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ Rust рдХреЗ рд╕рдорд╛рди рд╣реА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ ... рдХреНрдпрд╛ рдЖрдк C # рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдФрд░ рдЬрд╛рддреЗ рд╣реИрдВ?

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

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

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

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

рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдЙрд╕ рдЖрдзрд╛рд░ рдкрд░ рд╕рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдЬреИрд╕реЗ рд╣реИрдВред

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

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

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

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡реЗ "рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп" рдпрд╛ "рд╕рдорд╛рди 'рдлреНрд░реАрдЬрд╝' рдирд┐рд░реНрджреЗрд╢" рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд░рдЦрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдпрд╣ рдиреЛ-рдСрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рдлреНрд░реАрдЬ рдСрдкрд░реЗрд╢рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ?

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

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

рдореИрдВ рд╡рд╣рд╛рдВ рдЖрдкрд╕реЗ рдЕрд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред :-) рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ LLVM "рдлреНрд░реАрдЬ" рдирд┐рд░реНрджреЗрд╢ рдЗрд╕ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реВрдиреНрдп-рд▓рд╛рдЧрдд рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

IMO рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рднрд╛рд╖рд╛ рдХрд╛ рдмреБрд░рд╛ рдбрд┐рдЬрд╛рдЗрди рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдо рдЯрд╛рд▓реЗрдВрдЧреЗред

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

рдореИрдВрдиреЗ рд╡рд╣ рдбреНрд░рд╛рдлреНрдЯ рдЦрддреНрдо рдХрд░ рджрд┐рдпрд╛! https://internals.rust-lang.org/t/pre-rfc-add-explicitly-named-numeric-conversion-apis/11395

рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдХреЗ рдмрдЬрд╛рдп рдЖрдВрддрд░рд┐рдХ рд╕реВрддреНрд░ рдореЗрдВ рджреЗрдВред

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

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

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

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

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

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

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

рдпреВрдмреА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо freeze рдЕрд░реНрдерд╛рд░реНрдереА _now_ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рд░ рд╕рдордп рдЗрд╕ рдмрд╛рдд рдкрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрд╛рдж рд╕реЗ рдЬреЛ рд╣рдо рдЪреБрдирддреЗ рд╣реИрдВ, рд╡рд╣ freeze рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред

  1. рдкреИрдВрдЯрд┐рдВрдЧ рдардВрдб рдХреЗ рд╕рд╛рде рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдЙрди рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рдирдореЗрдВ рдкреИрдирд┐рдХрд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпреВрдмреА рд╕реЗ рдкреИрдирд┐рдВрдЧ рдореЗрдВ рдЬрд╛рдирд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╕рдВрдЧрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рдХрд┐ as рдЖрддрдВрдХ рди рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░рдг рд╣реИрдВред
  2. рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛ ,
    > рд╣рдо рдЗрд╕ рд╕рдордп рдХрдИ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рдПрд▓рдПрд▓рд╡реАрдПрдо 6 рдкрд░ рд╡рд╛рдкрд╕) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЙрди рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреВрдмреА рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрдордмреИрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореИрдВ @RalfJung рд╕реЗ рд╕рд╣рдордд as рдХрд╛рд╕реНрдЯреНрд╕ рдХреА рдкреИрдиреНрдЪрд┐рдВрдЧ рдЕрддреНрдпрдзрд┐рдХ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ @admilazz рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ:

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

F32-> u16 рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рд╕реЗ u16 рд╢реНрд░реЗрдгреА рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдзрд╛рд░рдг рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдЧреЛрд▓рд╛рдИ рдХреА рддреНрд░реБрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди f32 рд╕реЗ 32 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред i32::MAX f32 рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдирд┐рдХрдЯрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рд╕рдВрдЦреНрдпрд╛ i32::MAX рд╕реЗ 47 рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЧрдгрдирд╛ рд╣реИ рдЬреЛ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ i32::MAX рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ рдХреЛрдИ рднреА рддреНрд░реБрдЯрд┐> = 1 ULP рд╢реВрдиреНрдп рд╕реЗ рджреВрд░ рдЖрдкрдХреЛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджреЗрдЧрд╛ред рдФрд░ рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдХрдо рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдлреНрд▓реЛрдЯ (IEEE 754 рдмрд╛рдЗрдирд░реА 16, рдпрд╛ рдЧреИрд░-рдорд╛рдирдХ bfloat16) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЧреБрдгрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЬрд╛рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ

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

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

рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдЕрд╕рдВрдЧрддрддрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╢рд┐рдлреНрдЯ, рдорд╛рд╕реНрдХ рдФрд░ рдХрд╛рд╕реНрдЯ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЛ рдХрд╛рдЯ-рдЫрд╛рдБрдЯ рдХрд░ рдХрд╛рдЯрдирд╛ - рдмрд┐рдЯреНрд╕ рдПрдВрдб рдкреНрд▓рд╕ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХрд╛рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИред рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореИрдВ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХрдИ рдмрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ 30+ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдореИрдВ рдХрднреА рднреА NaN, Infinity, рдпрд╛ рдПрдХ рдЖрдЙрдЯ-рдСрдл-рдж-рд░реЗрдВрдЬ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдорд╛рди рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред (рдЗрд╕рдХрд╛ рд╣рд░ рдЙрджрд╛рд╣рд░рдг рдореИрдВ рдпрд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЧрдгрдирд╛ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдЬреЛ рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред) рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдорд╛рдорд▓реЗ -> рдкреВрд░реНрдгрд╛рдВрдХ рдЬрд╛рддрд┐рдпрд╛рдВ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ -> рдкреВрд░реНрдгрд╛рдВрдХ рдЬрд╛рддрд┐рдпреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рди рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдирд┐рд░реНрдгрдп рдкрд╣рд▓реЗ рд╣реА рдкрддреНрдерд░ рдореЗрдВ рд╕реЗрдЯ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред

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

рдЦреИрд░, рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ:

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

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

    • рдпрджрд┐ as рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдорд╛ рд╣реЛрдЧрд╛ (рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╕рдВрддреГрдкреНрдд рд╣реЛрддрд╛ рд╣реИ), рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рдЬреИрд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ - рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ - рдЬреЛ рдлреНрд░реАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред

  1. рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрдХрд▓рди рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдЬреЛ рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ -Zsaturating-float-casts рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рд╕рдорд╛рди рд╣реИред)

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

F32-> u16 рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рд╕реЗ u16 рд╢реНрд░реЗрдгреА рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдзрд╛рд░рдг рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдЧреЛрд▓рд╛рдИ рдХреА рддреНрд░реБрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди f32 рд╕реЗ 32 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред i32 :: MAX f32 рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдирд┐рдХрдЯрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕рдВрдЦреНрдпрд╛ i32 :: MAX рд╕реЗ 47 рджреВрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЧрдгрдирд╛ рд╣реИ рдЬреЛ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ i32 :: MAX рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐> = 1 рд╢реВрдиреНрдп рд╕реЗ рджреВрд░ ULP рдЖрдкрдХреЛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджреЗрдЧрд╛ред

рдпрд╣ рдереЛрдбрд╝рд╛ рдСрдл-рдЯреЙрдкрд┐рдХ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдХрд╛рд▓реНрдкрдирд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИ рдЬреЛ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ 2 ^ 31-1 рддрдХ f32s рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рдд: рдЧреЛрд▓ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдЫреЛрдбрд╝рдХрд░ _ 2_ 31 рдпрд╛ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред

  1. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдХрдЯрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп i32 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ i32 :: MAX рд╕реЗ рдиреАрдЪреЗ 127 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕рд╣реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рднреА рдХреЛрдИ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирд╣реАрдВ рд╣реИ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬреЛ рдЖрдк 2 ^ 31-1 рддрдХ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХрд╛рдиреВрдиреА ) рдорд╛рди 2 ^ 31-128 рддрдХред рд╢рд╛рдпрдж рд╡рд╣ рдмрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ 2 ^ 31-1 рд╕реЗ рдорд╛рдкреА рдЧрдИ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╕реАрдорд╛рдУрдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рдХрдЯрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рд╕рдВрдЦреНрдпрд╛ (рдЧреЛрд▓рд╛рдИ рдкрд░ рд╡рд┐рдЪрд╛рд░) рд╕реЗ 64 рд╕реЗ рджреВрд░ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рдЬрдм рдЖрдк 2 ^ 32 рдХреЗ рдкрд╛рд╕ рд╣реЛрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдкреНрд░рддрд┐рд╢рдд-рд╡рд╛рд░ рдирд╣реАрдВ рд╣реИред
  2. рдЖрдкрдХреЛ рдЙрди рдорд╛рдиреЛрдВ рдХреЗ рднреЗрджрднрд╛рд╡ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ 1 рдЕрд▓рдЧ рд╣реИрдВ (рдпрд╛рдиреА 2 ^ 31-1 рд▓реЗрдХрд┐рди 2 ^ 31) рдЬрдм рдирд┐рдХрдЯрддрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рдорд╛рди 128 рдЕрд▓рдЧ рди рд╣реЛрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, i32s рдХрд╛ рдХреЗрд╡рд▓ 3.5% f32 (рдФрд░ <2% рдХрд╛ u32s) рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рд╣реИред рдЖрдк f32 рдХреЗ рд╕рд╛рде рдЙрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рд░рдЦрддреЗ рд╣реБрдП рднреА рдЙрд╕ рддрд░рд╣ рдХреА рд╕реАрдорд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рднреА рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реЗ рдмрдВрдзреЗ рд╣реЛрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ i32 рдХреЛ f32 рдФрд░ рдкреАрдЫреЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ i32 :: MAX-64 рд╕реЗ рдКрдкрд░ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдиреАрдЪрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗред рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд┐рд╕реА рднреА i32 -> f32 -> i32 рдЧрдгрдирд╛ рдЬреЛ рдкреВрд░реНрдг i32 рд╢реНрд░реЗрдгреА рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреА рд╣реИ, рдкреВрд░реНрдгрд╛рдВрдХ рдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ рддреЛ рдПрдл 64ред

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

рдкреАрдПрд╕ рдиреЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдпрд╛ред

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

рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ -Zsaturated-float-casts рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣рд╛ рдерд╛ -Zsaturated-float-castsред рднрд▓реЗ рд╣реА рд╕рдВрддреГрдкреНрддрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди -sunsaturated-float-cast рдЬреИрд╕реЗ рдЭрдВрдбреЗ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рднреА рдЕрд╕реНрдерд╛рдпреА рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ, рддреЛ рдареАрдХ рд╣реИ, рдХрднреА рднреА рдорди рдирд╣реАрдВред :-)

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

рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ -Zunsaturated-float-casts рдХреЗрд╡рд▓ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд░рд╣реЗрдВрдЧреЗ, рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ -Z рд╡рд┐рдХрд▓реНрдк (рдХреЗрд╡рд▓ рд░рд╛рдд рдореЗрдВ рдЙрдкрд▓рдмреНрдз) рдХреЗ рдмрдЬрд╛рдп -C рд╣реИ, рдпрд╣ рдХрдо рд╕реЗ рдХрдо рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рд╕рдВрддреГрдкреНрддрд┐ рдФрд░ рдпреВрдмреА рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП fptosi рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдЬреЛ CPU рдХреЗ рдореВрд▓ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдкреЛрд░реНрдЯреЗрдмрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдЧрд╛ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП x86 рдкрд░ 0x80000000 рд╡рд╛рдкрд╕ рдХрд░рдирд╛), рдФрд░ рдпрд╣ рдХрднреА рднреА рдЬрд╣рд░ рдпрд╛ рдЕрдирдЕрдиреБрдХреВрд▓рд┐рдд рдореЗрдореЛрд░реА рдирд╣реАрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрддреГрдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рднреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЬрдмрдХрд┐ рд╕рдВрддреГрдкреНрдд рдЬрд╛рддрд┐рдпреЛрдВ рдиреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдУрд╡рд░рд╣реЗрдб рдХрд┐рдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, "рд╕реАрдкреАрдпреВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ" рдХреЗрд╡рд▓ рдУрд╡рд░рд╣реЗрдб рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдХрд▓рдХ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдлреНрд▓реЛрдЯ-рдЯреВ-рдЗрдВрдЯ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдХреЗ рдХреЛрдИ рднреА рдЕрдиреБрдХреВрд▓рди рд╕рдХреНрд╖рдо рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреВрдмреА рдЖрд▓рд╛ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИрдВред

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

const fn (miri) рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реБрд╕реНрдд 1.26 рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рдВрддреГрдкреНрдд-рдХрд╛рд╕реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЪреБрдирд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдпрд╣ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ CTFE рдФрд░ RTFE рдкрд░рд┐рдгрд╛рдо рд╕реБрд╕рдВрдЧрдд рд╣реЛрдВ) (1.26 рд╕реЗ рдкрд╣рд▓реЗ рдУрд╡рд░рдлреНрд▓реЛ рд╕рдВрдХрд▓рди рд╕рдордп-рд╕рдордп рдкрд░ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ)

const fn g(a: f32) -> i32 {
    a as i32
}

const Q: i32 = g(1e+12);

fn main() {
    println!("{}", Q); // always 2147483647
    println!("{}", g(1e+12)); // unspecified value, but always 2147483647 in miri
}

рдорд┐рд░реА / CTFE рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдлрд╝реНрд▓реЛрдд рдХреЗ to_u128 / to_i128 рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рдЧрд╛рд░рдВрдЯреА рд╣реИ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдорд┐рд░реА рдореЗрдВ рдЙрд╕ рд╕рд╛рдорд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛)ред

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

рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╕рдВрдХрд▓рдХ рдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдЗрдирд░реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪреБрдирдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рддрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП a.saturating_cast::<i32>() рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

@ dns2utf8

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

IMO рдиреЗ рдЬреЛ @comex рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдЗрд╕ рдереНрд░реЗрдб IIRC рдХреЗ рд▓рд┐рдП рдЙрдкрдиреНрдпрд╛рд╕ рдирд╣реАрдВ, рдкреБрд░рд╛рдирд╛ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдирдпрд╛ рд╣реИ) рдпрд╣ рдЕрдЧрд▓рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдпрджрд┐ рд╣рдо рд╕рдВрддреГрдкреНрддрд┐ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА LLVM рдкрд░рд┐рд╡рд░реНрддрди рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЗрдирд▓рд╛рдЗрди asm (рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдЬрд╣рд╛рдВ рдРрд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдореМрдЬреВрдж рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

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

@rkruppe

[...] рдХреМрди рд╕рд╛ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╣рд░ рдмреИрдХреЗрдВрдб рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдирдП рдЗрдВрдЯреНрд░рд╕реНрдЯрд┐рдХреНрд╕ рдФрд░ рд▓реЛрдЕрд░рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, LLVM рд▓рдХреНрд╖реНрдп-рдирд┐рд░реНрднрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЦреБрд╢ рдирд╣реАрдВ рд╣реИ:

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

https://groups.google.com/forum/m/#/msg/llvm -dev / cgDFaBmCnDQ / CZAIMj4IBAA

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреА рд▓реИрдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ ReTag # 10,184 рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЕрд░реНрде рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ float as int рд╕рд╛рдзрди

(рдпрд╛рдиреА рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдкреИрдирд┐рдХ рд╢рдмреНрджрд╛рд░реНрде рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ freeze -рдЖрдзрд╛рд░рд┐рдд рдЕрдВрдбрд░рд╕реНрдХреНрд░рд┐рдлрд┐рдХреЗрд╢рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдЖрджрд┐)

рдпреЗ рдЯреА-рд▓реИрдВрдЧ рдЯреАрдо рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдкреНрд░рд╢реНрди рд╣реИрдВ, рди рдХрд┐ рдЯреА-рдХрдВрдкрд╛рдЗрд▓рд░, рдХрдо рд╕реЗ рдХрдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдИрдПрдордУ

рдмрд╕ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдХрд┐ рд░рди рдХреЗ рдмреАрдЪ _irreproducible_ рднреА recompiling рдмрд┐рдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред as рдСрдкрд░реЗрдЯрд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реНрдореГрддрд┐ рд╕реЗ рдХреБрдЫ рдХрдЪрд░рд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИред

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

рддрд░реНрдХ: рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣рд╛рдирд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдпрд╣?

рд░рд╕реНрдЯ рдмреБрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВ рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджреЛрд╖рд░рд╣рд┐рдд рд╣реИ (рдЕрд░реНрдерд╛рдд рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ From<X> рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ Y рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЕрд░реНрдерд╛рдд рдЖрдк u8 рд╕реЗ u32 рдХрд╛рд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ From u32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд▓реЗрдХрд┐рди рдЖрд╕-рдкрд╛рд╕ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВред

"рд╣рд╛рдирд┐рдкреВрд░реНрдг рдирд╣реАрдВ" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рд╣реИ рдЬреЛ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЫреЛрдЯреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг: 1_u64 as u8 рд╣рд╛рдирд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ u8 as u64 as u8 рд╣рд╛рдирд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рддреИрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдБ рдХреЗ рдмрд╛рдж рд╕реЗ "рдлрд┐рдЯ" рдХрд╛ рдХреЛрдИ рд╕рд░рд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ 20000000000000000000000000000_u128 as f32 рд╣реИ рдирд╣реАрдВ рд╣рд╛рдирд┐рдкреВрд░реНрдг рдЬрдмрдХрд┐ 20000001_u32 as f32 рд╣реИ, рдЗрд╕рд▓рд┐рдП рди float as int рдФрд░ рди рд╣реА int as float рджреЛрд╖рд░рд╣рд┐рдд рд╣реИрдВред

256u64 as u8 рд╣рд╛рдирд┐рдкреВрд░реНрдг рд╣реИред

рд▓реЗрдХрд┐рди <anything>_u8 as u64 as u8 рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕реМрд╣рд╛рд░реНрдж рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рди рдХрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ред рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдгрд╛рдВрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдмрдирд╛рдирд╛ (рдЬреИрд╕реЗ u32 as u8 ) рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рднреА C- рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдВрдЧрдд рд╣реИ рдЬреЛ рдХрд┐ рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо (рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдЬреЛ рджреЛ рдкреВрд░рдХ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ рдЗрди рджрд┐рдиреЛрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрди рд╕рднреА) рд╣реИред рдорд╛рдиреНрдп рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд░реВрдкрд╛рдВрддрд░рдг (рдпрд╛рдиреА рдЬрд╣рд╛рдВ рдЧрдВрддрд╡реНрдп рдореЗрдВ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ) рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛ рдФрд░ рд╕рд╣рдордд-рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред 1.6 as u32 рд╣рд╛рдирд┐рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рд╕реА-рд▓рд╛рдЗрдХ рднрд╛рд╖рд╛рдПрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд░рд┐рдгрд╛рдо 1 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрди рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЖрдо рд╕рд╣рдорддрд┐ рд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрди рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реА рдореЗрдВ рд╕рдореНрдореЗрд▓рдиред -рдЬреИрд╕реА рднрд╛рд╖рд╛рдПрдВ рдЬреЛ рдЙрдЪреНрдЪ рдХреЛрдЯрд┐ рдХреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, "рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ" рдЖрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ред

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

рдмрд╕ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдХрд┐ recompiling рдмрд┐рдирд╛ рднреА рд░рди рдХреЗ рдмреАрдЪ рдЕрдкреВрд░рдгреАрдп рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред as рдСрдкрд░реЗрдЯрд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реНрдореГрддрд┐ рд╕реЗ рдХреБрдЫ рдХрдЪрд░рд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИред

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

рдФрд░ рдЗрд╕рдХреЗ рдкрд╛рд╕ рдХрдЪрд░рд╛ рдореВрд▓реНрдп рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ

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

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

рдХреНрдпрд╛ рд╕реНрдкрд╖реНрдЯ trunc() , round() , floor() рдпрд╛ ceil() рд╕рд╛рде рдлреНрд▓реЛрдЯ-рдЯреВ-рдЗрдВрдЯ рдХрдиреНрд╡рд░реНрд╕реЗрд╢рди рдХреЗ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реИрдВ? as рдХреА рдореМрдЬреВрджрд╛ рдЧреЛрд▓рд╛рдИ рд░рдгрдиреАрддрд┐ "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд" рд╣реИ, рдЬрд┐рд╕рд╕реЗ as рдиреЙрди-рд░рд╛рдЙрдВрдбреЗрдб рдирдВрдмрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬреЛ x as u32 рд▓рд┐рдЦрддрд╛ рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ x.round() as u32 рдЪрд╛рд╣рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕реМрд╣рд╛рд░реНрдж рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рди рдХрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ред

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

рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдпрд╣ рд╣реИ рдХрд┐ рдХрдЪрд░рд╛ рдореВрд▓реНрдп рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрд╣реАрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ (рд╕рдВрднрд╡рддрдГ рд╕рдВрд╡реЗрджрдирд╢реАрд▓) рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред

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

рдХреНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдЯреНрд░рдВрдХ (), рджреМрд░ (), рдордВрдЬрд┐рд▓ () рдпрд╛ рдЫрдд () рдХреЗ рд╕рд╛рде рдлреНрд▓реЛрдЯ-рдЯреВ-рдЗрдВрдЯ-рдХрдиреНрд╡рд░реНрд╕реЗрд╢рди рдХреЗ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реИрдВ? as рдХреА рд╡рд░реНрддрдорд╛рди рджреМрд░ рдХреА рд░рдгрдиреАрддрд┐ "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд" рд╣реИ, рдЬреЛ рдЧреИрд░-рдЧреЛрд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

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

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬреЛ x as u32 рд▓рд┐рдЦрддрд╛ рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ x.round() as u32 рдЪрд╛рд╣рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЛрдореЗрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ x.trunc() as u32 рднреА рдХрд╛рдлреА рдЖрдо рддреМрд░ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ рд╣рд╛рдирд┐рд░рд╣рд┐рддрддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ 1.6 as u32 1 рдпрд╛ 2 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

https://doc.rust-lang.org/nightly/reference/expressions/operator-expr.html#type -cast- рднрд╛рд╡

рдлреНрд▓реЛрдЯ рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рддрдХ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдлреНрд▓реЛрдЯ рдХреЛ рд╢реВрдиреНрдп рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛
рдиреЛрдЯ: рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓рдХреНрд╖реНрдп рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЧреЛрд▓ рдорд╛рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред рдЗрд╕рдореЗрдВ Inf рдФрд░ NaN рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдиреЛрдЯ рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИред

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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ f as $Int рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдХреИрд╕реЗ рддрдп рдХрд░рдирд╛ рд╣реИ:

  • f.trunc() > $Int::MAX (рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрдирдВрдд рд╕рд╣рд┐рдд)
  • f.trunc() < $Int::MIN (рдирдХрд╛рд░рд╛рддреНрдордХ рдЕрдирдВрдд рд╕рд╣рд┐рдд)
  • f.is_nan()

рд░рд╛рдд рдореЗрдВ -Z saturating-casts рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ: $Int::MAX , $Int::MIN , рдФрд░ рд╢реВрдиреНрдпред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ рдХреБрдЫ рдЕрдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдард╛рдУред

рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреБрдЫ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдШрдмрд░рд╛рд╣рдЯ рдХреЗ рдмрдЬрд╛рдп) рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕рдЯреАрдХ рдореВрд▓реНрдп рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрди рдорд╛рдорд▓реЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд░реВрдкрд╛рдВрддрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдореИрдВ рдЕрд▓рдЧ рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬреЛрдбрд╝реЗрдВ: https://internals.rust-lang.org/t/pre-rfc-add-explicitly- name-numeric-conversion- apis/

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЛрдореЗрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ x.trunc() as u32 рднреА рдХрд╛рдлреА рдЖрдо рддреМрд░ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рд╣реИред

рд╕рд╣реА рдмрд╛рддред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, x.anything() as u32 , рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ round() , рд▓реЗрдХрд┐рди trunc() , floor() , ceil() ред рдареЛрд╕ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд┐рд░реНрдл x as u32 рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдПрдХ рдЧрд▓рддреА рд╣реИред

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

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

рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИ рдФрд░ рд░рд╛рдд рдореЗрдВ -Z saturating-casts рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ: $Int::MAX , $Int::MIN , рдФрд░ рд╢реВрдиреНрдпред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ рдХреБрдЫ рдЕрдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдард╛рдУред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореИрдВ f.trunc() > $Int::MAX рдФрд░ f.trunc() < $Int::MIN рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛, рдЬрдм рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЕрдирдВрдд рдЖрдХрд╛рд░ рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреЗ рд╣реИрдВ ( рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ)ред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ рдШрд╛рддрд╛рдВрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЧрдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реЛрдЧрд╛ (рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рджреЛ рдХреЗ рдкреВрд░рдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпреБрддреНрдХреНрд░рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдирдВрдд рдФрд░ NaN рдХрд┐рд╕ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдХрдард┐рди / рдЕрдзрд┐рдХ рдордирдорд╛рдирд╛ рд▓рдЧрддрд╛ рд╣реИред

WebAssembly рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрддреГрдкреНрдд рдХреЗ рд╕рд╛рде рд╕рд┐рд░реНрдл рд╕рдВрддреГрдкреНрдд рдЬрд╛рддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рддрд╛ рд╣реИ:

https://github.com/WebAssembly/nontrapping-float-to-int-conversions/blob/master/proposals/nontrapping-float-to-int-conversion/Overview.md#design

@CryZe рддреЛ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ -Z saturating-casts рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдФрд░ рдорд┐рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ)?

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рдпрд╣ рд╕рд╣реА рд╣реИред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдореИрдВ рдорд┐рд░рд┐ рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рд▓рд┐рдП https://github.com/WebAssembly/testsuite/blob/master/conversions.wast (рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрджрд▓реЗ рдЬрд╛рд▓ рдХреЗ рд╕рд╛рде) рдХреА рдирдХрд▓ рдХрд░реВрдВрдЧрд╛ред :)

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

@sunfishcode рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА рд░рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рднреА рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред ;)

рдХреНрдпрд╛ _sat рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдИ рднрд┐рдиреНрди рд╣реИ? (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╡рд╣рд╛рдБ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдорд╛рди рд╕рдорд╛рди рд╣реИрдВред) рд░рд╕реНрдЯ рдХреА рд╕рдВрддреГрдкреНрдд рдЬрд╛рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдорд╛рди рд▓рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ https://github.com/rust-lang/miri/pull/1321 рдореЗрдВ рдЬреЛрдбрд╝рд╛

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

рдЗрдирдкреБрдЯ рдорд╛рди рд╕рднреА рд╕рдорд╛рди рд╣реИрдВ, рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ _sat рдСрдкрд░реЗрдЯрд░реЛрдВ рдиреЗ рдЗрдирдкреБрдЯ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рд╣реИ, рдЬрд╣рд╛рдВ рдлрдВрд╕рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдиреЗ рдЯреНрд░реИрдк рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рд╣реИред

рдорд┐рд░реА (рдФрд░ рдЗрд╕ рддрд░рд╣ рд░рд╕реНрдЯ CTFE рдЗрдВрдЬрди) рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ https://github.com/rust-lang/miri/pull/1321 рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ rustc -Zmir-opt-level=0 -Zsaturating-float-casts рднреА рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЕрдм рдорд┐рд░реА рдореЗрдВ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЖрдВрддрд░рд┐рдХрддрд╛ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рджреЗрдЦреЗрдВ https://github.com/rust-lang/miri/pull/1325ред

рдореИрдВрдиреЗ https://github.com/rust-lang/rust/pull/71269#issuecomment -615537137 рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛ рдФрд░ рдкреАрдЖрд░ рднреА рд╕рдВрддреГрдкреНрдд -Z рдзреНрд╡рдЬ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред

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

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

рдХреНрдпрд╛ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ? fn i32::checked_from(f64) -> Result<i32, DoesntFit> рдЬреИрд╕рд╛ рдХреБрдЫ?

рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ i32::checked_from(4.5) рд░рд┐рдЯрд░реНрди рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

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

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

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

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

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