Rust: рдХреЙрдиреНрд╕реНрдЯ fn рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ (RFC 911)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдЕрдкреНрд░реИрд▓ 2015  ┬╖  274рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

https://github.com/rust-lang/rust/issues/57563 | рдирдИ рдореЗрдЯрд╛ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛

рдкреБрд░рд╛рдиреА рд╕рд╛рдордЧреНрд░реА

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

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

рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬреЗрдВ:

  • [x] рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп рдкрд░ рдкрд╣реБрдВрдЪреЗрдВ :P
  • [x] const unsafe fn рдШреЛрд╖рдгрд╛ рдЖрджреЗрд╢ https://github.com/rust-lang/rust/issues/29107
  • [x] рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдЦреЗрдВ

рд╕реАрдЯреАрдПрдлрдИ = https://en.wikipedia.org/wiki/Compile_time_function_execution

A-const-eval A-const-fn B-RFC-approved B-RFC-implemented B-unstable C-tracking-issue T-lang

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

рдЕрдЧрд░ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдл рдкреЙрдЗрдВрдЯ рд╣реВрдВ рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВред

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

рдбреА рдореЗрдВ const fn рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп (рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде) рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

// Standalone example.
struct Point { x: i32, y: i32 }

impl Point {
    fn new(x: i32, y: i32) -> Point {
        Point { x: x, y: y }
    }

    fn add(self, other: Point) -> Point {
        Point::new(self.x + other.x, self.y + other.y)
    }
}

const ORIGIN: Point = Point::new(0, 0); // works because 0, 0 are both known at compile time 
const ORIGIN2: Point = Point::new(0, 0); // ditto

const ANOTHER: Point = ORIGIN.add(ORIGIN2); // works because ORIGIN and ORIGIN2 are both const.
{
    let x: i32 = 42;
    let y: i32 = 24;
    const SOME_POINT: Point = Point::new(x, y); // Error: x and y are not known at compile time
}
{
    const x: i32 = 42;
    const y: i32 = 24;
    const SOME_POINT: Point = Point::new(x, y); // Works x and y are both known at compile time.
}

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

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

рдХреНрдпрд╛ рдпрд╣ #25609 рддрдХ рдмрдВрдж рд╣реИ?

@Munksgaard рдЬреЛ рд╕рд┐рд░реНрдл рд╕рдВрдХрд▓рдХ AFAIK рдХреЛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред Stdlib рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ const fn рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ рдЯреВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ std::ptr::null() рдФрд░ null_mut() рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо $#$3 0usize as *mut _ #$ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ static mut *MyTypeWithDrop рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рд╕реЗ рдмрд╛рд╣рд░ рдерд╛

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

рдпрд╣ рдЕрдм рдЕрдВрддрд┐рдо рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИред

https://github.com/rust-lang/rust/issues/29107 рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рддрджрдиреБрд╕рд╛рд░, рдХреНрдпрд╛ рдЗрд╕рдХреА рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ const fn рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реАрдорд┐рдд рд░реВрдк рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЗрд╕ рдкрде рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ рдЬреЛ " const fn рджреГрд╖реНрдЯрд┐рдХреЛрдг" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдПрдВрдбрдЧреЗрдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рд╣рдо рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧреА-рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЬреЛрдбрд╝рддреЗ рд░рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ C++ рдХреЗ constexpr рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдХреЛ рдХрдореЛрдмреЗрд╢ рдХреЙрдкреА рдХрд░ рд▓реЗрдВрдЧреЗред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рд╣рдЬ рд╣реИрдВ? рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рд╣рд╛рдВ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдмреЗрд╣рддрд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд╕рдордп рдХреЗ рд╕рд╛рде рдЫреЛрдЯреЗ рдХрджрдореЛрдВ рдХреЗ рд╕рд╛рде, рдХрдо рд╕реЗ рдХрдо рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рдорд╛рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рди рд╣реЛ рдЬрд╛рдП, рддрдм рддрдХ рд╣рдо рдЙрд╕ рд░рд╛рд╕реНрддреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪреБрдиреЗрдВред

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

@рдЧреНрд▓реЗрднреЛрдПрд░реНрд▓

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

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

@eddyb рдФрд░ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдРрд╕реА рдпреЛрдЬрдирд╛ рдкрд░ рдХреБрдЫ рд╕реНрдХреЗрдЪрд┐рдВрдЧ рдХреА, рдЬреЛ рдХреЛрдб рдХреЗ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╕реНрд╡рд╛рде рдХреЗ рдирд┐рд░рдВрддрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХреЗред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ MIR рдореЗрдВ рдХрдо рдХрд░рдирд╛ рдФрд░ рдЗрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ,
рдЕрдореВрд░реНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛, рдпрджрд┐ рдЬреЗрдиреЗрд░рд┐рдХ рд╣реИрдВ рддреЛ рдЖрдк рдЕрднреА рддрдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЪреАрдЬреЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддреА рд╣реИрдВ)ред

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

рдЙрд╕ рдиреЗ рдХрд╣рд╛, @glaebhoerl , рдореБрдЭреЗ рдпрд╣ рднреА рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрдВрдбрдЧреЗрдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ const fn RFC рдореЗрдВ рдХреБрдЫ рдРрд╕реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВред :)

рдЖрд╡рдВрдЯрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд░рди-рдЯрд╛рдЗрдо рдореЗрдВ рднрд╛рдЧ рд░рд╣реА рд╣реИред
рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдЙрд╕ рдХрдВрдкрд╛рдЗрд▓-рдЯрд╛рдЗрдо/рд░рди-рдЯрд╛рдЗрдо рдмреИрд░рд┐рдпрд░ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ $#$ const fn $#$ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ liballoc рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рд╕реНрдЯреИрдХ рдкрд░ рдмрд╛рдЗрдЯ-рдПрдбреНрд░реЗрд╕реЗрдмрд▓ рдорд╛рдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╡рдВрдЯрди рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ constexpr рдЬреИрд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рднреА, const fn _рдЕрднреА рднреА_ рд╢реБрджреНрдз рд╣реЛрдЧрд╛: рдЗрд╕реЗ 'static рдбреЗрдЯрд╛ рдкрд░ рджреЛ рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛ рдФрд░ рдирд╣реАрдВ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ред

@nikomatsakis рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реЛрддрд╛ рддреЛ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реЛрддрд╛ред :) рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рд┐рд░реНрдл рдЬреНрдЮрд╛рдд рдЕрдЬреНрдЮрд╛рдд рджреЗрдЦрддрд╛ рд╣реВрдВред рдЬреЗрдиреЗрд░рд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ const s рдХреЗ рд╕рд╛рде рдкреВрд░реА рдЪреАрдЬ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реА ++ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдереАред рдЬрд╣рд╛рдВ рддрдХ const s рдФрд░ const рдЬреЗрдиреЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА const s рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рд╕рд░рдгреА рд╣реИрдВ рдФрд░ рд╣рдо рдЕрдзрд┐рдХ рд╕рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╡рд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдерд╛ - рдЬреИрд╕рд╛ рдХрд┐ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд╡рд┐рдкрд░реАрдд - рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред const fn рдЪреАрдЬреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдзрд┐рдХ рд╡рд┐рдпреЛрдЬреНрдп рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд▓рдЧрддрд╛ рд╣реИред рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рдЖрдЧреЗ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ const impl s рдФрд░ const Trait рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдЬреЗрдирд░рд┐рдХ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ _sure_ рд╣реВрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡ рдХрд▓рд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреАрдЬреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рдЪреБрдХреА рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд░рд╕реНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЧреБрдард▓реА, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реЛрд╕реА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░ рдЬрд╣рд╛рдВ рд░рд╕реНрдЯ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд╡реЗ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдореЗрдВ рдордВрдЪрд┐рдд рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд╣ рд╕реНрдерд╛рди рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдорд░реНрдерди (рдХрд┐рд╕реА рд░реВрдк рдореЗрдВ) (рдЬреЛ const fn рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реАрдорд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИ) рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧреЗрдо-рдЪреЗрдВрдЬрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред (рдмрд╕ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдореБрдЭреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреНрд╡реАрдЯ рдорд┐рд▓реЗ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдмреЗрд╣рддрд░ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдореЗрдВ рд░рд╕реНрдЯ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред) рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдИ рднреА рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди "рд╣рдорд╛рд░реЗ рдХрд░реАрдм" рд╣реИ - C++ рдХрд╛ constexpr , D рдХрд╛ рддрджрд░реНрде CTFE, рд╣рдорд╛рд░реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ -- рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░реЗрд░рдХ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА/рдкреВрд░реНрдг рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред (рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдПрдХ рдЕрдЪреНрдЫреА рдЪреАрдЬрд╝ рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдФрд░ рдбреАрдПрд╕рдПрд▓ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ, рдкреНрд░рджрд░реНрд╢рди-рдЙрдиреНрдореБрдЦ рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рдирд╣реАрдВред)

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

(рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмреНрд░реЗрдирдбрдВрдк рдерд╛ рдФрд░ рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред)

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

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

рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ _nice_ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ-рд▓рд╛рдЧреВ рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд╕рд╛рде рдЧреИрд░-рддреБрдЪреНрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд┐рд░ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕реА ++ constexpr рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреЗрд╣рдж рд╕реАрдорд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЬреЛ рдЪрд╛рд╣рд┐рдП рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ: рдореБрдЭреЗ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ T рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде x рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХреЗ y , рдФрд░ z рдЬреИрд╕реЗ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ x , y , рдФрд░ z рдорд╛рдиреНрдп рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, x < y && z > 0 ), рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдо static рд╡реИрд░рд┐рдПрдмрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ x < y && z > 0 рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдИ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдпрджрд┐ рд╡реЗ рдХрднреА рднреА рд╣реЛрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред const fn рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдЬрдВрдЧ _now_ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдЪреАрдЬреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред

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

@glaebhoerl https://anydsl.github.io/ рднреА рд╣реИ, рдЬреЛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдЬрдВрдЧ рдХреА рддрд░рд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕;) рд╡реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЪрд░рдгрдмрджреНрдз рдЧрдгрдирд╛ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ in
рд╡рд┐рд╢реЗрд╖ рдЖрдВрд╢рд┐рдХ рдореВрд▓реНрдпрд╛рдВрдХрдиред

рд╢рдирд┐рд╡рд╛рд░, 16 рдЬрдирд╡рд░реА, 2016 рдХреЛ рд╢рд╛рдо 6:29 рдмрдЬреЗ, рдПрдбреБрдЖрд░реНрдб-рдорд┐рд╣рд╛рдИ рдмрд░реНрдЯреЗрд╕реНрдХреБ <
рд╕реВрдЪрдирд╛рдПрдВ@github.com> рдиреЗ рд▓рд┐рдЦрд╛:

@glaebhoerl https://github.com/glaebhoerl рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рд╛рдВрд╕ рдирд╣реАрдВ рд░реЛрдХреВрдВрдЧрд╛
рд╕рдЦреНрдд рд╕реНрд╡рдЪреНрдЫрддрд╛, рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдЪрдиреЗ рдХрд╛ рддрдВрддреНрд░ рд╣реЛрдЧрд╛
(рдмрд┐рд▓реНрдХреБрд▓ рдЕрд╕рд▓реА рдПрд▓рдЖрдИрдПрд╕рдкреА рдХреА рддрд░рд╣), рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдЙрджреНрджреЗрд╢реНрдпред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rust-lang/rust/issues/24111#issuecomment -172271960ред

29525 рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ const fn рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрд╣рд╛рдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИред рдПрдХ рдУрд░, рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдХреЛрдб рдЦреЛрд▓реЗрдЧрд╛ - Box , Vec , Rc , unsafe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреБрдЫ рднреА рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП const fn рд╣реЛ рд╕рдХрддрд╛ рд╣реИ" рдХреА рд╕реАрдорд╛ рдЕрдм рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдХреА рдУрд░ _рдРрдирд┐рдерд┐рдВрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреА рдЬрд╛рдПрдЧреА рдЬрд┐рд╕рдореЗрдВ FFI_ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рддреЛ рдХреНрдпрд╛ рд╣рдо _actually_ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ const рдиреЗрд╕ рдХреА рдЖрдбрд╝ рдореЗрдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдЪреАрдЬреЗрдВ (рд╕рдХрд░реНрдордХ рд░реВрдк рд╕реЗ) рдПрдлрдПрдлрдЖрдИ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдХреМрди рд╕реА рдЪреАрдЬреЗрдВ рдирд╣реАрдВред рдФрд░ рдПрдлрдПрдлрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдорд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз ( unsafe рдХреЗ рд╡рд┐рдкрд░реАрдд) _really_ рдЙрдард╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рддрд╣рдд рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкрд╛рд╕ fn s рдХреЗ рд▓рд┐рдП рдкрд╛рддреНрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ const рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реЛрдВрдЧреЗ рдЬреЛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА const ness рдПрдХ рдордирдорд╛рдирд╛, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рдЙрдЬрд╛рдЧрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдШреВрдорддрд╛ рд░рд╣реЗрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ const рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛...

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

@glaebhoerl рдареАрдХ рд╣реИ, рдпрд╣ рд╡рд╣ рдореЙрдбрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЬреЛ @tsion рдХреА рдорд┐рд░реА рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реБрджреНрдзрддрд╛ рдХреЗ рдХрд╛рд░рдг рдПрдлрдПрдлрдЖрдИ рднреЗрдж рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬреЛ рдХрд┐ рд╕реБрд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП _required_ рд╣реИред
рдЖрдк Rust const fn s рдХреЗ рд▓рд┐рдП GHC рдХрд╛ рдЙрдкрдпреЛрдЧ _рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ unsafePerformIO рд╣реИред

рдореБрдЭреЗ рд╕реНрд╡рдпрдВ const рдХреАрд╡рд░реНрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ const fn foo<T: const Trait> ( const impl Trait for T рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП) рдХреЗ рдмрдЬрд╛рдп const fn foo<T: Trait> рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВред

Sized рдХреА рддрд░рд╣, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдЧрд▓рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдРрд╕рд╛ рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХреЗред

@eddyb рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк https://internals.rust-lang.org/t/mir-constant-evaluation/3143/31 рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ (рдЯрд┐рдкреНрдкрдгреА 31, 11 рдирд╣реАрдВ)ред

@tsion рдлрд┐рдХреНрд╕реНрдб, рдзрдиреНрдпрд╡рд╛рдж!

рдЕрдЧрд░ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдл рдкреЙрдЗрдВрдЯ рд╣реВрдВ рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВред

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

рдбреА рдореЗрдВ const fn рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп (рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде) рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

// Standalone example.
struct Point { x: i32, y: i32 }

impl Point {
    fn new(x: i32, y: i32) -> Point {
        Point { x: x, y: y }
    }

    fn add(self, other: Point) -> Point {
        Point::new(self.x + other.x, self.y + other.y)
    }
}

const ORIGIN: Point = Point::new(0, 0); // works because 0, 0 are both known at compile time 
const ORIGIN2: Point = Point::new(0, 0); // ditto

const ANOTHER: Point = ORIGIN.add(ORIGIN2); // works because ORIGIN and ORIGIN2 are both const.
{
    let x: i32 = 42;
    let y: i32 = 24;
    const SOME_POINT: Point = Point::new(x, y); // Error: x and y are not known at compile time
}
{
    const x: i32 = 42;
    const y: i32 = 24;
    const SOME_POINT: Point = Point::new(x, y); // Works x and y are both known at compile time.
}

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

@MaikKlein RFC рдЪрд░реНрдЪрд╛ рдореЗрдВ CTFE рдкрд░ рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рд╣реБрдИ

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

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реЙрдХреЗрдЯ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: https://github.com/SergioBenitez/Rocket/issues/19#issuecomment -269052006

рджреЗрдЦреЗрдВ https://github.com/rust-lang/rust/issues/29646#issuecomment -271759986ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдореЗрдВ рдЦреЛрдЬрдХрд░реНрддрд╛ рдкрд░ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдорд┐рд░реА рдиреЗ "рд╡реИрд╢реНрд╡рд┐рдХ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ" рдХреА рд╕реАрдорд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рд╣реИ ( @solson рдФрд░ @nikomatsakis рдЖрдИрдЖрд░рд╕реА рдкрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ)ред

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

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

