Rust: рд░рд╕реНрдЯрд╕реА рдХреЛ рдЯреЗрд▓ рдХреЙрд▓ рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рдПрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЬрдире░ 2011  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

Rustc рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЯреЗрд▓ рдХреЙрд▓ рдХреИрд╕реЗ рдХрд░реЗрдВ ('ret' рдХреЗ рдмрдЬрд╛рдп 'be') рдХрд░реЗрдВред рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рд┐рдЦрд╛рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

3 рдЕрдЧрд╕реНрдд 2016 рдХреЛ, 19:46 -0400, рдПрдВрдЯреЛрдиреА PLASKOWSKI [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

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

fn rec(i: i32) { rec(i + 1)} fn main() {println!("{}", rec(0)); }

рдореИрдВ Boiethios рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╡рд╛рд▓реА рдПрдХ рднрд╛рд╖рд╛ рдЬреЛ рдЯреЗрд▓ рдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдХреБрдЫ рдпрд╛рдж рдЖрддреА рд╣реИред

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

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ (https://github.com/rust-lang/rust/issues/217#issuecomment-237409642), рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ (https://github.com/notifications/unsubscribe -auth/AABsipoedHrbnKDekmzCr-dl8M6g-Gojks5qcShKgaJpZM4AC-q_)ред

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

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

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

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

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

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

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдРрд╕рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?

рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдРрд╕рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

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

рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдЬреАрдПрдЪрд╕реА рдПрд▓рдПрд▓рд╡реАрдПрдо-рдмреИрдХрдПрдВрдб рдХреЛ рджреЗрдЦрдирд╛ рд╕рд╣рд╛рдпрдХ рд╣реЛ?

http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/Backends/LLVM
http://llvm.org/docs/LangRef.html#callingconv
http://llvm.org/docs/CodeGenerator.html#tailcallopt

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

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

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред

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

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

рдпрд╣ рдмрд╛рддрдЪреАрдд рдореЗрдВ рдЬрд╛рд░реА рд╣реИ, рдФрд░ рд╣рдордиреЗ рдлрд┐рд░ рд╕реЗ be рдЖрд░рдХреНрд╖рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рдЧреНрд░реЗрдбрди рдХреА рдЯрд┐рдкреНрдкрдгреА:

https://mail.mozilla.org/pipermail/rust-dev/2013-April/003557.html

рдЗрд╕ рддрд╛рдмреВрдд рдореЗрдВ рдХреАрд▓ рдареЛрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд:


10/04/2013 5:43 AM рдХреЛ, рдЖрд░реНрдЯреЗрд▓рд╛ рдХреЛрдбрд┐рдВрдЧ рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рдп рдХреНрдпрд╛ рд░рд╕реНрдЯ рдбреВ рдЯреЗрд▓ рдХреЙрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╢рди рдХрд░рддрд╛ рд╣реИ? рдореИрдВ рдЬреЛ рдХрд╛рд░рдг рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрд▓ рдХреЙрд▓ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╕реНрдЯреИрдХ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ
рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ред рдзрдиреНрдпрд╡рд╛рджред

рдирд╣реАрдВ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдПрдХ рдкреБрд░рд╛рдиреА рдмрдЧ рд╣реИ:

https://github.com/mozilla/rust/issues/217

рд╕рд╛рде рд╣реА рдПрдХ рд╡рд┐рдХреА рдкреГрд╖реНрда рдФрд░ рдХрдИ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рд╕реВрддреНрд░:

https://github.com/mozilla/rust/wiki/Bikeshed-tailcall
https://mail.mozilla.org/pipermail/rust-dev/2011-August/000689.html
https://mail.mozilla.org/pipermail/rust-dev/2012-January/001280.html
...

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

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

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

-рдЧреНрд░реЗрдбреЙрди

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

рд╢рд╛рдпрдж рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ, рдлреНрдпреВрдЬрди рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рддрд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред http://stackoverflow.com/a/9660027/667457

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

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

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

fn rec(i: i32) {
  rec(i + 1)
}

fn main() {
  println!("{}", rec(0));
}

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

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

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рдиреЛрдЯрд┐рд╕ рдЬреЛ

fn rec(i: i32) {
  println!("Hello");
  rec(i + 1)
}

рдХрд╛рд░реНрдЧреЛ рдХреЗ рд░рд┐рд▓реАрдЬ рдореЛрдб рдореЗрдВ рднреА рдвреЗрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣

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

3 рдЕрдЧрд╕реНрдд 2016 рдХреЛ, 19:46 -0400, рдПрдВрдЯреЛрдиреА PLASKOWSKI [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

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

fn rec(i: i32) { rec(i + 1)} fn main() {println!("{}", rec(0)); }

рдореИрдВ Boiethios рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╡рд╛рд▓реА рдПрдХ рднрд╛рд╖рд╛ рдЬреЛ рдЯреЗрд▓ рдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдХреБрдЫ рдпрд╛рдж рдЖрддреА рд╣реИред

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

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ (https://github.com/rust-lang/rust/issues/217#issuecomment-237409642), рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ (https://github.com/notifications/unsubscribe -auth/AABsipoedHrbnKDekmzCr-dl8M6g-Gojks5qcShKgaJpZM4AC-q_)ред

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

lbstanza рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрдиреНрд╣реЗрдВ TCO (defn рдХреЗ рдмрдЬрд╛рдп defn +) рдХреЗ рд▓рд┐рдП рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдВрдЧ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдХрд▓рди рд╕рдордп рдУрд╡рд░рд╣реЗрдб рдХреЛ рдЯрд┐рдордереЗрд▓рд┐рдпрди рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдХрдо рдХрд░ рджреЗрдЧрд╛, рдмрд╕ рдЬрдм рддрдХ рдЖрдк рдкреВрдВрдЫ рдХреЙрд▓ рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

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

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

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

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

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

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