рдореИрдВ рд▓рд┐рдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣рдордд рд╣реВрдВред рдпрд╣ рдореМрдЬреВрджрд╛ рдмрд┐рд▓реНрдЯ-рдЗрди рд▓рд┐рдВрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИ missing_docs , missing_debug_implementations , рдФрд░ missing_copy_implementations ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ #[allow(missing_const)] fn foo() {} рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@eddyb @nikomatsakis рдореЗрд░рд╛ " const рдХреЛ рд╣рдЯрд╛рдирд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рд╣реИ" рдмрд┐рдВрджреБ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдЦрд┐рд░рдХрд╛рд░ рдХреАрд╡рд░реНрдб рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдХрд╛ рд╡рд╛рджрд╛ рд╣реИ рдХрд┐ fn _remain_ const рд╣реЛрдЧрд╛

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

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

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ... рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк const fn рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдиреЙрдЯ-рдХреЙрдиреНрд╕реНрдЯ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ notconst рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреЛрдЯреЗрдЯ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ const fn рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред

notconst рднреА рд░рд╕реНрдЯ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рджрд░реНрд╢рди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред (рдпрд╛рдиреА " mut , рди рдХрд┐ const ")

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

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ... рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдлрд╝реНрд▓реЙрдк рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЗрд╕рдХреЗ рд▓рд╛рдн рд╣реИрдВ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╕рдордп рдХреЗрд╡рд▓ const fn рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ) рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдПрдХ рдФрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

рдЖрдкрдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк const fn рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдиреЙрдЯ-рдХреЙрдиреНрд╕реНрдЯ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ

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


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ const fn рд╣реЛрдЧрд╛ред

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


рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рдирд┐рд╖реНрдХрд░реНрд╖: рдХреЛрдИ рднреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ const fn рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд▓рдЧрддрд╛ рд╣реИред рдХреАрд╡рд░реНрдб рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, notconst рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред

@solson рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБред

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

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╣рдордиреЗ рдкрд╣рд▓реА рдмрд╛рд░ const fn рдХреЛ рдЕрдкрдирд╛рдпрд╛ рддреЛ рдЗрд╕ рдЯреНрд░реЗрдб-рдСрдл рдкрд░ рдХрд╛рдлреА рдЪрд░реНрдЪрд╛ рд╣реБрдИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @solson рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рднреА рд╕рд╣реА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдмрджрд▓ рдЧрдИ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдХрд╛рдВрд╕реНрдЯреЗрдмрд▓ fns рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдореМрд▓рд┐рдХ рдЯреНрд░реЗрдбрдСрдл рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдкрдиреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрджрд┐ рдореЗрдВ const fn рдЬреЛрдбрд╝рдирд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реА рдЬреАрд╡рди рд╣реИред

@nikomatsakis рдореБрдЭреЗ рдЬреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдЗрди рджреЛ рддрдереНрдпреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИ:

  • рд╣рдо рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, unsafe рдХреЛрдб "рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╕реНрдерд┐рд░рд╛рдВрдХ" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  • рд╣рдо рдЬреЗрдирд░рд┐рдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ "рд╕рд╣реА" рдФрд░ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рдмреАрдЪ рдПрдХ рдЯреНрд░реЗрдбрдСрдлрд╝ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ "рд╡реИрд╢реНрд╡рд┐рдХ рджреБрд╖реНрдкреНрд░рднрд╛рд╡" рдореБрдЦреНрдп рдЪреАрдЬ рд╣реИ рдЬреЛ рдХреЛрдб рдХреЛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ const fn , рдХреНрдпрд╛ рдпрд╣ "рдкреНрд░рднрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА" рдирд╣реАрдВ рд╣реИ рдЬреЛ рд░рд╕реНрдЯ рдХреЗ рдкрд╛рд╕ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛ рдФрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?
рдХреНрдпрд╛ рд╣рдореЗрдВ "рдкреНрд░рднрд╛рд╡ рд╕реНрдерд┐рд░рддрд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдИрдПрдордУ рдХреЛ рдХрднреА рдирд╣реАрдВ рдШрдмрд░рд╛рддреЗ рд╣реИрдВред

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

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЙрд▓реНрд▓рдВрдШрди рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдСрдкреНрдЯ-рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рдХрд╛рд░рдг рд╣реИ, рдирд╣реАрдВ?

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ:

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, const fn s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ( new ) рдпрд╛ рдЬрд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред

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

@torkleyy рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕реЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

IRC рдкрд░ @eddyb рдиреЗ рдЗрд╕ рдлреАрдЪрд░ рдЧреЗрдЯ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рддрд╛рдХрд┐ рд╣рдо рдЙрдирдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрдиреНрд╕реНрдЯ fns рдХреЛ рдХреЙрд▓ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░ рд╕рдХреЗрдВред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ?

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

рдпрд╣рд╛рдВ рдореЗрд░реА рд╕рдордЭ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдШреЛрд╖рдгрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЙрд▓ рдХреЛ const рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИред

рдХреНрдпрд╛ рд╣рдо рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдЬрд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рдХреБрдЫ рдорд╛рдзреНрдпрдореЛрдВ рд╕реЗ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЪрд░реНрдЪрд╛/рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВ?

рдлрд┐рд░ рдХреЙрд▓ рдХреЛ рд╕реНрдерд┐рд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕рдВрдХрд▓рдХ рдмрд╛рдж рдореЗрдВ рдЕрдкрдирд╛ рдорди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд┐рд░ рд╣реИ?

@nixpulvis рдХреБрдЫ const fn рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП UnsafeCell::new ред рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░рдВрддрд░ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП static рдЖрдЗрдЯрдо рдХрд╛ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ред

@nixpulvis рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ const fn рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдЕрд╕реНрдерд┐рд░-рдЙрдкрдпреЛрдЧ рдХреЛрдб (рдЬреИрд╕реЗ рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдирд┐рд░рдВрддрд░ рд╕рдВрджрд░реНрднреЛрдВ рд╕реЗ, рд╕реНрдерд┐рд░ рд░рд╕реНрдЯ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ ред

cc @rust-lang/lang https://github.com/rust-lang/rust/issues/24111#issuecomment -310245900 рдкрд░

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

@SimonSapin рдпрд╣ рдЕрдзрд┐рдХ рд╣реИ рдХрд┐ рд╣рдо рдЖрдЬ const fn s рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рди рд╣реА рд╣рдо рдЙрдирдХреЗ рдФрд░ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдкрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдФрд░ рдХрд┐рддрдирд╛ рд▓рдЪреАрд▓рд╛рдкрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдХреЙрдиреНрд╕реНрдЯ fn рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВред

рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ const рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рддрд╛ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЯреАрдо рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдСрдбрд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдЗрдирд╡реЛрдХреЗрд╢рди рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ https://github.com/rust-lang/rust/issues/43017 рд╕рдмрдорд┐рдЯ рдХрд┐рдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреНрд░рддрд┐ @petrochenkov рдореЗрдВ рдСрдбрд┐рдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рднреАред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди/рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛/рдирд┐рд╣рд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рдЗрдкреЛрдереЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Zero рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд▓рд╛ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ:

pub trait Zero {
    fn zero () -> Self;
}

рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП zero рд╡рд┐рдзрд┐ рдХреА const рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕реЗ $ Vec рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХреБрдЫ BigInt рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╣рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдорд╢реАрди рд╕реНрдХреЗрд▓рд░ рдФрд░ рдЕрдиреНрдп рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд┐рдзрд┐ const ред

impl Zero for i32 {
    const fn zero () -> i32 { 0 } // const
}

impl Zero for BigInt {
    fn zero () -> BigInt { ... } // not const
}

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

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

@Daggerbot рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд▓рдХреНрд╖рдгреЛрдВ рдореЗрдВ const fn рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рджреЗрдЦрддрд╛ рд╣реВрдВ - рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рднреА рдирд┐рд╣рд┐рддрд╛рд░реНрде const fn рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ " const impl s" рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЖрдо рд╣реИред .

@jethrogb рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реЛред
рдореЗрд░реЗ рдорди рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп const fn , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП T: Zero рдмрд╛рдзреНрдп, рдХреЛ $#$7$# рдХреЗ рд▓рд┐рдП impl рдХреА Zero T рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА const fn рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдХреЙрд▓ рдирд┐рд░рдВрддрд░ рд╕рдВрджрд░реНрдн рд╕реЗ рдЖрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ const fn )ред

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

рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдорд╕рд▓рд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛?

pub trait Zero {
    fn zero() -> Self;
}

pub trait ConstZero: Zero {
    const fn zero() -> Self;
}

impl<T: ConstZero> Zero for T {
    fn zero() -> Self {
        <Self as ConstZero>::zero()
    }
}

рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

// Blanket impl
impl<T: ConstZero> Zero for T {
    fn zero () -> Self { T::const_zero() }
}

pub struct Vector2<T> {
    pub x: T,
    pub y: T,
}

impl<T: ConstZero> ConstZero for Vector2<T> {
    const fn const_zero () -> Vector2<T> {
        Vector2 { x: T::const_zero(), y: T::const_zero() }
    }
}

// Error: This now conflicts with the blanket impl above because Vector2<T> implements ConstZero and therefore Zero.
impl<T: Zero> Zero for Vector2<T> {
    fn zero () -> Vector2<T> {
        Vector2 { x: T::zero(), y: T::zero() }
    }
}

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

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

impl<T: Zero> Zero for Vector2<T> {
    const fn zero () -> Vector2<T> {
        Vector2 { x: T::zero(), y: T::zero() }
    }
}

constexpr рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп IIRC, C++ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ const рдХреЗрд╡рд▓ рддрднреА рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ рдЬрдм <T as Zero>::zero рднреА const рд╣реЛред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдХреНрдпрд╛ рд╕рдВрдХрд▓рдХ рдЗрд╕ const рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ C++)?

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: @andersk рдХрд╛ рд╕реБрдЭрд╛рд╡ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛/рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред

@Daggerbot рдпрд╣ RFC 1210 (рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛) рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд "рдЬрд╛рд▓реА" рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ

impl<T: ConstZero> Zero for T {тАж}  // 1
impl<T: ConstZero> ConstZero for Vector2<T> {тАж}  // 2
impl<T: Zero> Zero for Vector2<T> {тАж}  // 3
impl<T: ConstZero> Zero for Vector2<T> {тАж}  // 4

рдлрд┐рд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ 1 3 рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реИрдк рдХрд░рддрд╛ рд╣реИ, рдЙрдирдХреЗ рдЪреМрд░рд╛рд╣реЗ рдХреЛ 4 рд╕реЗ рдареАрдХ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЬрд╛рд▓реА рдирд┐рдпрдо рдХреЗ рддрд╣рдд рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред

http://smallcultfollowing.com/babysteps/blog/2016/09/24/intersection-impls/ рднреА рджреЗрдЦреЗрдВред

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

рд╣рд╛рдБ, рдЬрд╛рд▓реА рдирд┐рдпрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@eddyb рдЖрдк рдХреНрдпрд╛ рдЬрдЯрд┐рд▓ рдорд╛рдирддреЗ рд╣реИрдВ?

@Kixunil рдХреБрдЫ impl s рдХреЛ const fn рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рдЧрднрдЧ рд╣рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╣рдо рдпрд╣рд╛рдВ рдкрдЯрд░реА рд╕реЗ рдЙрддрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрджреНрджрд╛ const fn рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рд╣реИред const fn рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдпрд╛ const impl Trait for Foo рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрд╡реАрдХреГрдд RFC рдХреЗ рд▓рд┐рдП рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИрдВред

@ oli-obk рдпрд╣ рдирдпрд╛ RFC рдирд╣реАрдВ рд╣реИ рдмрд▓реНрдХрд┐ const fn рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЕрднреА рджреЗрдЦрд╛, рдФрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рд╕рдВрдкрд╛рджрд┐рдд рдХреАред

@eddyb рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ (рд╢реВрдиреНрдп рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛, рд▓реЗрдХрд┐рди рд╣рдо рд╢рд╛рдпрдж рд╡реИрд╕реЗ рднреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ ConstTrait рд╕реЗ рднреА рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╡реИрд╕реЗ рднреА, рдореИрдВ рдЗрдореНрдкреНрд▓рд╛рдВрдЯреНрд╕ рдХреЛ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдЯреЛ-рдЬрдирд░реЗрдЯрд┐рдВрдЧ ConstTrait: Trait рдХреА рднреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@Kixunil рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ ConstTrait: Trait рдЬреИрд╕реЗ рдХреБрдЫ рднреА рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рди рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА рдХреЛ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдХрд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛ рддреЛ рдПрдХ рдареЛрд╕ impl рдпрд╛ рдПрдХ where рдмрд╛рдЙрдВрдб) рдЬреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдгрд╛рд▓реА рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдирдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ const fns рдХреЛ UnsafeCell рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

const fn dont_change_anything(&self) -> bool {
    let old = self.cell.get();
    self.cell.set(!old);
    old
}

рдЕрдм рддрдХ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ set const рдирд╣реАрдВ рд╣реИред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд╣реЗрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: рдХреНрдпрд╛ unsafe рдХреЛрдб рдЗрд╕ рдмрд╛рдд рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдбреЗрдЯрд╛ рдкрд░ рд╕рдорд╛рди const рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╕рдордп рд╣рдореЗрд╢рд╛ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдЖрдЬ рдФрд░ рднрд╛рд╖рд╛/рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╡реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛?

const fn рдХрд╛ рдорддрд▓рдм рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

@Kixunil рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ https://github.com/rust-lang/rfcs/issues/1631

@jethrogb рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ mem::size_of const fn рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ mem::transmute рдФрд░ рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдЬрдВрдЧ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред рдЕрдиреНрдпрдерд╛, рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИред transmute рдХреЛ рдорд┐рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд┐рд░реА рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдкрд╣рд▓рд╛ рдХрджрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реИ: #43628

рдЗрд╕рд▓рд┐рдП! *Cell::new , mem::{size,align}_of , ptr::null{,_mut} , Atomic*::new , Once::new рдФрд░ {integer}::{min,max}_value рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд░реБрдЪрд┐? рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдБ fcps рд╣реЛрдЧрд╛ рдпрд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рд╣реЛрдВрдЧреА?

рд╣рд╛рдВред

рдореИрдВ рдХрд┐рд╕реА рднреА рдЯреАрдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рд╢рдХреНрддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд╛рдп рдпрд╣ рд╣реИ рдХрд┐ mem::{size,align}_of рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдпреЗ рд╕рднреА рдЗрддрдиреЗ рдЫреЛрдЯреЗ рд╣реИрдВ рдХрд┐ рд░рдмрд░-рд╕реНрдЯреИрдореНрдк рдХреА рдЧрддрд┐ рдХреЗ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдм рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдПрдл.рд╕реА.рдкреА.

рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдХреЙрдиреНрд╕реНрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ mem::{size,align}_of рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ @nikomatsakis рдХреЛ рдЙрдирдХреЗ рдЗрдВрд╕реНрдЯрд╛-рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рд╡реНрдпрдХреНрдд рдХреА рд╣реИ рдЬрдм рдЙрдиреНрд╣реЗрдВ const fn s рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ . рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд┐рдВрддрд╛рдПрдБ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рд╡рдзрд╛рдиреА рд╣реИ, рд▓реЗрдХрд┐рди IIRC рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкреНрд░рддрд┐-рдлрд╝рдВрдХреНрд╢рди рдлрд╝реАрдЪрд░ рдЧреЗрдЯ рдЬреЛрдбрд╝реЗ рдЧрдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдХрд╛рдлреА рд╕рдорд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдПрдХ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ FCP. рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ @rustbot рдПрдХ рд╣реА GitHub рдереНрд░реЗрдб рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ fcps рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЛрдВ рдХреЛ рдЦреЛрд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

@durka рдХреНрдпрд╛ рдЖрдк рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛ FCP рдПрдХ рдмрд╛рд░ рдпрд╣ рд╣реЛ рдЧрдпрд╛ред

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

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

рдХреНрдпрд╛ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд std рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдирдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рд╕реНрдерд╛рди рд╣реИ const ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ Duration:: { new , from_secs , from_millis } рд╕рднреА рдХреЛ const рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@remexre рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╢рд╛рдпрдж рдкреАрдЖрд░ рдмрдирд╛рдирд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ libs рдЯреАрдо рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛ рд╣реИред

https://github.com/rust-lang/rust/pull/47300 рдХреЗ рд░реВрдк рдореЗрдВ PR'dред рдЬрдм рдореИрдВ рдЙрд╕ рдкрд░ рдерд╛ рддрдм рдореИрдВрдиреЗ рдЕрд╕реНрдерд┐рд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЛ const рднреА рдЬреЛрдбрд╝рд╛ред

std рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ const рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, mem::uninitialized рдФрд░ mem::zeroed ? рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдЕрддрд┐рд░рд┐рдХреНрдд const рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдХрдореА рдЬреЛ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ mem::uninitialized рдХреА рдПрдХ рд╣реА рдХрдореА рд╣реИ, рдЬрд╣рд╛рдВ Drop рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ structs рдХрд╛ рдирд┐рд░реНрдорд╛рдг $ ptr::write рдХреЗ рдмрд┐рдирд╛ рдмрдирд╛рдпрд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдЧрд░ рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд▓рдЧреЗ рддреЛ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рднреА рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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

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

рдЗрди рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреАрдЫреЗ рдкреНрд░реЗрд░рдгрд╛ const рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рдЙрдкрдЬреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ mem::uninitialized<Vec<u32>> рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд╣рд░ рдмрд╛рд░ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛, рдмрд┐рдирд╛ рдХрд┐рд╕реА рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдХреЗред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдЕрдЧрд░ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рдмрд╛рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, unsafe рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред

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

use std::time::Instant;

pub struct GlobalTimer {
    time: UnsafeCell<Instant>
}

impl TimeManager {
    pub const fn init() -> TimeManager {
        TimeManager {
            time: UnsafeCell::new(Instant::now())
        }
    }
}

Instant::now() const рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред Instant::now() рдХреЛ mem::uninitialized::<Instant>()) рд╕реЗ рдмрджрд▓рдиреЗ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА рдпрджрд┐ mem::uninitialized рдПрдХ const fn рд╣реЛрддрд╛ред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрд╡рд▓рдкрд░ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдЧрд╛ред рдФрд░ рдЬрдмрдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдЧреИрд░-рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдЬрдВрдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реЛрддреА рд╣реИ), рдпрд╣ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд╣рд╛рдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреА рд╣реИрдВред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: const рдХреЗ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ TimeManager::init() . рднреВрд▓ рдЧрдП

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

const fn foo() -> Whatever {
    unsafe { 
        let mut it = mem::uninitialized();
        init_whatever(&mut it);
        it
    }
}

рд▓реЗрдХрд┐рди const fns рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрддрдиреЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд▓рд┐рдЦ рднреА рдирд╣реАрдВ рд╕рдХрддреЗ...

рдореИрдВ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдФрдЪрд┐рддреНрдп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди const pure рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╣ рдХреБрдЫ рд╕рдореНрдореЛрд╣рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ .

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

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

union s рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ, рдкрд┐рдЫрд▓рд╛ рдХреЛрдб рдЕрдм рдХрдВрдкрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИ ред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднрдпрд╛рдирдХ рд╣реИ .

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

рдпрд╣ рднрдпрд╛рдирдХ рд░реВрдк рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред

рддреЛ ... рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ mem::uninitialized, as . рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рд╡рдХрд╛рд▓рдд рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рд╡рд┐рд░реЛрдз рдХрд░рдирд╛, рдХрд╣рдирд╛, рдЭрдЯрдкрдЯ :: рдЕрднреА? :)

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

рдЧреБрд░реБ, 25 рдЬрдирд╡рд░реА, 2018 рдХреЛ рджреЛрдкрд╣рд░ 2:21 рдмрдЬреЗ, рд╕реНрдЯреАрдлрди рдлреНрд▓реЗрд╢рдореИрди <
рд╕реВрдЪрдирд╛рдПрдВ@github.com> рдиреЗ рд▓рд┐рдЦрд╛:

рдпреВрдирд┐рдпрдиреЛрдВ рдХреА рдорджрдж рд╕реЗ, рдкрд┐рдЫрд▓рд╛ рдХреЛрдб рдЕрдм рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ
https://play.rust-lang.org/?gist=be075cf12f63dee3b2e2b65a12a3c854&version=nightly ред
рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднрдпрд╛рдирдХ рд╣реИ .

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

Instant::now рд╕реНрдерд┐рд░рд╛рдВрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рд╡рд╣ рдХрд╛рд░реНрдп рдХреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛? рд╕рдВрдХрд▓рди рдХрд╛ рд╕рдордп?

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

рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг (рдЬреИрд╕реЗ https://gist.github.com/d0ff1de8b6fc15ef1bb6)

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

рдЗрдВрд╕реНрдЯреЗрдВрдЯ :: рдЕрдм рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рд╡рд╣ рдХрд╛рд░реНрдп рдХреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛? рд╕рдВрдХрд▓рди рдХрд╛ рд╕рдордп?

рд▓реЗрдХрд┐рди Instant::zero() рдпрд╛ Instant::min_value() рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИред

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

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

рдХреНрдпрд╛ рд╣рдо рд░рд╕реНрдЯ-рд▓реИрдВрдЧ/рдЖрд░рдПрдлрд╕реАрдПрд╕#2272 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдкреИрдЯрд░реНрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд░реНрджрдирд╛рдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИрдВ, рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рджрд░реНрджрдирд╛рдХ рди рдмрдирд╛рдПрдВред

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

рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡реЗ рдЪреЗрдХ рдЪреЗрдХ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ const рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЕрдиреБрдордд рд╣реИрдВ? рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐ const FOO: Type = { body }; рдФрд░ const FOO: Type = foo(); const fn foo() -> Type { body } рд╕рдорд╛рди рд╣реИрдВ рдЬреЛ рд╡реЗ рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреА рдирд┐рдХрд╛рдп рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ

@sgrif рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪрд┐рдВрддрд╛ рддрд░реНрдХреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИ, рдЬреЛ const fn рд╣реИ рд▓реЗрдХрд┐рди const рдирд╣реАрдВ рд╣реИред
рд╕рд╛рде рд╣реА, рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рд╣рдо рдЖрдЬ рдХреЗ const fn рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ (рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ) рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ? (рдЙрджрд╛рд╣рд░рдг <const T> + const C<T> рдЙрд░реНрдл const C<const T> ?)

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

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

рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ const fn рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдХреНрд░реЗрдЯ рд▓реЗрдЦрдХ рдиреЗ рдХреНрд░реЗрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╕реАрдзреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдХреЗрд╡рд▓ рдпрд╣ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ... https://play.rust-lang.org/?gist=6c0a46ee8299e36202f959908e8189e6&version=stable

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

рдкреЛрд░реНрдЯреЗрдмрд▓ рддрд░реАрдХрд╛ рд╕рд┐рд╕реНрдЯрдордЯрд╛рдЗрдо :: рдЕрдм() рдХреЛ рдХреЙрдиреНрд╕реНрдЯ рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред

(рдпрд╣ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди/рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдХреЙрдиреНрд╕реНрдЯ/рд╕рдВрдХрд▓рди-рд╕рдордп-eval рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ const fn рд╣реЛ рдпрд╛ рдирд╣реАрдВред)

рдпрд╣ рдореБрдЭреЗ рд╢рд╛рдорд┐рд▓_рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдкреВрд░реНрдг рдкрдереЛрдВ рдХреЛ рдордирд╛ рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ

рдпрджрд┐ рдЖрдк рд╕рд┐рд╕реНрдЯрдордЯрд╛рдЗрдо :: рдЕрдм рдХреЙрдиреНрд╕реНрдЯ рдПрдлрдПрди рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рддреЛ const FOO: [u8; SystemTime::now()] = [42; SystemTime::now()]; рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░рдл, рд╢реЗрдбреНрдпреВрд▓рд░ рдФрд░ рдмреГрд╣рд╕реНрдкрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

рдФрд░ рднреА рдмрджрддрд░:

const TIME: SystemTime = SystemTime::now();

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

рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкрд╛рдЧрд▓рдкрди рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк foo.clone() рдХреЛ рдмрд╣реБрдд рд╣реА рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЦрд░рд╛рдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд▓рдВрдмрд╛рдИ 3 рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рд╕реЗ рдХреНрд▓реЛрди рдЗрдВрдк рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рд▓рдВрдмрд╛рдИ 4 рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рд▓рд┐рдП рднрд▓реЗ рд╣реА рд╣рдордиреЗ рдордирдорд╛рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реЛ, рд╣рдо рдХрднреА рднреА SystemTime::new() рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рд╣рдо рдХрднреА рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдВрдЧреЗред

@ SonyEx2 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рдереЛрдбрд╝рд╛ рд╣рдЯрдХрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдРрд╕рд╛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдЬ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХрд╛рд░реНрдЧреЛ build.rs рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХрд╛рд░реНрдЧреЛ рдмреБрдХ рдореЗрдВ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрдЦреЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреЗ рдХреЗрд╕ рд╕реНрдЯрдбреА рдкрд░ рдЕрдиреБрднрд╛рдЧред

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

рдХреГрдкрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ const fn рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВ; рд╣рдореЗрдВ рдЧреИрд░-рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ/рдЖрд╕рд╛рди рддрд░реАрдХреЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

https://github.com/rust-lang/rust/issues/24111#issuecomment -376352844 рдЬреИрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╡рд┐рд╖реНрдп рдХреА рд╡рд┐рдзрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд╛рджреЗ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЛрдХрдиред рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХрдореЛрдмреЗрд╢ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХреЛрдб рд╣реИрдВ рдЬреЛ рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рд░рд╕реНрдЯ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рдкреЛрд░реНрдЯреЗрдмрд▓ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

@ oli-obk рдХреА рдУрд░ рд╕реЗ @rfcbot fcp рдорд░реНрдЬ - рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИ

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

  • [рдПрдХреНрд╕] @ рдПрдЯреНрдпреВрд░реЙрди
  • [рдПрдХреНрд╕] @ рдХреНрд░реИрдорд░реНрдЯрдЬ
  • [ ] @eddyb
  • [x] @joshtriplett
  • [ ] @nikomatsakis
  • [рдПрдХреНрд╕] @ рдПрдирдЖрд░рд╕реА
  • [ ] @pkfelix
  • [x] @scottmcm
  • [x] @ рдирд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛

рдЪрд┐рдВрддрд╛рдУрдВ:

  • рдбрд┐рдЬрд╝рд╛рдЗрди (https://github.com/rust-lang/rust/issues/24111#issuecomment-376829588)
  • рд╕рдорд╛рдирд╛рдВрддрд░-рдХреЙрдиреНрд╕реНрдЯ-рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди https://github.com/rust-lang/rust/issues/24111#issuecomment -377133537 рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛
  • рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (https://github.com/rust-lang/rust/issues/24111#issuecomment-376652507)
  • рд░рдирдЯрд╛рдЗрдо-рдкреЙрдЗрдВрдЯрд░-рдПрдбреНрд░реЗрд╕ (https://github.com/rust-lang/rust/issues/24111#issuecomment-386745312)

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

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

@rfcbot рдЪрд┐рдВрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛

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

@rfcbot рдЪрд┐рдВрддрд╛ рд╕рдм рдХреБрдЫ-const

рд╣рдо рдПрдХ рд╕реА ++ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рд░ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдк const рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ oli-obk рдХреЗ рд╕рд╛рде рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢:

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

  2. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдЬ const рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЖрдЬ рдХреА рдорд┐рд░реА рд╣рд░ рдЪреАрдЬ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

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

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

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

@rfcbot рдЪрд┐рдВрддрд╛ рд╕рдорд╛рдирд╛рдВрддрд░-рдХреЙрдиреНрд╕реНрдЯ-рд▓рдХреНрд╖рдг

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рддреБрд░рдВрдд рдЯреЛрдХрд░реЗ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╕рд╛рдордиреЗ рдореЗрдВ Const рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛ рджреЗрдЧрд╛: ConstDefault , ConstFrom , ConstInto , ConstClone , ConstTryFrom , ConstTryInto , рдЖрджрд┐ рдФрд░ ConstIndex рдФрд░ рдРрд╕реЗ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛ред рдпрд╣ рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдЬ Try рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ TryFrom рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд╕реНрдХреЗрдЪ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред (рдХреНрдпрд╛ рд╡рд╣ https://github.com/rust-lang/rfcs/pull/2237 рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛)ред

( @nrc : рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреЙрдЯ рдиреЗ рдХреЗрд╡рд▓ рдЖрдкрдХреА рдЪрд┐рдВрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИ)

рд╕рдорд╛рдирд╛рдВрддрд░-рдХреЙрдиреНрд╕реНрдЯ-рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдХрд╛рд▓реНрдкрдирд┐рдХ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЙрдиреНрд╕реНрдЯ-рдСрд▓-рдж-рдерд┐рдВрдЧреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддреБрдЪреНрдЫ рд╕рдорд╛рдзрд╛рди рд╣реИред рд╡реЗ рдмрд╕ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

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

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, ConstDefault рдмрд┐рдирд╛ const fn рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдмрд╛рдХреА рдХреЗ рдЙрджрд╛рд╣рд░рдг ( ConstFrom , ConstInto , ConstClone , ConstTryFrom , ConstTryInto ) рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ @oli-obk рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд const рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

( ConstDefault рдПрдХ рд╕рдВрдмрджреНрдз рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ fn рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрдиреНрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдпрд╣ рд╢рдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред)

@scottmcm const fn рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЖрдЬ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ (рдУрд╣ @solson рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ)ред

@eddyb рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд┐рдЪрд╛рд░: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ const fn рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп const impl рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдпрд╛ рд╣реИ? (рдпреЗ рджреЛрдиреЛрдВ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рднреА рдирд╣реАрдВ рд╣реИрдВред)

@whitequark https://github.com/rust-lang/rfcs/pull/2237 const impl рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ fn const fn рддрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред impl , рдФрд░ рд╕рднреА const рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде impl рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ T: const Trait рдмрд╛рдЙрдВрдб рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, const рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реАред

@rfcbot рдЪрд┐рдВрддрд╛ рдбрд┐рдЬрд╛рдЗрди

рд╣рдордиреЗ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ const fn рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ:

  • рд╡рд░реНрддрдорд╛рди рд╡рд╛рд▓рд╛ trait s рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП const fn рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ impl s рдЬреЛ const fn рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рджреЗрдЦреЗрдВ https://github. com/rust-lang/rfcs/pull/2237 рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП)
  • рд╕рдВрдмрдВрдзрд┐рдд рд░реВрдк рд╕реЗ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ T: Trait рдмрд╛рдзреНрдп const fn рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдорд╛рдирддрдГ рдХреЗрд╡рд▓ рдЬрдм рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Option::map рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕рдорд╛рди рдХрд╛рдо рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рд╕реАрдЯреАрдПрдлрдИ рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯ-рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
  • рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдЕрдореВрд░реНрдд рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдкреВрд░реЗ рдХреНрд░реЗрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдЬрдЧрд╣ const fn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ( libcore рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ)

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

  • рдХрд┐рд╕реА рднреА рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдорд┐рд░реА рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдХреНрд▓реАрдирд░ рдХреЛрдбрдмреЗрд╕, рд╢рд╛рдорд┐рд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░рдВрддрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

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

  • рдЙрдкрд░реЛрдХреНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рддрд┐ рдлрд╝рдВрдХреНрд╢рди/рдЗрдореНрдкреНрд▓рд╛/рдореЙрдбреНрдпреВрд▓/рдЖрджрд┐ рдореЗрдВ рдСрдкреНрдЯ рдЗрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ред

    • рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рдХрд╛рдп (рдХрдо рд╕реЗ рдХрдо const fn рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗ

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдХреБрдЫ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╕реЗрд╡рд░ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдирд╣реАрдВ рд╣реЛрдирд╛

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

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

@leoschwarz рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдЯреЛ рд▓рдХреНрд╖рдгреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯреВрдЯ-рдлреВрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╕реНрдЯ-рд╕реЗрд╡рд░рд╡рд░ рдХреЛ рдХрд╛рд░реНрдЧреЛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред

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

@nrc рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╕рдм рдХреБрдЫ-рдХреЙрдиреНрд╕реНрдЯ" рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рдВ, рд╣рдо рдЪреАрдЬреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВрдЧреЗ const ред

рдмрд╕ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реЛ
рд╕реНрдерд┐рд░рд╛рдВрдХ рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдпрд╛ рд╕рдВрдХрд▓рди рд╕рдордп рдЕрдзрд┐рдХ рд╣реИ
рдЬрд░реВрд░реАред рдХрднреА-рдХрднреА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдкрд░реНрдпрд╛рдкреНрдд рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ
рд╕рдВрдХрд▓рди рд╕рдордп!

рдмреБрдз, рдорд╛рд░реНрдЪ 28, 2018 рдЕрдкрд░рд╛рд╣реНрди 2:49 рдмрдЬреЗ, рдЬреЛрд╢ рдЯреНрд░рд┐рдкрд▓реЗрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@nrc https://github.com/nrc рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╕рдм рдХреБрдЫ-рдХреЙрдиреНрд╕реНрдЯ" рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╣реАрдВ
рдПрдХ рдореБрджреНрджрд╛ред рд╣рд╛рдВ, рд╣рдо рдЪреАрдЬреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВрдЧреЗред

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

рдореВрд▓реНрдпрд╛рдВрдХрди рд╕рдордп рд╕реАрдорд╛

рд╡рд╣ рд╕реАрдорд╛ рдЬрд▓реНрдж рд╣реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред

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

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

@rfcbot рдиреЗ рд╕рдорд╛рдВрддрд░-рд╕реНрдерд┐рд░рд╛рдВрдХ-рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛

рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВ!

рд╡рд╣ рд╕реАрдорд╛ рдЬрд▓реНрдж рд╣реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред

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

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЛ рдЪреБрдкрдЪрд╛рдк рджреВрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВред

рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЙрдирдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд░рдПрдлрд╕реА рдмрдирд╛рддреЗ рд╣реИрдВред рдЕрднреА рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ "рджреБрд╖реНрдкреНрд░рднрд╛рд╡" рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЙрдиреНрд╕реНрдЯ fn . рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИ

рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рдмрд╕ рдПрдХ рд╕реЗрд╡рд░ рдЪреЗрддрд╛рд╡рдиреА" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ
рд╕реНрдерд┐рд░рддрд╛ рдпрджрд┐ рдПрдХ рдЯреЛрдХрд░рд╛ рд▓реЗрдЦрдХ рдЬрд┐рд╕рдиреЗ рдХрднреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛, рджреЗрдЦрддрд╛ рд╣реИ
"рдЪреЗрддрд╛рд╡рдиреА: рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди foo() in . рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛ рджреЗрддрд╛ рд╣реИ
рдХреЙрдиреНрд╕реНрдЯ рд╕рдВрджрд░реНрдн, рдЬреЛ рдкрд╣рд▓реЗ рд╕рдВрднрд╡ рдерд╛", рдХреНрдпрд╛ рд╡реЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ a . рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ
рдЧреИрд░ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдФрд░ рдЗрд╕реЗ рдЪреБрдк? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ
рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рд░реНрдп рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЬреНрдпрд╛рджрд╛ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рд▓реЛрдЧ рдХрд░реЗрдВ
рд╡рд╣ (рдПрдХ рдмрд╛рд░ const_fn рд╕реНрдерд┐рд░ рд╣реИ)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдЙрдЯ-рдСрдл-рдж-рдмреНрд▓реВ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рд╕рд╣реА рд╣реИрдВ
рдЗрд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛?

рдЧреБрд░реБ, 29 рдорд╛рд░реНрдЪ, 2018 рдХреЛ рд╕реБрдмрд╣ 4:36 рдмрдЬреЗ, рдУрд▓рд┐рд╡рд░ рд╢реНрдирд╛рдЗрдбрд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ const fn рдХрдИ рдПрдкреАрдЖрдИ рдХреЛ рдкрд░реЗрд╢рд╛рди рдФрд░ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдирдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реЗ рдореБрджреНрджреЗ рд╣реИрдВ:

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

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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХреНрд░реЗрдЯ рд▓реЗрд╡рд▓ рдХреЙрдиреНрдлрд┐рдЧрд░ рдлреНрд▓реИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреНрд░реЗрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, #![infer_const_fn] рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ, рдФрд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯ-рдЗрди рд░рд╣реЗрдВред рдпрджрд┐ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯреЛрдХрд░рд╛ рдореЗрдВ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ рд╡рд╣рд╛рдВ рдХреЙрдиреНрд╕реНрдЯ рдПрдлрдПрди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбреЙрдХреНрд╕ рдореЗрдВ рднреА рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ (рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рднреА рдХреЙрдиреНрд╕реНрдЯ рдПрдлрдПрди рд╣реЛрдВ), рдпрджрд┐ рдХреЛрдИ рдЯреЛрдХрд░рд╛ рд▓реЗрдЦрдХ рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддреЛ рд╡реЗ рд╕рддрд░реНрдХ рд░рд╣рдиреЗ рдХреА рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХрд░рддреЗ рд╣реИрдВ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╢рд╛рдпрдж рдЬрдВрдЧ-рд╕реЗрд╡рд░ рдХреЛ рднреА рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдХреЙрдиреНрд╕реНрдЯ fn рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╕рд╛рдЗрдб fn рд░рдЦреЗрдВред

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

рдпрд╣ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

30 рдорд╛рд░реНрдЪ 2018 рдХреЛ 2:43:06 рдкреВрд░реНрд╡рд╛рд╣реНрди рдЬреАрдПрдордЯреА+08:00, "рд╕реЛрдиреА рдПрд▓ред" рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЗрд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдХреЙрдиреНрд╕реНрдЯ fn рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╕рд╛рдЗрдб fn рд░рдЦреЗрдВред

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

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

--
K-9 рдореЗрд▓ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ Android рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛ред рдореЗрд░реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЛ рдорд╛рдлрд╝ рдХрд░реЛред

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

@whitequark рдореИрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ рдЬреЛ рдмрд╕ рдХрд░рддрд╛ рд╣реИ ("рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдлреЗрдВрдХ рджреЗрдВ"), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ oli-obk рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд┐рди рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рдореИрдВ рдерд╛, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрддрд╛ рд╣реИ

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

    • рдЖрдк рдХрд┐рд╕ рдмрд╛рд╣рд░реА рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЗ рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдСрди-рдбрд┐рдорд╛рдВрдб рд╕рдВрдХрд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд▓рдЧрд╛рддрд╛рд░ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдмрд╕ рдЗрд╕рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рдкрдЯрд░реА рд╕реЗ рдирд╣реАрдВ рдЙрддрд░рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рдлреЗрдВрдХрдиреЗ рд╕реЗ рдХреЛрдб рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд▓рд┐рдЦреЗрдВ рдФрд░ рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реЗрдВ) рдЕрдЧрд░ рдЗрд╕реЗ рдХреЙрдиреНрд╕реНрдЯ рдпрд╛ рдЧреИрд░ рдХреЙрдиреНрд╕реНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо (рд╢рд╛рдпрдж?) рдЗрд╕ рддрд░рд╣ рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА @ рдУрд▓реА-рдУрдмреАрдХреЗ рдорд┐рд╕рдкреЛрдХ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХреНрд░реЗрдЯ рд▓реЗрд╡рд▓ рдХреЙрдиреНрдлрд┐рдЧ рдлреНрд▓реИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреНрд░реЗрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реИ, https://github.com/rust-lang/rust/issues/24111#issuecomment -376829588 рд╕реЗред
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдХреЛрдкреНрдб "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝реНрд▓реИрдЧ" рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХ-рдмрд╛рд░реАрдХ рд╕реНрдХреЛрдк IMO рдЪреБрдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

https://github.com/rust-lang/rust/issues/24111#issuecomment -376829588 рдореЗрдВ рдореИрдВрдиреЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рд╕рдВрдкреВрд░реНрдг рдкреБрд╕реНрддрдХрд╛рд▓рдп "рд╕рднреА const fn " рдпрд╛ "рд╕рднреА side fn рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред ".
рдпрджрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛рдУрдВ рдкрд░ рдирд╣реАрдВ рдерд╛, рдмрд▓реНрдХрд┐ рд╕реНрдХреЛрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, "рд╢рд░реАрд░ рд╕реЗ рдЕрдиреБрдорд╛рди" рдХреЗ рдмрд┐рдирд╛, рдЖрдкрдХреЛ рдСрдкреНрдЯ-рдЗрди side fn рдХреЗ рд▓рд┐рдП рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рднреА рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдк рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдШрд░реНрд╖рдг рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗ рд░рд╣реЗ рд╣реИрдВред

рдХреЗрдВрдЯрди рд╡рд░реНрджрд╛ рдХреЗ "рд╕рд┐рдВрдЧрд▓рдЯрдиреНрд╕ рдХреЛ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ" рдХреА рдзрд╛рд░рд╛ 3.3 рдпрд╣рд╛рдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓рдЧрддреА рд╣реИ (рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдкреВрд░реА рдмрд╛рдд рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реИ)ред

рдбреАрдмрдЧ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

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

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

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

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

"рд╣рдо рдПрдХ рд╕рдорд╛рдзрд╛рди [рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП] рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдмрдпрд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рднрд╡рд┐рд╖реНрдп рдПрдкреАрдЖрдИ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдХрд┐ рдХреЙрдиреНрд╕ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЫрдкрд╛рдИ рд╣реИред рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд┐рдВрдЯ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ (рдмрд╕ рд╣рдо рдкреНрд░рд┐рдВрдЯ/рдбреАрдмрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рдХреЛрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ) рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рдХреЙрдиреНрд╕реНрдЯ рдореВрд▓реНрдпрд╛рдВрдХрдирдХрд░реНрддрд╛ рдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрдкреНрдЯ рдЗрди рд╣реЛрдЧрд╛, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрд╕ eval рдореЗрдВ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди/рдлрд╝рд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ)ред рд╕рдЯреАрдХ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ RFC рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ const fn рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдСрд░реНрдереЛрдЧреЛрдирд▓ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреНрдпрд╛ const impl Trait рдФрд░ T: const Trait рдХреЗ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреБрдХрд╕рд╛рди рд╣реИрдВ?

const рдХреЗ рдЖрд╕рдкрд╛рд╕ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЫрд┐рдбрд╝рдХрд╛рд╡ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдл рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж where <T as Trait>::some_method is const ( is рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреАрд╡рд░реНрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рдлрд┐рд░ рд╕реЗ, рдпрд╣ const fn рдХреЗ рд▓рд┐рдП рдУрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИред

[u8; SizeOf<T>::Output]

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

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, const fns рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ const рдмрдирд╛рдПрдВ: рдХреБрдЫ рднреА const fn рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ рдерд╛ред

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

рдЪреВрдВрдХрд┐ рдорд╛рдореВрд▓реА рд╡рд┐рд╡рд░рдг рднреА рдЕрдкрдирд╛ рдЕрд░реНрде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм const fn рдкреЙрдЗрдВрдЯрд░реНрд╕, const рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реАрдорд╛, ... рдЬреИрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХреЗрд╡рд▓ const fn рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЛрдИ рдорд╛рдореВрд▓реА рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, const fns рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ const рдмрдирд╛рдПрдВ: рдХреБрдЫ рднреА const fn рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдиреЗрд░рд┐рдХ рдерд╛ред

рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рд╣рдо рдпрд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╕ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдорд╛рдореВрд▓реА рд╡рд┐рд╡рд░рдг const eval рдХреЛ рд░рдирдЯрд╛рдЗрдо eval рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рд╕реМрджрд╛ рдирд╣реАрдВ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред

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

рддреЛ рдЖрдк рдХреБрдЫ let s рдЬреЛрдбрд╝реЗрдВред

рдЕрдм рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рдиреЗ рдореЗрдВ 20 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддрд╛ рд╣реИред

@ SonyEx2 рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ ( $N рдореЗрдВ [u8; $N] ) рд╣рдореЗрд╢рд╛ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╣ рд╡реНрдпрдВрдЬрдХ рдЧреИрд░- const рд╣реИ, рддреЛ рд╕рдВрдХрд▓рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, let x = foo() рд░рдирдЯрд╛рдЗрдо рдкрд░ foo $ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЪрд╛рд╣реЗ рд╡рд╣ const fn рд╣реЛ рдпрд╛ рдирд╣реАрдВ (рдореЙрдбреНрдпреВрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреА рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдФрд░ рдирд┐рд░рдВрддрд░ рдкреНрд░рд╕рд╛рд░, рд▓реЗрдХрд┐рди рдпрд╣ const fn рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИ ) рдпрджрд┐ рдЖрдк рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдХреБрдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ const рдЖрдЗрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдм рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рдиреЗ рдореЗрдВ 20 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддрд╛ рд╣реИред

рдРрд╕рд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ const fn рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдпрджрд┐ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди const fn рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рдЕрдВрджрд░ let рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдХреЛрдб рд╕рдВрдХрд▓рди рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: @SimonSapin рдиреЗ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рд░рд╛рдпрд╛: D

рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдХреЙрдиреНрд╕реНрдЯ fn рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред

рдЕрд░реНрдерд╛рддреН,

const fn random() -> i32 {
    4
}

fn thing() -> i32 {
    let i = random(); // the RHS of this binding is evaluated at compile-time, there is no call to random at runtime.
}

рдЕрдм рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ const fn рд╣реИ рдЬреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

fn thing() {
    let x = const_fn_with_1_arg(const_fn_returns_value());
}

рдЗрд╕рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ const_fn_with_1_arg рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

fn thing() {
    let x = const_fn_returns_value();
    let y = const_fn_with_1_arg(x); // suddenly your program takes 20x longer to run, and compiles 20x faster.
}

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

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

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

рдХреНрдпрд╛ рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рднрд╡рд┐рд╖реНрдп рдХреЗ рдбрд┐рдЬрд╛рдЗрди рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди "рдиреНрдпреВрдирддрдо рдХрд╛рд╕реНрдЯ рдПрдлрдПрди" рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИрдВ?

@nrc

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ rfcbot рдиреЗ рдЖрдкрдХреА everything-const рдЪрд┐рдВрддрд╛ рджрд░реНрдЬ рдирд╣реАрдВ рдХреА рд╣реИ (рдкреНрд░рддрд┐ рдЯрд┐рдкреНрдкрдгреА рдПрдХ рдЪрд┐рдВрддрд╛!) рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдЪрд┐рдВрддрд╛ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА (TL; DR: рд╡рд░реНрддрдорд╛рди рдиреНрдпреВрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡) рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ const рдХреАрд╡рд░реНрдб рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдкреНрд░рд╛рдердорд┐рдХрддрд╛/рдирддреАрдЬреЗ рдХреА рдЪрд┐рдВрддрд╛ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдореИрдВ рдЙрди рдмрд╛рддреЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рди рдкрд░ рд╣рдордиреЗ рд╣рд░ рд╕рдордп рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:

  • const fn foo(x: i32) -> i32 { body } const FOO: i32 = body; рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдорд╛рдореВрд▓реА рдЬреЛрдбрд╝ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧрд┐рд░рд╛рд╡рдЯ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЫреЛрдЯрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ const fn рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЕрд╕реНрд╡реАрдХрд░рдг: рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ @ рдУрд▓реА-рдУрдмреАрдХреЗ рд╕реЗ рд╕реБрдирд╛ рд╣реИ, рдореИрдВрдиреЗ рдЧрд▓рдд рд╕реБрдирд╛ рд╣реЛрдЧрд╛)ред

  • рдПрдореНрдмреЗрдбреЗрдб рд╡рд░реНрдХрд┐рдВрдЧ рдЧреНрд░реБрдк рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдЪрд╛рд╣рддрд╛ рд╣реИ :)

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ const fn рдХреЛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЙрдк рдЗрд╖реНрдЯрддрдо API рдХрд╛ рдкреНрд░рд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ const fns рдХреА рдХрдореА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ATOMIC_USIZE_INIT рдЬреИрд╕реА рддрд░рдХреАрдмреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдЪрд▓реЛ рдореИрдВ = рдпрд╛рджреГрдЪреНрдЫрд┐рдХ (); // рдЗрд╕ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рдЖрд░рдПрдЪрдПрд╕ рдХрд╛ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рдирдЯрд╛рдЗрдо рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░ рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

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

рддреЛ const fn рдХреЗрд╡рд▓ рдПрдХ рдХреЙрдиреНрд╕ рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдиреНрдпрдерд╛ рдмреЗрдХрд╛рд░ рд╣реИ?

рдлрд┐рд░ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдФрд░ рдиреЙрди-рдХрд╛рд╕реНрдЯ fn рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛?

рджреЗрдЦреЗрдВ рдХрд┐ рд╢рдмреНрджрд╛рд░реНрде рдПрдХ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рдВрдХрд▓рди-рд╕рдордп рдФрд░ рд░рдирдЯрд╛рдЗрдо рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред

рддреЛ const fn рдХреЗрд╡рд▓ рдПрдХ рдХреЙрдиреНрд╕ рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдиреНрдпрдерд╛ рдмреЗрдХрд╛рд░ рд╣реИ?

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

рдлрд┐рд░ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдФрд░ рдиреЙрди-рдХрд╛рд╕реНрдЯ fn рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛?

const fn рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЗрд░рдгрд╛ рдЗрд╕ рдЕрд▓рдЧрд╛рд╡ рдХреЛ рди рд░рдЦрдирд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: AtomicUsize::new() + AtomicUsize::const_new() , рднрд▓реЗ рд╣реА рджреЛрдиреЛрдВ рдирд┐рдХрд╛рдп рд╕рдорд╛рди рд╣реЛрдВред

рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ libcore рдХрд╛ 90% рджреЛ рдмрд╛рд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдПрдХ рдмрд╛рд░ const eval рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рдмрд╛рд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП? рд╡рд╣реА рд╢рд╛рдпрдж рдХрдИ рдЕрдиреНрдп рдмрдХреНрд╕реЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ AtomicUsize::Of<value> ред рдФрд░ рд╣рд╛рдБ, рдореБрдЭреЗ рдЕрдЬреНрдЮрд╛рдд рдЧрд╛рд░рдВрдЯрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╕рдм рдХреБрдЫ рджреЛ рдмрд╛рд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред (рд╕рд╛рде рд╣реА рдпрд╣ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреБрдЫ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред)

рдХреНрдпрд╛ рдЖрдк рдХрд╛рд╕реНрдЯ рдореВрд▓реНрдпрд╛рдВрдХрди (рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдХреЙрдиреНрд╕ рдПрдлрдПрди рдХреЗ рд▓рд┐рдП) рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрд╕ рдПрдлрдПрди рдореЗрдВ рдХреЙрдиреНрд╕ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ? рдЖрджрд┐ред

@ SonyEx2 рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐ const fn рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдЧреИрд░- const рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕рдВрдХрд▓рди рд╕рдордп рддреНрд░реБрдЯрд┐ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:

fn thing() {
    const x: u32 = const_fn_returns_value();
    const y: u32 = const_fn_with_1_arg(x);
}

(рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдкрд░ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЪрд▓ рд░рд╣рд╛ рд╣реИ)

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

рдЕрдЬреНрдЮрд╛рдд рдЧрд╛рд░рдВрдЯреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВред

рдХреНрдпрд╛ рдЖрдк рдЗрддрдиреЗ рджрдпрд╛рд▓реБ рд╣реЛрдВрдЧреЗ рдФрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ?

рдХреНрдпрд╛ рдЖрдк рдХрд╛рд╕реНрдЯ рдореВрд▓реНрдпрд╛рдВрдХрди (рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдХреЙрдиреНрд╕ рдПрдлрдПрди рдХреЗ рд▓рд┐рдП) рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрд╕ рдПрдлрдПрди рдореЗрдВ рдХреЙрдиреНрд╕ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ? рдЖрджрд┐ред

const fn рдХрд╛ рдмрд┐рдВрджреБ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЪреАрдЬреЛрдВ рдХрд╛ рдЬрд╛рджреБрдИ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЪреАрдЬреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИред

рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдЪреАрдЬреЛрдВ рдХрд╛ рдЬрд╛рджреБрдИ рдореВрд▓реНрдпрд╛рдВрдХрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ rustc llvm рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛ред рддреЛ ... рдареАрдХ рдЙрд╕реА рд╕рдордп рдЬрдм рдЗрд╕реЗ ocaml рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЬрдВрдЧ рд╕реЗ рдирд┐рд░рдВрддрд░ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

const fn рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд┐рд░рдВрддрд░ рдкреНрд░рд╕рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдерд╛ рдЬрд┐рд╕реЗ рдЧрд▓рддреА рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ llvm рдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЖрдкрдиреЗ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдкреНрд░рдЪрд╛рд░ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ llvm рдРрд╕рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред рдпрд╣ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ const рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред llvm рдХреЗ рд▓рд┐рдП const fn рдФрд░ fn рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред

рд╕рд╛рде рд╣реА рдЬрдм рдЖрдк const рдХреЛ fn рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ rustc рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╡реИрдз рдХреЙрдиреНрд╕реНрдЯ fn рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ)ред рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрднреА рд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред

рдореИрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЬрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рдПрд▓рдПрд▓рд╡реАрдПрдо рдпрд╣рд╛рдВ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред

@ SonyEx2

рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдХреЙрдиреНрд╕реНрдЯ fn рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред

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

рдРрд╕реЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рдирдХреЗ рд▓рд┐рдП const fn рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЗ рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ рд╣реИрдВред рдЖрдк [i32; 15] рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк [i32; 3+4] рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ 7 рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдк [i32; read_something_from_network()] рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдХреИрд╕реЗ рд╣реЛрдЧрд╛? рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ [i32; foo(15)] рдЕрдЧрд░ foo рд╣реИ const fn , рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдФрд░ рдХрдо рдкрд╕рдВрдж рд╣реИред

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

рдХреГрдкрдпрд╛ рдЖрд░рдПрдлрд╕реА рднреА рдкрдврд╝реЗрдВ: https://github.com/rust-lang/rfcs/blob/master/text/0911-const-fn.md

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

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

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

рд╣рдореНрдо, рд╣рд╛рдБ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ ...

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

2 рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрддрддрд╛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рдЧреИрд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИред рд╕рд╛рдЗрдб-рдЯреНрд░реИрдХ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рддреЛ ... рдЪрд░реНрдЪрд╛ рдорд░ рдЧрдИ рд╣реИред рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдХрд░реЗрдВ:

rfcbot рдЯрд┐рдкреНрдкрдгреА рд╣реИ https://github.com/rust-lang/rust/issues/24111#issuecomment -376649804

рд╡рд░реНрддрдорд╛рди рдЪрд┐рдВрддрд╛рдПрдВ

  • рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ 2018 рдХреА рд░рд┐рд▓реАрдЬрд╝ рдиреЗ рд╣рдорд╛рд░реА рдкреНрд▓реЗрдЯреЛрдВ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ
  • рд╣рдо рд╕рдм рдХреБрдЫ const рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ
  • рдХреНрдпрд╛ рдпрд╣ рд╡рд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдЪреАрдЬрд╝ + рдлреЙрд▓рдЖрдЙрдЯ рдЪрд┐рдВрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ const fn рд░рд╛рдд рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЕрдиреНрдп рджреЛ рдмрд┐рдВрджреБ рдирд┐рдХрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред @eddyb рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди (https://github.com/rust-lang/rust/issues/24111#issuecomment-376829588 рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛) const fn рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ #[const] рд╣реИ

#[const]
mod foo {
    pub fn square(i: i32) -> i32 { i * i }
}
#[const]
fn bar(s: &str) -> &str i{ s }
#[const]
fn boo() -> fn(u32) -> u32 { meh }
fn meh(u: u32) -> u32 { u + 1 }

рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдЙрд╕рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП #[const] рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рдлрд╝рдВрдХреНрд╢рди #[const] fn рд╣реИред #[const] fn рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА #[const] fn рд╣реИред

рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдХреНрд░реЗрдЯ рдХреЗрд╡рд▓ #![const] рдХреЛ lib.rs рдореЗрдВ рдердкреНрдкрдбрд╝ рдорд╛рд░ рджреЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЙрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдПрдВ (рд▓реЗрдХрд┐рди рд╡реЗ рдореБрджреНрджреЗ рднреА рдЕрдХреНрд╕рд░ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВ const fn ):

  • рдСрдкреНрдЯ-рдЖрдЙрдЯ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреБрдЫ рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдиреНрдпрдерд╛ #[const] рдореЙрдбреНрдпреВрд▓ рдЯреНрд░реА рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  • рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ #[const] fn рддрд░реНрдХ/рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ #[const] fn рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

    • рдлрд┐рд░ рд╕реЗ, рдСрдкреНрдЯ-рдЖрдЙрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛

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

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХреБрдЫ рдЬреНрдЮрд╛рдд рдкреНрд░рд╢рдВрд╕рдиреАрдп рджрд┐рд╢рд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдерд╛ред
рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд "рдПрдХреНрд╕рдкреЛрдЬрд╝ рдмреЙрдбреА рдСрдлрд╝ рдлрдВрдХреНрд╢рди" рд╡рд┐рд╢реЗрд╖рддрд╛ рдереА, рдЬреЛ const рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдБ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрдЪреНрдЫреА рднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ) @solson рдореБрдЭреЗ рджрд┐рдЦрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреИрд╕реЗ рд▓реАрди рдХреЗ рдкрд╛рд╕ @pattern рдЬреИрд╕реЗ рдЧреБрдг рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЪреАрдЬреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

@ oli-obk рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ unsafe рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рде рд╣реА, async рд╡рд░реНрддрдорд╛рди рдореЗрдВ рднреА рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо try fn рджрд┐рдП рдЧрдП try { .. } рдмреНрд▓реЙрдХ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдЪреАрдЬ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕реБрд╕рдВрдЧрдд рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкреНрд░рднрд╛рд╡-рдЬреИрд╕реА wrt рд╣реЛред рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред #[target_feature(..)] рд╕рдордЧреНрд░ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рдПрдХ рдЭреБрд░реНрд░рд┐рдпрд╛рдВ рдбрд╛рд▓рддрд╛ рд╣реИред

рдкреБрдирд╢реНрдЪ: рдЖрдк const mod { .. } рдХрд╛ рдЙрдкрдпреЛрдЧ const mod { .. } #![const] рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ try mod , async mod , unsafe mod рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рд╣рдореЗрд╢рд╛ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдУрд░ рдЭреБрдХрддрд╛ рд░рд╣реВрдВрдЧрд╛ред

struct SizeOf<T>;

impl<T> SizeOf<T> {
    const intrisic Result: usize;
}

рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕реАрдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдП рдкреНрд░рдХрд╛рд░ рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдФрд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

fn sq(v: i32) -> i32 {
    Square<v>::Result
}

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдкреНрд░рдХрд╛рд░, рдХрд╛рд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ рдпрд╛ рддреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдпрд╛ рд░рдирдЯрд╛рдЗрдо рдкрд░ред

рддреЛ ... рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╡рд╣рд╛рдВ рд╕рдВрднрд╡рддрдГ рдмреЗрд╣рддрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдЬреЛ рд╣реИ

  1. рддрд░реНрдХ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди
  2. рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдЕрдиреБрдореЗрдп рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдЕрдиреБрдХреВрд▓ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдВ
  3. рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕реНрдерд┐рд░ рдХреЛрдб рдореЗрдВ рдмрдбрд╝реА рд╕рдлрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЦреНрдп рд╢рд┐рдХрд╛рдпрдд рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИред
  4. рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЕрднреА рддрдХ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд┐рдХрд╛рдп рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  5. рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдПрдХрдорд╛рддреНрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдФрд░ рдмрд╣реБ-рд╡рд░реНрд╖ рдХреА рдХреЛрд╢рд┐рд╢ рдЕрд╡рдзрд┐ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд┐рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  6. рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрдЬрд╛рдп, рдХреЛрдб рдХреЛ рд░рдирдЯрд╛рдЗрдо рдФрд░ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рдХреЛрдб рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

рдФрд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдирд┐рд░реНрднрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рджреВрд░ рд╣реИ , рдЬрдмрдХрд┐ рд░рдирдЯрд╛рдЗрдо рдкрд░ const fn рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрдЬ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@ рдУрд▓реА-рдУрдмреАрдХреЗ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореИрдВ const fn рдХреЛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдмрд┐рдирд╛ рдпрд╣ рдЬрд╛рдиреЗ рдХрд┐ рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ const fn рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ impl s рдореЗрдВ рд╣реИрдВред

@eddyb рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирдИ рдХреЙрдиреНрд╕ рд╕реАрдорд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓реЗрдЦрди рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреА рдЪрд╛рд╣рд┐рдПред :)

@Centril рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ (рдЪрд╛рд╣реЗ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдпрд╛ рдирд╣реАрдВ) рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реЛрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреА рд╣реЛрдЧреАред
рд╡рд░реНрддрдорд╛рди const fn рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд░рд▓ рдФрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдирд╣реАрдВ ред

рдЬреЗрдиреЗрд░рд┐рдХ рдХреЙрдиреНрд╕ + рдХреЙрдиреНрд╕реНрдЯ рдЬреЗрдирд░рд┐рдХ:

intrinsic const SizeOf<T>: usize;

const Pow<const V: usize>: usize = V*V;

@eddyb рдореЗрд░реЗ рдорди рдореЗрдВ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ рдЬреЛ рдХреЙрдиреНрд╕реНрдЯ fn рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ред

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

@rfcbot рдЪрд┐рдВрддрд╛ рд░рдирдЯрд╛рдЗрдо-рдкреЙрдЗрдВрдЯрд░-рдкрддреЗ

рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдкрд░, рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрдард╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо const fn рд╕реЗ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдХрдЪреНрдЪреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рдкрддреЛрдВ рдХреЛ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж рдУрд░реЗрдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордиреЗ рдЖрдИ: https://github.com/rust- рд▓реИрдВрдЧ/рд░рд╕реНрдЯ/рдЗрд╢реНрдпреВ/49146#рдЗрд╢реНрдпреВ рдХрдореЗрдВрдЯ -386727325. рд╡рд╣рд╛рдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдХрдЪреНрдЪреЗ рд╕реВрдЪрдХ рд╕рдВрдЪрд╛рд▓рди unsafe (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рдХреЛ рдЖрдЬ рднреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИ) рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред

@eddyb рдХреНрдпрд╛ E0018 const fn s рдкрд░ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рд╕реА рд╡реЗ рдпрд╣ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╕рднреА 0 рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рд╛рдкреЗрдХреНрд╖ (рдпрд╛рдиреА рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░) рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЯреНрд░реИрдХ рди рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдВрдЧ рд╕реА рдХреЗ рдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

@sgrif рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рджреВрд░ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИрдВ - рдорд┐рд░реА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдореВрд▓реНрдп рдХреЛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЕрдореВрд░реНрдд рд╕реНрдерд╛рди рдЬреЛ usize рдорд╛рди рдореЗрдВ рд╣реИ, рдЕрднреА рднреА рдПрдХ рдЕрдореВрд░реНрдд рд╕реНрдерд╛рди рд╣реИ (рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд░ рдХрд╛рд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдореВрд▓ рдкреЙрдЗрдВрдЯрд░ рд╡рд╛рдкрд╕ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ)ред

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

@eddyb рдореЗрд▓рд╛ рдХрд╛рдлреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреА рдХреЛрдИ рднреА рдЪрд┐рдВрддрд╛ рдЬреЛ const fn рд╣рд┐рдЯ рд╣реБрдИ рд╣реИ, рд╡рд╣ рдЖрдЬ рдкрд╣рд▓реЗ рд╣реА рдХрд┐рд╕реА рднреА const рдмреНрд▓реЙрдХ рдХреЛ рд╣рд┐рдЯ рдХрд░ рдЪреБрдХреА рд╣реИред

@sgrif рдЕрдВрддрд░ const рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдВрдмрджреНрдз const s рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░, рдорд┐рд░реА рдХреЗ рддрд╣рдд рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ const fn рдПрдХ рдЧреИрд░- рд░рдирдЯрд╛рдЗрдо рдХреЙрд▓ рдХреЗ рд▓рд┐рдП const fn ред
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо (рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдореЗрдВ, рдХрдо рд╕реЗ рдХрдо) рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдЧреИрд░-рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреА рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡реЗ рдорд┐рд░реА рдХреЗ рддрд╣рдд рдареАрдХ рд╣реЛрдВ ред
рдЬрд┐рд╕рдХрд╛ рд╢рд╛рдпрдж рдорддрд▓рдм рд╣реИ рдХрд┐ рдлреНрд▓реЛрдЯ рдХреЗ рдмрд┐рдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬреИрд╕реЗ NaN рдкреЗрд▓реЛрдбред

рдЪреАрдЬреЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдорд┐рд░реА рдореЗрдВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

рд╕рднреА рдкреЙрдЗрдВрдЯрд░реНрд╕ 0 рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╕рд╛рдкреЗрдХреНрд╖ рди рд╣реЛред рдЬреИрд╕реЗ:

#[repr(C)]
struct X {
    a: usize,
    b: u8,
}
let x = X { a: 1, b: 2 };
let y: usize = 3;
assert_eq!(&x as *const _ as usize, 0);
assert_eq!(&x.a as *const _ as usize, 0);
assert_eq!(&x.b as *const _ as usize, 8);
assert_eq!(&y as *const _ as usize, 0);

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

рдлреНрд▓реЛрдЯ рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП, NaN рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдкреВрд░реА рдЪреАрдЬ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рдХ рдмрдирд╛ рджреЗрдВрдЧреЗред

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

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

рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрдард┐рди рд╣реИ

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

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

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

рдлрд╝реНрдпреВрдЬрд╝рд┐рдВрдЧ рдСрдкрд░реЗрд╢рдВрд╕ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк mul-add рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ) рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ/рдлрд╛рд╕реНрдЯ-рдореИрде рдлреНрд▓реИрдЧ рдХреЗ рдмрд┐рдирд╛ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рджреМрд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред LLVM "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╡рд╛рддрд╛рд╡рд░рдг" рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ IEEE рдЕрдиреБрд░реВрдк рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд╕рдЯреАрдХ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд╣реИред

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

рджреВрд╕рд░рд╛ рдкреНрд░рдореБрдЦ рдорд╛рдорд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдирд┐рд░реНрдгрдп рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, x87 (рдкреНрд░реА-рдПрд╕рдПрд╕рдИ) рдХреЛрдб рдореЗрдВ рд╕реНрдкрд┐рд▓ рдФрд░ рд░реАрд▓реЛрдб рдХрд╛ рд╕реНрдерд╛рди рд╣реИред рдФрд░ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ рдореБрджреНрджрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ x87 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП 80 рдмрд┐рдЯ рддрдХ рдФрд░ рджреБрдХрд╛рдиреЛрдВ рдкрд░ 32 рдпрд╛ 64 рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рд░рд╛рдЙрдВрдб рдХрд░рддрд╛ рд╣реИред рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧреЛрд▓ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ FPU рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдкрд╣рд▓реЗ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдореЛрдб рдХреЛ рдареАрдХ рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП (рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ) LLVM рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдкреВрд░реНрдг рд░реЗрдлрд╝рд░реЗрдВрд╢рд┐рдпрд▓ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдкрд░

рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкреВрд░реНрдг рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ / рдкреВрд░реНрдгрддрд╛ рдкрд░ рд╕реБрд░рдХреНрд╖рд╛ / рд╢реБрджреНрдзрддрд╛ рдЪреБрдирдиреЗ рдХреЗ рд╕рдордЧреНрд░ рд░рд╕реНрдЯ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╣реИред

рд░реЗрдлрд╝рд░реЗрдВрд╢рд┐рдпрд▓ рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрд╕реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░реАрдЬрдирд┐рдВрдЧ рдлрд╝рд╛рдпрджреЗ рдЬреЛрдбрд╝рддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЗрдХреНрд╡реЗрд╢рдирд▓ рд░реАрдЬрдирд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ (рдиреАрдЪреЗ рддрдХ, рд▓реЗрдХрд┐рди рддреЗрдЬрд╝ рдФрд░ рдвреАрд▓рд╛ рд░реАрдЬрд╝рдирд┐рдВрдЧ рдиреИрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ )ред

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

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

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

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

@ est31 рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди-рд╕рдордп рдФрд░ рд░рдирдЯрд╛рдЗрдо рд╡реНрдпрд╡рд╣рд╛рд░ рднрд┐рдиреНрди рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рджреЛрд╣рд░рд╛рдП рдЧрдП рдХреЙрд▓ (рдЬрдореЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╕рд╛рде) рд╕реБрд╕рдВрдЧрдд рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рджреБрд╖реНрдкреНрд░рднрд╛рд╡-рдореБрдХреНрдд рд╣реИрдВред

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

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

рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдХреНрдпрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╢реБрджреНрдзрддрд╛ рдФрд░ рдПрдХ рдкреНрд░рднрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЬрдВрдЧ рдПрдХ рдмрд╛рд░ рдереА рдФрд░ рдЦреЛ рдЧрдИ рдереА, рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдирд╛ рд╡рдЬрди рдирд╣реАрдВ рдЙрдард╛рдпрд╛ (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рднреА рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓рд╛ рдирд╣реАрдВ рдерд╛ рдЬрд┐рди рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЙрдиреНрд╣реЗрдВ рджреЗрдЦреЗрдВ https://mail.mozilla.org/pipermail/rust-dev/2013-April/003926.html)ред

ptr-to-int рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдк int-to-ptr рдХреЛ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ 100% рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдЧрд╛ред рдФрд░ рд╣рд░ рдХреЙрд▓ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред

ptr-to-int рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, int-to-ptr рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред ptr-to-int рдХреЛ const рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ "рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд" рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

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

ptr-to-int рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдк int-to-ptr рдХреЛ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ 100% рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдЧрд╛ред рдФрд░ рд╣рд░ рдХреЙрд▓ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред

рдЖрдк рдХреИрд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ? (&mut *Box::new(...)) as usize рдЕрднреА рдПрдХ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рд╕рднреА const fn рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдЖрдк рдХреИрд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ "рд░рди-рдЯрд╛рдЗрдо рдкрд░ рд╕рдВрджрд░реНрднрд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА" рд╣реИ, рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдЕрд░реНрде рдореЗрдВ?

Box::new рдХреЛ VM рдореЗрдВ рдПрдХ рдЯреНрд░реИрдХ рдХрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо 0 рд╣реЛрдЧрд╛, рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ (рдпрд╛рдиреА рдПрдХ рдХрд╛рд╕реНрдЯ рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ)ред рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ, рдпрд╣ рдЬреЛ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред

рдПрдХ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реВрдЪрдХ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

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

Box::new рдХреЛ VM рдореЗрдВ рдПрдХ рдЯреНрд░реИрдХ рдХрд┐рдП рдЧрдП рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдорд┐рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд╕рдм рдареАрдХ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред


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

@RalfJung I рд▓рд┐рдВрдХреНрдб https://github.com/rust-lang/rust/issues/49146#issuecomment -386727325 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд┐рдВрддрд╛ рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЕрдиреНрдп рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рддрд╣рдд рдЦреЛ рдЧрдпрд╛ рд╣реЛ - рдЗрд╕рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ @Centril рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд ( рд╕рдВрдЪрд╛рд▓рди unsafe рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ "рд╕рд╣реА рдЙрдкрдпреЛрдЧреЛрдВ" рдХреЛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП offset_of ptr-to-int рдФрд░ NaN-рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдлреНрд▓реЛрдЯ-рдЯреВ-рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП)ред

@eddyb рдпрдХреАрди рд╣реИ, рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ; рдореИрдВ рдЬреЛ рдорд╛рдВрдЧ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдкреНрд░реЗрд░рдгрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╣рд╛рдВ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред

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

const fn thing() -> usize {
    (*Box::new(0)) as *const _ as usize
}

const X: usize = thing();
const Y: usize = thing();

рдПрдХреНрд╕ == рд╡рд╛рдИ рд╣реИ?

рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде, рдПрдХреНрд╕ == рд╡рд╛рдИред

@ SonyEx2 рдЬреЛ foo as *const _ as usize as *const _ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЕрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рд╢реЛрд░ рд╣реИ

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

@ SonyEx2 рд╣рд╛рдВ, X == Y рд╣рдореЗрд╢рд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ:

const fn oracle() -> bool { let x = 0; let y = &x as *const _ as usize; even(y) }

fn main() {
    assert_eq!(oracle(), oracle());
}

рдлрд┐рд░ main рд░рдирдЯрд╛рдЗрдо рдкрд░ рдШрдмрд░рд╛рд╣рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИред

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ

рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрддрдирд╛ рд▓рдЪреАрд▓рд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЙрди рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░ рд╕рдХреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЛрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ [..]

рд╡реЗ рдЪреАрдЬреЗрдВ рдХреНрдпрд╛ рдереАрдВ? рдмрд┐рдирд╛ рд╕рд╣рдорддрд┐ рдХреЗ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред

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

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

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

reverse :: [a] -> [a]
reverse []       = []
reverse (x : xs) = reverse xs ++ [x]

putStrLn :: String -> IO ()
getLine :: IO String

main :: IO ()
main = do
    line <- getLine
    let revLine = reverse line
    putStrLn revLine

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ revLine рдореЗрдВ let revLine = reverse line рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ reverse рдореЗрдВ рдкрд╛рд░рд┐рдд рд░рд╛рдЬреНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ line рд╣реИред рдпрд╣ рддрд░реНрдХ рд▓рд╛рдн рдФрд░ рд╕реНрд╡рдЪреНрдЫ рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

рдлрд┐рд▓ рд╡рд╛рдбрд▓рд░ рдФрд░ рдХреЙрдирд░ рдореИрдХрдмреНрд░рд╛рдЗрдб рдХреЗ рдЕрдорд░ рд╢рдмреНрджреЛрдВ рдореЗрдВ:

рдореИрдВ рдкрд╛рд╡рди рдмрдиреВрдБ рдпрд╛ рдЕрдкрд╡рд┐рддреНрд░?
-рдлрд┐рд▓рд┐рдк рд╡рд╛рдбрд▓рд░ [60]

рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ 'рд╣рд╛рдВред': рд╢реБрджреНрдзрддрд╛ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ

https://arxiv.org/pdf/1611.09259.pdf

@ рдУрд▓реА-рдУрдмреАрдХреЗ

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

рдПрдХ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо const fn рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдХреЗ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ / рд╢реБрджреНрдзрддрд╛ рдкрд░ рдирд┐рд░реНрдгрдп рдореЗрдВ рджреЗрд░реА рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ unsafe (рдпрд╛ рдЧреИрд░- const ) рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд▓реЛрдЧ рдЗрд╕реЗ рдорд╛рди рднреА рдирд╣реАрдВ рд╕рдХрддреЗред

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

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

int рдХреЛ ptr рдореЗрдВ const рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛ рдПрдХ рдмрдбрд╝реА рд╣рд╛рдирд┐ рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдлрд╝реАрд▓реНрдб рдСрдлрд╝рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдпрд╣реА рдореИрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@ SonyEx2 рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ const рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдореИрдВ рдЪреБрдкрдЪрд╛рдк рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдФрд░ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛ред

@centril рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдЪрд▓реЛ рдЕрдм рд░реВрдврд╝рд┐рд╡рд╛рджреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрдиреНрд╣реЗрдВ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрд╕реНрдерд┐рд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ libstd рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдХреЙрдиреНрд╕реНрдЯ fns рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЙрдЗрдВрдЯрд░ рдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрднрд╛рд╖рд╛ рд╣реЛрдирд╛ рдареАрдХ рд╣реИред

@ Centril @ est31 рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрд▓реЛрд░реЛрдЯреНрд░рд┐рдлреНрд▓реБрдУрд░реЛрдПрдерд┐рд▓реАрди рдХрд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдХреНрдпрд╛ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ (рдХреНрдпрд╛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╢рдмреНрджрдХреЛрд╖ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ?)

@sgrif CTFE (рд╕рдВрдХрд▓рди-рд╕рдордп рдлрд╝рдВрдХреНрд╢рди рдореВрд▓реНрдпрд╛рдВрдХрди) рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд░рд╕реНрдЯ (рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдкреБрд░рд╛рдиреЗ рднрд╛рдЧреЛрдВ рд╕рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрди рд╢рд░реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╣реАрдВ рдХреЗрдВрджреНрд░реАрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@sgrif lol рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдмрд╛рд░ рдореИрдВ рд╡рд╣ рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВ рдЬреЛ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реИ "рдЕрдм рд╡реЗ рдХреМрди рд╕реЗ рдЕрдЬреАрдм рд╢рдмреНрдж рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?"ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдИрдЖрд░рд╕реА рдореЗрдВ @eddyb рд╕реЗ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрдм рдЙрд╕рдиреЗ "рд╕реАрдЯреАрдПрдлрдИ" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЙрд╕рд╕реЗ рдкреВрдЫрдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ: рдкреАред

рдЗрд╕ рдкреГрд╖реНрда рдкрд░ @eddyb ctrl+f + CTFE рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рддрд░рд╣, рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред "рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ" рдХрд╛рдлреА рдмрд╣рд┐рд╖реНрдХреГрдд рдЖрдИрдПрдордУ рд╣реИред

@ рд╕реЗрдВрдЯреНрд░рд┐рд▓ @ est31 рдзрдиреНрдпрд╡рд╛рдж: рджрд┐рд▓:

рддреЛ... рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░

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

рдХреНрдпрд╛ рд╕рдВрдШ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ const fn рдХреЗ рдЕрдВрджрд░ рднреА рдЕрд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЗрд╕ рдкреГрд╖реНрда рдкрд░ ctrl+f + CTFE рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

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

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

( рдореИрдВрдиреЗ рд╕реАрдЯреАрдПрдлрдИ рд╡рд┐рдХреА рд▓рд┐рдВрдХ рдХреЛ рд╕рдмрд╕реЗ рдКрдкрд░ рд░рдЦрд╛ рд╣реИ; рдЕрдм рдХреНрдпрд╛ рд╣рдо рдХреГрдкрдпрд╛ const fn s рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВ? :P)

рдХреНрдпрд╛ рдХреЛрдИ CTFE рдХреЛ rustc рдЧрд╛рдЗрдб рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВ рдореЛрдмрд╛рдЗрд▓ рдкрд░ рд╣реВрдБ)?

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

@рд╕реЗрдВрдЯреНрд░рд┐рд▓

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

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

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

@ рдУрд▓реА-рдУрдмреАрдХреЗ

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

рдореИрдВрдиреЗ рд╕рдВрджрд░реНрдн рдЦреЛ рджрд┐рдпрд╛, рдпрд╣рд╛рдБ "рдпреЗ" рдХреНрдпрд╛ рд╣реИ?

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

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

рд╣рдо рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕реАрдЯреАрдПрдлрдИ рдорд┐рд░реА рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ @eddyb рдХреЗ рдСрдлрд╕реЗрдЯ_рдСрдл [1] рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдШрдЯрд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╣ рдХреЛрдб "рдкреВрд░реНрдг рдорд┐рд░реА" рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рджреЛрдиреЛрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдПрдХ рд╣реА рдЖрд╡рдВрдЯрди рдХреЗ рдЕрдВрджрд░ рд╣реЛрдВ, рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рдЧрд╛рд░рдВрдЯреА рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рд╡рд╣ assert рд╣реИ рдЬрд┐рд╕реЗ @eddyb рдиреЗ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИред
рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдорд╛рдиреЛрдВ рдкрд░ рдмрд┐рдЯ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╕рдВрдЪрд╛рд▓рди рдХреЗрд╡рд▓ рд╕реВрдЪрдХ рдХреЗ рд╕рдВрд░реЗрдЦрд┐рдд рднрд╛рдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ рдФрд░ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдкреВрд░реНрдг рдорд┐рд░реА" рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: [1] рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЙрдирдХреЗ рдореИрдХреНрд░реЛ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рд╣рдо рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдСрдл-рдЯреЙрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рддрд┐ рд╣реИ:

macro_rules! offset_of {
    ($Struct:path, $field:ident) => ({
        // Using a separate function to minimize unhygienic hazards
        // (e.g. unsafety of #[repr(packed)] field borrows).
        // Uncomment `const` when `const fn`s can juggle pointers.
        /*const*/ fn offset() -> usize {
            let u = $crate::mem::MaybeUninit::<$Struct>::uninit();
            // Use pattern-matching to avoid accidentally going through Deref.
            let &$Struct { $field: ref f, .. } = unsafe { &*u.as_ptr() };
            let o = (f as *const _ as usize).wrapping_sub(&u as *const _ as usize);
            // Triple check that we are within `u` still.
            assert!((0..=$crate::mem::size_of_val(&u)).contains(&o));
            o
        }
        offset()
    })
}

EDIT2: рджрд░рдЕрд╕рд▓, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рднреА рдХрд┐рдпрд╛ рдерд╛ред

"рдпреЗ" рдлреНрд▓реЛрдЯ рд╣реИрдВ -> рдмрд┐рдЯреНрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рд╕реВрдЪрдХ -> рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

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

рддреЛ рд░рди рдЯрд╛рдЗрдо рдкрд░ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рд╢реБрджреНрдзрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╕рдорд╛рди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

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

рддреЛ рд░рди рдЯрд╛рдЗрдо рдкрд░ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рд╢реБрджреНрдзрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╕рдорд╛рди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рд╣рд╛рдВ, рдореИрдВ рдпрд╣реА рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред


рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╕реЛрдЪрдХрд░ (рдФрд░ рдЬрдм рдореИрдВ рдЗрд╕реЗ рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛ рддреЛ @ рдУрд▓реА-рдУрдмреАрдХреЗ рдХрд╛ рдЬрд╡рд╛рдм рдкрдврд╝ рд░рд╣рд╛ рдерд╛), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ "рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд const fn рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА" рдХреА рддрд░реНрдЬ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрд╛рд░рдВрдЯреА рд╣реИред рд╡реИрдз рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдкрд░ CTFE рд╕рдордп (рдШрдмрд░рд╛рд╣рдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА "рдХреЙрдиреНрд╕реНрдЯ рд╕реБрд░рдХреНрд╖рд╛" рдЧрд╛рд░рдВрдЯреАред рд░рди-рдЯрд╛рдЗрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдлрд▓ CTFE рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде, рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдХрд┐ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд const fn рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдлрд▓ CTFE рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдПрдХ рдХрдард┐рди рдЧрд╛рд░рдВрдЯреА рд╣реИред рдмреЗрд╣рддрд░ рдпрд╛ рдмрджрддрд░ рдХреЗ рд▓рд┐рдП, рдЬрдВрдЧ рдХреЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВ рдЬреЛ рд╕реАрдЯреАрдПрдлрдИ рдорд┐рд░реА рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рд╣рдореЗрд╢рд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ @Centril рдХреЗ oracle рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддрд░рд╣ рдЬреЛ 0 рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдЗрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ CTFE рдХреЗ, " usize рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдиреНрдп рдорд╛рди рдХреЗрд╡рд▓ PrimVal::Bytes рд╣реИрдВ, рдЬрдмрдХрд┐ PrimVal::Ptr рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП [1]ред рдпрд╣ рдРрд╕рд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЙрдиреНрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╣реИ - рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдорд┐рд░реА рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЬрдВрдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ "рдорддрд▓рдм" рдмрджрд▓рддреЗ рд╣реИрдВ рдЬрдм рдПрдХ const fn рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдЧрд╛рд░рдВрдЯреА рджреЗрдЧреА рдХрд┐ рд╕рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдВрдХрдЧрдгрд┐рдд рдФрд░ рдмрд┐рдЯ рд╕рдВрдЪрд╛рд▓рди рд╕реАрдЯреАрдПрдлрдИ рдореЗрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рд╕реАрдЯреАрдПрдлрдИ-рд╡реИрдз рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП, рд╕реАрдЯреАрдПрдлрдИ рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдШрдЯрд╛рд╡ рдХрднреА рднреА рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдкрдХреНрд╖ PrimVal::Bytes рд╣реИрдВред рдмреЗрд╢рдХ, рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ ptr-to-int рдХреЛ рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдСрдкрд░реЗрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХрд╛ рдкреНрд░рдХрд╛рд░ usize рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ CTFE-рдорд╛рдиреНрдп usize рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдпрд╣ рдПрдХ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдо рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реАрдЯреАрдПрдлрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЦреНрдд рдмрдирд╛рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдиреБрдЪрд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ; рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ("рдХреЙрдиреНрд╕реНрдЯ рд╕реБрд░рдХреНрд╖рд╛" рдХреА рдЬрд╛рдВрдЪ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдлрд┐рд░, const рд╕рдВрджрд░реНрдн рдореЗрдВ ptr-to-int рдХрд╛рд╕реНрдЯ unsafe рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрд░реНрдХ рджреЗрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ const рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрд╛рд░рдВрдЯреАред

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

@eddyb рдХреЗ рдореИрдХреНрд░реЛ рдХреЛ рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЗрди "рдХреЙрдиреНрд╕реНрдЯ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (ptr-to-use рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдШрдЯрд╛рдирд╛, рдпрд╛ рдХреЗрд╡рд▓ рд╕реВрдЪрдХ рдШрдЯрд╛рд╡ рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛) рд╕реАрдзреЗ) рдПрдХ рддрд░рд╣ рд╕реЗ CTFE рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдЙрдард╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреА рд▓рд╛рдЧрдд рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдЪреНрдЪ-рдЖрджреЗрд╢ const fn рдХреЛ const fn рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдХреНрд▓реЛрдЬрд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛, "рдХреЙрдиреНрд╕реНрдЯ рд╕реБрд░рдХреНрд╖рд╛" рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд const fn рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдЪрд┐рдд рдЧрд╛рд░рдВрдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреАрдордд рд╣реИред

[1] рдореИрдВ рдпрд╣рд╛рдВ рдлреНрд▓реЛрдЯреНрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж рдХрд╣рд╛рдВ рдкреИрджрд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд░рди-рдЯрд╛рдЗрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ CTFE рд╕рдордп рдкрд░ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛? рдХреНрдпрд╛ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд┐рд░реА рдПрд░рд░ рдЖрдЙрдЯ рдХрд░реЗрдВ, рдпрджрд┐ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╕рдордп, рдСрдкрд░реЗрдВрдб рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ NaN рд╣реИ (рдкрд╣рд▓реА рдЧрд╛рд░рдВрдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рд╕реЗ рдПрдХ), рдФрд░ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ CTFE рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо f32 / f64 ("рдХреЙрдиреНрд╕реНрдЯ рд╕реБрд░рдХреНрд╖рд╛" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдкреНрд░рдХрд╛рд░ рдкрд░ NaN рдХреЛ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ?

рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ @eddyb рдХреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рдХреЗ рд▓рд┐рдП assert!(condition); рд╕реЗ [()][!condition as usize]; рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдЖрдк рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ assert!(condition); рд╕реЗ [()] [! рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ]; рдЕрднреА рдХреЗ рд▓рд┐рдПред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ assert рдСрдлрд╝рд╕реЗрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ CTFE рд╕рдордп рдкрд░ рдХрднреА рднреА рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ wrapping_sub рдХрд░рддреЗ рд╕рдордп рдкреЙрдЗрдВрдЯрд░реНрд╕ рдПрдХ рд╣реА рдмреНрд▓реЙрдХ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдорд┐рд░реА рддреНрд░реБрдЯрд┐ рд╣реЛ рдЬрд╛рдПрдЧреАред

// guess we can't have this as const fn
fn is_eq<T>(a: &T, b: &T) -> bool {
    a as *const _ == b as *const _
}

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

рдлрд╝реАрд▓реНрдб рдСрдлрд╝рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИред рд╡рд░реНрдЪреБрдЕрд▓ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде, рдпрд╣ рдирд┐рдпрддрд╛рддреНрдордХ рд░рд╣рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрднреА рднреА рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИред

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

const fn рдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

@ SonyEx2

// guess we can't have this as const fn

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

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

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ

рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрди рднреА рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рдбреЗрд╡рд┐рд▓реНрд╕ рдЕрдзрд┐рд╡рдХреНрддрд╛: рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ "рд▓реМрдЯрдирд╛ тКе" рдПрдХ рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рд╕рдордЭрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ; рдЖрдк рдЗрд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ (рд▓реЗрдХрд┐рди рдореИрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣реВрдВ...), рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИред

@ рдУрд▓реА-рдУрдмреАрдХреЗ

рддреЛ рд░рди рдЯрд╛рдЗрдо рдкрд░ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рд╢реБрджреНрдзрддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╕рдорд╛рди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

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

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ

рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдХрд┐ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд const fn рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдлрд▓ CTFE рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

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

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

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

рдпреЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрд░реЗ рдХрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреАрдд рд╣реИрдВ! тЭдя╕П рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрддрд┐рд╡рд╛рдж ("рд╢реБрджреНрдзрддрд╛") рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ? рдФрд░ рдареАрдХ рд╡рд╣реА рдмрд╛рдд рд╣реИ рдЬреЛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдкрд╣рд▓реЗ рдереАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрд╕реНрдЯ рд╕реЗрдлреНрдЯреА рднреА рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╢рдмреНрдж рд╣реИ!

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

@рд╕реЗрдВрдЯреНрд░рд┐рд▓

рдбреЗрд╡рд┐рд▓реНрд╕ рдЕрдзрд┐рд╡рдХреНрддрд╛: рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ "рд▓реМрдЯрдирд╛ тКе" рдПрдХ рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред

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

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

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ foo(x) рдкрд░ рдХреБрдЫ рдХреЙрд▓ рд╣реИ рдЬрд╣рд╛рдВ foo рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрдиреНрд╕ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдФрд░ x рдПрдХ рдХреЙрдиреНрд╕реНрдЯ-рд╡реИрдз рдорд╛рди рд╣реИ (рдпрд╛рдиреА, рдпрд╣ &y as *const _ as usize рдирд╣реАрдВ рд╣реИ ) рддрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ foo(x) CTFE рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ, const рд╕реБрд░рдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, CTFE рд╕реБрджреГрдврд╝рддрд╛ рджреНрд╡рд╛рд░рд╛, рд░рди-рдЯрд╛рдЗрдо рдкрд░ foo(x) рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдЙрд╕рдиреЗ CTFE рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред

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

рдпреЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрд░реЗ рдХрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреАрдд рд╣реИрдВ! рджрд┐рд▓ рдпрд╣ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж ("рд╢реБрджреНрдзрддрд╛") рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ? рдФрд░ рдареАрдХ рд╡рд╣реА рдмрд╛рдд рд╣реИ рдЬреЛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдкрд╣рд▓реЗ рдереАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрд╕реНрдЯ рд╕реЗрдлреНрдЯреА рднреА рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╢рдмреНрдж рд╣реИ!

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

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

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ

рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреА рд▓рд╛рдЧрдд рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдЪреНрдЪ-рдЖрджреЗрд╢ const fn рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрд╕реНрдЯ рдПрдлрдПрди рдХреНрд▓реЛрдЬрд░ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрд▓реЛрдЬрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕реНрд╡рдпрдВ "рдХреЙрдиреНрд╕реНрдЯ рд╕реБрд░рдХреНрд╖рд╛" рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд const fn рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдЪрд┐рдд рдЧрд╛рд░рдВрдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреАрдордд рд╣реИред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ ?const рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдЙрдЪреНрдЪ рдСрд░реНрдбрд░ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо const рддрдХ рд╕реАрдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди ?const fn(T) -> U рд╣реИ is_const(x : T) ; рдорддрд▓рдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ:

?const fn twice(fun: ?const fn(u8) -> u8) { fun(fun(42)) }

fn id_impure(x: u8) -> u8 { x }
const fn id_const(x: u8) -> u8 { x }
?const fn id_maybe_const(x: u8) -> u8 { x }

fn main() {
    let a = twice(id_impure); // OK!
    const b = twice(id_impure); // ERR!
    let c = twice(id_const); // OK!
    const d = twice(id_const); // OK!
    let e = twice(id_maybe_const); // OK!
    const f = twice(id_maybe_const); // OK!
}

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

@Centril рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдкреНрд░рднрд╛рд╡ рдмрд╣реБрд░реВрдкрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рднрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЖрдкрдХрд╛ рдЧреБрдкреНрдд (?) рдПрдЬреЗрдВрдбрд╛ рдерд╛, рдмрд╕ рдЖрдкрдХреЛ рдмрддрд╛ рджреЗрдВ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИред ^^

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ https://github.com/rust-lang/rfcs/pull/2237 рдкрд░ рдкрд╣рд▓реЗ рд╣реА рд░рд╣рд╕реНрдп рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛;)
рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдЕрдм ^,-

@ SonyEx2

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

рд╕рдорд╕реНрдпрд╛ рдирд┐рдореНрди рдЬреИрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣реИ (рд╕реА ++ рдореЗрдВ):

int x[2];
int y; // let's assume y is put right after the end of x in the stack frame
if (&x[0] + 2 == &y) {
  // ...
}

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

рдореИрдВрдиреЗ рдХреЙрдиреНрд╕ рд╕реЗрдлреНрдЯреА, рдХреЙрдиреНрд╕реНрдЯ рд╕рд╛рдЙрдВрдбрдиреЗрд╕ рдЖрджрд┐ рдХреЗ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдФрд░/рдпрд╛ рдЖрдИрдЖрд░рд╕реА рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░реНрдЪрд╛ рдореЗрдВ рдпрд╣рд╛рдВ рдЖрдП рд╣реИрдВ: https://www.ralfj.de/blog/2018/07/19/ const.html

рдпрд╣рд╛рдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реБрд▓рдЭрд╛рдирд╛ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред @ oli-obk рдиреЗ рдХреЙрдиреНрд╕реНрдЯ-рдИрд╡рд▓ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рд░реВрдк рд╕реЗ рдПрдХ рд░реЗрдкреЛ рдмрдирд╛рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдк-рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╢рд╛рдпрдж https://github.com/rust-rfcs/const-eval рдХрд╛ рдЗрд╢реНрдпреВ рдЯреНрд░реИрдХрд░ рд╣реИред

@Centril рдиреЗ рдПрдХ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд┐рд╕реА рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛ:

  • рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдирд╣реАрдВ
  • рдХреЛрдИ рддрд░реНрдХ рдпрд╛ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ fn рд╕реВрдЪрдХ рдпрд╛ dyn Trait рдкреНрд░рдХрд╛рд░

    • рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рдкрд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рднреА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рди рд╣реЛрдВ

  • рдХреЛрдИ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдирд╣реАрдВ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣рд╛рдВ рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВ)

    • рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ union s рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдареАрдХ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлреАрдЪрд░ рдЧреЗрдЯ рдХреЗ рдкреАрдЫреЗ рд╣реИрдВ, рдФрд░ рдХрдЪреНрдЪреЗ рдкреЙрдЗрдВрдЯрд░ рдбреЗрд░реЗрдлреНрд╕ (рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреЛ рдЕрдиреНрдп рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрдиреНрд╕ fns рдпрд╛ рдХреЙрдиреНрд╕реНрдЯ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдЪрд░реНрдЪрд╛ wrt рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

(рдирд╛рдЗрдЯ: рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рдореЗрдВ fn рдкреЙрдЗрдВрдЯрд░реНрд╕ рдпрд╛ dyn Trait рдХреЗ рд▓рд┐рдП const fn s рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдкрд░ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЬрд╛рдВрдЪ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ)

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

рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдирд╣реАрдВ?

struct Mutex<T> where T: Send { /* .. */ }

impl<T> Mutex<T> where T: Send {
    pub const fn new(val: T) -> Self { /* .. */ }
}

рдмрд╛рдЙрдВрдб const fn рд╣реА рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред

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

@ рдорд╛рд░реНрдХ-рдЗрдо рдмрд╛рдХреА рдПрдХ рдлреАрдЪрд░ рдЧреЗрдЯ рдХреЗ рдкреАрдЫреЗ рд░рд╣реЗрдВрдЧреЗред

@ oli-obk рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рд╣рдо рдЕрд╕реБрд░рдХреНрд╖рд┐рдд const X : Ty = ... рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ const fn рдирд┐рдХрд╛рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдмрд┐рд▓реНрдХреБрд▓ const рдирд┐рдХрд╛рдпреЛрдВ рдХреА рддрд░рд╣ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

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

рдмрд╛рдЙрдВрдб рдХреЙрдиреНрд╕реНрдЯ fn рдХрд╛ рд╣реА рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдирд╣реАрдВ, рдЙрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рддрд╣рдд рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдмреНрд▓реЙрдХ рдкрд░ рд╕реАрдорд╛ рдХреА рднреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА

рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?

рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдиреНрд╕ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реБрд╡рд┐рдзрд╛/рдХрд╛рд░реНрдп рдХреЛ рд╡реИрд╕реЗ рднреА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ " @Centril рдШрдмрд░рд╛рдпрд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рдЧрд▓рдд рдХрд┐рдпрд╛ рд╣реИред рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрд╕реНрд╡реАрдХреГрдд рд╣реИрдВ"ред ;) рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ unsafe { .. } рдХреЛ const fn рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрджрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдордиреЗ рд╕рднреА рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рдСрдкрд░реЗрд╢рди рдкрдХрдбрд╝ рд▓рд┐рдП рд╣реИрдВ рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

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

рдореИрдВ рдЕрднреА рднреА рдХреЙрдиреНрд╕реНрдЯ fn RFC рд░реЗрдкреЛ рдХреЗ рдХреЙрдиреНрд╕реНрдЯ рд╕реЗрдлреНрдЯреА/рдкреНрд░рдореЛрд╢рди рдкрд╛рд░реНрдЯреНрд╕ рдореЗрдВ рдкреАрдЖрд░ рдлрд┐рд▓рд┐рдВрдЧ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ; рдЕрдЧрд░ рд╣рдо рд╕рдм рдХреБрдЫ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рдЯреЗрд╕реНрдЯрдХреЗрд╕ рд╣реИрдВ) рддреЛ рдпрд╣ рдзреНрдпрд╛рди рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛ред

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

рдпрд╣ const рдЖрдЗрдЯрдо рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдХрднреА рднреА рд░рдирдЯрд╛рдЗрдо-рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ - рдЬрдмрдХрд┐ const fn рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП const fn рдореЗрдВ FP рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рд╕рдордЭрджрд╛рд░реА рд╣реИред

рдУрдЯреАрдУрдПрдЪ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдлрдкреА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддреЗ рд╣реИрдВ? рддреЛ рд╡рд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рди-рдЯрд╛рдЗрдо/рд╕рдВрдХрд▓рди-рд╕рдордп рдмреЗрдореЗрд▓ рд╕реНрдерд┐рд░ рдкрд░ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдХреНрдпрд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдбреНрдврд╛ рдЪрд▓рд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдкреВрд░реНрд╡рд╡рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯреНрд╕ рдФрд░ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ:

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ

рдХреНрдпрд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдбреНрдврд╛ рдЪрд▓рд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдкреВрд░реНрд╡рд╡рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рдХрд░ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХреЛрд╢рд┐рд╢ рдХреЗ рдХрд╛рдмрд┐рд▓ рд╣реИред :)

@RalfJung рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЖрдЧреЗ рджрд┐рд▓рдЪрд╕реНрдк рдЗрдирдкреБрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ https://github.com/rust-lang/rust/issues/24111#issuecomment -386764565

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдХреАрд╡рд░реНрдб рдлреЙрд░реНрдо const fn рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдХреБрдЫ рд╕реНрдерд┐рд░ рдХрд░рдирд╛, рдЬреЛ рдХрд╛рдлреА рд╕реАрдорд┐рдд рд╣реИ, рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛?!)

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

рд╕реЛрдо, рдЕрдЧрд╕реНрдд 20, 2018 рджреЛрдкрд╣рд░ 1:44 рдмрдЬреЗ рдПрдбреБрдЖрд░реНрдб-рдорд┐рд╣рд╛рдИ рдмрд░реНрдЯреЗрд╕реНрдХреБ <
рд╕реВрдЪрдирд╛рдПрдВ@github.com> рдиреЗ рд▓рд┐рдЦрд╛:

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

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

@ est31 рдЬреИрд╕рд╛ рдХрд┐ @ rkruppe рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИ, рдЙрди рдлрд╝реНрдпреВрдЬрд╝ рдХреЛ -ffast-math рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рдЕрд╡реИрдз рд╣реЛрдЧрд╛ - рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ LLVM рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдореВрд▓ рдЕрдВрдХрдЧрдгрд┐рдд рднреА рд╡рд╣ рд╕рдм рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реИ (32 рдмрд┐рдЯ x86 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреНрдпреЛрдВрдХрд┐ x87 ...), рд▓реЗрдХрд┐рди рдЕрдиреБрд╡рд╛рдВрд╢рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВред рдФрд░ рд╡реЗ const fn рдирд╣реАрдВ рд╣реИрдВ, рд╣реИ рдирд╛? рддреЛ рдореЗрд░реА рдЖрд╢рд╛ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдЕрдВрдд рдореЗрдВ рд╣рдо рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ const рдЖрдЗрдЯрдо, рдкреНрд░рдЪрд╛рд░ рдФрд░ const fn рдХреЗ рдмреАрдЪ рд╕рдорд╛рдирддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред

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

рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдореВрд▓ рдЕрдВрдХрдЧрдгрд┐рдд рднреА рд╡рд╣ рд╕рдм рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реИ (32 рдмрд┐рдЯ x86 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреНрдпреЛрдВрдХрд┐ x87 ...), рд▓реЗрдХрд┐рди рдЕрдиреБрд╡рд╛рдВрд╢рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВред

рдЯреНрд░рд╛рдиреНрд╕реЗрдВрдбреИрдВрдЯрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдорддрд▓рдм рд╕рдорд╕реНрдпрд╛ рдХреИрд╕реЗ рд╣реЛрдЧрд╛?

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

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

  • рд░рдирдЯрд╛рдЗрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рдХреНрд╖реНрдп рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо libm, рдпрд╛ рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд┐рд░реНрджреЗрд╢)
  • рдирд┐рд░рдВрддрд░ рдлрд╝реЛрд▓реНрдбрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрдЬрдмрд╛рди рдордВрдЪ рд╕реА libm рд╣реИ)
  • рдЗрди рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд╕рд╛рде MIRI рдЬреЛ рдХреБрдЫ рднреА рдХрд░реЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, rustc_apfloat рдореЗрдВ рдХреБрдЫ, рдпрд╛ рдПрдХ рдЬрдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЬреИрд╕реЗ рдХрд┐ https://github.com/japaric/libm/)

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

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

рд╣рдо рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреВрд░реНрдг рдореЛрдВрдЯреА рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЕрдзрд┐рдХ рдиреНрдпреВрдирддрдо рдЙрдкрд╕рдореБрдЪреНрдЪрдп рдХреЗ рд▓рд┐рдП рдЖрдо рд╕рд╣рдорддрд┐ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдореЛрдЯреЗ рддреМрд░ рдкрд░ https://github.com/rust-lang/rust/issues/24111#issuecomment-414310119 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИ) рдХрд┐ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдХрдЯ рдЕрд╡рдзрд┐ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ .
рдпрд╣ рд╕рдмрд╕реЗрдЯ #53555 рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЧреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╡рд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИред

@Centril рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред

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

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

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

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

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

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

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗрд╡рд▓ рддрднреА рд╕рдХреНрд╖рдо рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рддреЗрдЬрд╝ рдЧрдгрд┐рдд рдЪрд╛рд▓реВ рд╣реЛ?

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

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

IMO рд╣рдореЗрдВ рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ f32::sin() рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрдо рд╕реЗ рдХрдо рддрдм рдирд╣реАрдВ рдЬрдм рд╣рдо + , - рдЖрджрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд░рд╣реЗ рд╣реЛрдВред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░рддрд┐рдмрдВрдз рд▓реЛрдЧреЛрдВ рдХреЛ рдХреНрд░реЗрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред рдЬреЛ рдХреЙрдиреНрд╕реНрдЯ-рд╕рдВрдЧрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗрд╡рд▓ рддрднреА рд╕рдХреНрд╖рдо рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рддреЗрдЬрд╝ рдЧрдгрд┐рдд рдЪрд╛рд▓реВ рд╣реЛ?

рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░рдВрддрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдФрд░ sqrtss рдХреЗ рдЙрддреНрд╕рд░реНрдЬрди рдХреЛ -ffast-math рдХреЗ рдмрд┐рдирд╛ рдЙрдЪрд┐рдд рдард╣рд░рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧреЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

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

рдХреЙрдиреНрд╕реНрдЯ fn рд╕рдВрджрд░реНрдн рдореЗрдВ Vec рдХреЗ рдХрд╛рд░рдг ICE рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2015&gist=508238a9f06fd85720307bf6cc227586

рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?

@Voultapher рд╣рд╛рдБ рдЬреЛ рдПрдХ рдирдП ICE рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ #55063 рдЦреЛрд▓рд╛ред

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

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

рд╕рд╛рде рд╣реА рд╣рдореЗрдВ рдорд╛рдирд╡реАрдп рдирд┐рд░реНрдгрдп рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреНрд▓рд┐рдкреА рд▓рд┐рдВрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдШреЛрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ const fn : https://github.com/rust-lang/rust-clippy/issues/2440

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

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

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

рдХреНрдпрд╛ рдПрдХ рдХреЙрдиреНрд╕ fn рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? &mut рдХреА рдЕрдиреБрдорддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП?

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

@ SonyEx2 const fn рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рднреА рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

@remexre рдЕрдЧрд░ рдпрд╣ рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрд╕ рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рди рдХрд░реЗрдВред

рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЯреЛрдХрд░рд╛ рдбреЙрдХреНрд╕ рдкрд░ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред

рдХреНрдпрд╛ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ? рдмрд┐рд▓реНрдХреБрд▓ рдХреЛрдИ рдирд╣реАрдВ!

const fn add_1(x: &mut i32) { x += 1; }
let mut x = 0;
add_1(&mut x);
assert_eq!(x, 1);
x = 0;
add_1(&mut x);
assert_eq!(x, 1);

const fn added_1(x: i32) -> i32 { x + 1 }
let mut x = 0;
x = added_1(x);
assert_eq!(x, 1);
x = 0;
x = added_1(x);
assert_eq!(x, 1);

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдореБрджреНрджреЗ рджрд╛рдпрд░ рдХрд┐рдП рд╣реИрдВ:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рдХреНрд╖рд┐рдд рдореБрджреНрджреЗ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ:

рдпрджрд┐ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рдЬрд┐рди рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдкрд░ wrt рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред const eval рдФрд░ const fn , рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдирдП рдореБрджреНрджреЗ рдмрдирд╛рдПрдВ (рдФрд░ рдЙрдирдореЗрдВ cc me + @ oli-obk)ред

рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

@SimonSapin рд╣рд╛рдБ, рдЕрдЪреНрдЫреА рдкрдХрдбрд╝ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдореМрдЬреВрджрд╛ рдореБрджреНрджреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгреА + рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЕрдкрдбреЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдирдП рдореБрджреНрджреЗ рдмрдирд╛рдПрдВред

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

рдЬрдм рдореИрдВ рд╕рд░реНрд╡реЛ рдореЗрдВ #![feature(const_fn)] рд╣рдЯрд╛рддрд╛ рд╣реВрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИрдВ:

  • trait bounds other than `Sized` on const fn parameters are unstable
  • function pointers in const fn are unstable

(рдпреЗ const fn s рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рддреБрдЪреНрдЫ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИрдВред рдкреВрд░реНрд╡ рд╕рдВрджреЗрд╢ struct Guard<T: Clone + Copy> рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░ рд╣реИ, рднрд▓реЗ рд╣реА Clone рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз Option<fn()> (рд╕рд░рд▓реАрдХреГрдд) рдХреЛ None рдпрд╛ Some(name_of_a_function_item) рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред)

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

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

@SimonSapin

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

рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ https://github.com/rust-lang/rust/issues/34511 рдХрд╛ рд╕реНрд╡рд╛рдж рд╣реИ, рдЬреЛ рдХрд┐ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рдореБрджреНрджреЛрдВ рдХреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЗ рд▓рд┐рдП рдирд┐рдГрд╢реБрд▓реНрдХ рднреА рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рдореЗрдЯрд╛-рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдРрд╕реЗ рдлреНрд░реА-рдлреЙрд░-рдСрд▓ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп http://internals.rust-lang.org/ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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

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

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдареАрдХ рдпрд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЯреА-рд▓реИрдВрдЧ рдЯреНрд░рд╛рдЗрдПрдЬ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ, рд▓рдХреНрд╖рд┐рдд рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдореБрджреНрджреЛрдВ рдХрд╛ рд╣реЛрдирд╛ рдЕрдиреБрдХреВрд▓ рд╣реИред

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рддрдм рддрдХ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рди рдХрд░ рд▓реЗрдВ рдХрд┐ const_fn рдлреАрдЪрд░ рдЧреЗрдЯ (рдЬреЛ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдпрд╣рд╛рдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ) рдХреЗ рдкреАрдЫреЗ рд╕рдм рдХреБрдЫ рдПрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╛ рдЬрдм рддрдХ const_fn рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред

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

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

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рддрдм рддрдХ рдмрдВрдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рд╣рдо рдЗрд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рд▓реЗрддреЗ, рдЖрдИрдПрдордУред

рд╣рд░ рдЪреАрдЬрд╝

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣реИ?

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

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ const_string_new рдлреАрдЪрд░ рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ? рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдЕрд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХ рдпрд╣рд╛рдБ рд▓рд┐рдВрдХ рдХрд░рддреА рд╣реИред

@phansch рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА rustc_const_unstable рдпрд╣рд╛рдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред (рд╕реАрд╕реА @ рдУрд▓реА-рдУрдмреАрдХреЗ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?)

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

рдмреБрдз, рдЬрдирд╡рд░реА 9, 2019, 04:05 рдордЬрд╝реНрджрд╛рдХ рдлрд╝рд╛рд░реЛрдЦрд╝рдЬрд╝рд╛рдж < рдиреЛрдЯрд┐рдлрд╝рд┐рдХреЗрд╢рди @github.com . рдкрд░
рд▓рд┐рдЦрд╛ рдерд╛:

@phansch https://github.com/phansch рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА
rustc_const_unstable рдмрд┐рдВрджреБ рдпрд╣рд╛рдБред

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

@ рджреБрд░реНрдХрд╛ : рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЦрд┐рдбрд╝рдХреА рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИ рдЬрд╣рд╛рдВ рд░рд╛рдд рдореЗрдВ рдХреБрдЫ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓реНрдк рдЕрднреА рднреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдпрд╣ рдХреИрд╕рд╛ рдЕрдкрдорд╛рдирдЬрдирдХ рд╣реИ?

рдореИрдВ рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рддрдЪреАрдд рдХреЛ рдЗрдВрдЯрд░реНрдирд▓ рдкрд░ рдПрдХ рд╕реВрддреНрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реИ?) рд▓реЗрдХрд┐рди...

рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдлреИрд╕рд▓реЗ рдХрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рдХ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдХреБрдЫ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВ: https://internals.rust-lang.org/t/psa-tracking-for-gated -рднрд╛рд╖рд╛-рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ/2887. рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИред

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

рджреЛрдмрд╛рд░рд╛, рдЕрдЧрд░ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдкрд░ рдПрдХ рдереНрд░реЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ) рддреЛ рд╢рд╛рдпрдж рдЗрд╕ рдмрд╛рддрдЪреАрдд рдХреЛ рд╡рд╣рд╛рдВ рд▓реЗ рдЬрд╛рдПрдВ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╛ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрд╛рдм рдкреБрд░рд╛рдиреА рд╣реИ? RFC рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЗрд╕рдореЗрдВ рдХреБрдЫ #[derive(...)] s рдЧрд╛рдпрдм рд╣реИ) Rust rustc 1.31.1 рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЕрднреА рднреА рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдпрд╣рд╛рдБ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ? рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ:

error: only int, `bool` and `char` operations are stable in const fn

рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ред

рдареАрдХ рд╣реИ, рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЦреБрд▓реЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдордЬрдмреВрдд рд╕рдмреВрдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдпрд╣ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ:

https://github.com/rust-lang/rust/blob/6ecad338381cc3b8d56e2df22e5971a598eddd6c/src/libsyntax/feature_gate.rs#L194

рдПрдХрдорд╛рддреНрд░ active рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмрдВрдж рдореБрджреНрджреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИред

рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╛рдпрд╛ рд╣реИ, рд▓реЛрдЧреЛрдВ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдп рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рд╣реИ...

рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ред

рд╣рд╛рдВ, рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИ, рдФрд░ @Centril рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ ред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЛрдВ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ "рд╡рд┐рдВрдбреЛ" рдореЗрдВ рдЖрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ @ErichDonGubler рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ ред

https://github.com/rust-lang/rust/issues/57563 рдЕрдм рд╢реЗрд╖ рдЕрд╕реНрдерд┐рд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рдпрд╣рд╛рдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рдореБрдЦрддрд╛ рд╕реЗ #57563 рд╕реЗ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

@glaebhoerl рдХрд┐рдпрд╛ :)

рдирдорд╕реНрддреЗ, рдореИрдВ рдпрд╣рд╛рдБ рдЗрд╕рд▓рд┐рдП рдЖрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ ncurses-rs рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ error[E0658]: const fn is unstable (see issue #24111) рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЬрдВрдЧ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ? рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ

$ cargo version
cargo 1.27.0
$ rustc --version
rustc 1.27.2

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: brew uninstall rust рдХрд┐рдпрд╛ рдФрд░ рд░рд╕реНрдЯрдЕрдк рдЗрдВрд╕реНрдЯрд╛рд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛, рдЕрдм rustc --version rustc 1.33.0 (2aa4c46cf 2019-02-28) рд╣реИ рдФрд░ рд╡рд╣ рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛ рдЧрдИред

рд╣рд╛рдВ, рд╕реНрдерд┐рд░ рдкрд░ const fn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

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

lambda-fairy picture lambda-fairy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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

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