рдЬрдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЕрд╡рд▓реЛрдХрди

рдЬрдВрдЧ рдореЛрдЬрд╝рд┐рд▓рд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдирдИ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИред рднрд╛рд╖рд╛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдмрд╣реБ-рдкреНрд░рддрд┐рдорд╛рди рд╣реИ, рдЗрд╕реЗ C / C ++ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдЗрддрдиреЗ рдЖрд╡реЗрджрдХ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк Google рд╕реЗ D Walter Bright рдпрд╛ Go рдХреЛ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдВрдЧ рдХрд╛рд░реНрдпрд╛рддреНрдордХ, рд╕рдорд╛рдирд╛рдВрддрд░, рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдФрд░ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдЕрд░реНрдерд╛рддред рд▓рдЧрднрдЧ рдкреВрд░реЗ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдХрд╛ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдЧреВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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



рдкрд╣рд▓реА рдЫрд╛рдк


рднрд╛рд╖рд╛ рдХрд╛ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реА-рдЬреИрд╕реА рд╢реИрд▓реА рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдЖрдирдиреНрджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рд╣реИ)ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рд╕рд┐рджреНрдз рд╕реА / рд╕реА ++ рдбрд┐рдЬрд╛рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
use std; fn main(args: [str]) { std::io::println("hello world from " + args[0] + "!"); } 


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ - рднрд╛рдЬреНрдп рдЧрдгрдирд╛ рдХрд╛рд░реНрдп:

 fn fac(n: int) -> int { let result = 1, i = 1; while i <= n { result *= i; i += 1; } ret result; } 


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

рдЫреЛрдЯреА рд▓реЗрдХрд┐рди рджрд┐рд▓рдЪрд╕реНрдк рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ



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

рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░


рдЧреЛ, рдЬреИрд╕реЗ рдЧреЛ, рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдИ рднрд╛рд╖рд╛рдПрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдирдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рд╡рд░реНрддрд┐рдпреЛрдВ - рдПрд▓реЗрдл, рд▓рд┐рдореНрдмреЛ, рдЖрджрд┐ рдХрд╛ рдкреНрд░рднрд╛рд╡ рд╣реИ)ред рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реИ (рдпрд╛, рд░рд╕реНрдЯ рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ, "рд░рд┐рдХреЙрд░реНрдб")
рдкреНрд░рдХрд╛рд░ рдмрд┐рдВрджреБ = {x: рдлреНрд▓реЛрдЯ, y: рдлреНрд▓реЛрдЯ};
рдЖрдк рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдЪрд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░, рдХрд╣реАрдВ рдФрд░, рдЖрдк рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
MySuperPoint = {x: float, y: float} рдЯрд╛рдЗрдк рдХрд░реЗрдВ;
рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдВрдЧреЗред

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

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

рд╡реИрдХреНрдЯрд░ рд╣реИрдВ - рдХреБрдЫ рд╣рдж рддрдХ рдирд┐рдпрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди, рдФрд░ рдХреБрдЫ рдореЗрдВ - std :: stl рд╕реЗ рд╡реЗрдХреНрдЯрд░ред рдХрд┐рд╕реА рд╕реВрдЪреА рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ C / C ++ рдХреА рддрд░рд╣ рдШреБрдВрдШрд░рд╛рд▓реЗ рдирд╣реАрдВ

 let myvec = [1, 2, 3, 4]; 


рдПрдХ рд╡реЗрдХреНрдЯрд░, рдлрд┐рд░ рднреА, рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡реИрдХреНрдЯрд░ рд╕рдВрдШрдирди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред

 let v: mutable [int] = [1, 2, 3]; v += [4, 5, 6]; 


рдкреИрдЯрд░реНрди рд╣реИрдВред C ++ рд╕реЗ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдХреЗ рдвреЗрд░ рдХреЗ рдмрд┐рдирд╛ рдЙрдирдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред

 fn for_rev<T>(v: [T], act: block(T)) { let i = std::vec::len(v); while i > 0u { i -= 1u; act(v[i]); } } type circular_buf<T> = {start: uint, end: uint, buf: [mutable T]}; 


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

 tag shape { circle(point, float); rectangle(point, point); } 


рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреИрдЧ рдЧрдгрдирд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ:

 tag animal { dog; cat; } let a: animal = dog; a = cat; 

рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, "рдЧрдгрдирд╛" рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рдирд┐рд░реНрдорд╛рддрд╛" рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрд░рдЪрдирд╛ рд╣реИред
рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдкреНрд░рдХрд╛рд░ "рд╕реВрдЪреА" рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 tag list<T> { nil; cons(T, @list<T>); } let a: list<int> = cons(10, @cons(12, @nil)); 

рдЯреИрдЧ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
 alt x { cons(a, @cons(b, _)) { process_pair(a,b); } cons(10, _) { process_ten(); } _ { fail; } } 


рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдорд┐рд▓рд╛рди рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рдПрдХ рдмреЗрд╣рддрд░ рд╕реНрд╡рд┐рдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред рд╕рд░реНрд╡реЛрдЪреНрдЪ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рдФрд░ рдлрд┐рд░ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ - рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреИрдЯрд░реНрди рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдВред
 alt my_number { 0 { std::io::println("zero"); } 1 | 2 { std::io::println("one or two"); } 3 to 10 { std::io::println("three to ten"); } _ { std::io::println("something else"); } } 

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

рд╕рдВрдХреЗрдд рджрд┐рдП рдЧрдПред рд╕рд╛рдорд╛рдиреНрдп "рдкреЙрдЗрдВрдЯрд░" рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реВрд╕реНрдЯ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ "рд╕реНрдорд╛рд░реНрдЯ" рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ - рд╕рд╛рдЭрд╛ (рд╕рд╛рдЭрд╛ рдмреЙрдХреНрд╕) рдФрд░ рдЕрджреНрд╡рд┐рддреАрдп (рдпреВрдирд┐рдХ рдмреЙрдХреНрд╕)ред рд╡реЗ C ++ рд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ shared_ptr рдФрд░ unique_ptr рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ: @ рд╕рд╛рдЭрд╛ рдХреЗ рд▓рд┐рдП рдФрд░ ~ рдЕрджреНрд╡рд┐рддреАрдп рдХреЗ рд▓рд┐рдПред рдЕрджреНрд╡рд┐рддреАрдп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП, рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрд╢рди рд╣реИ - рдЪрд▓рддреА:
 let x = ~10; let y <- x; 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрджрдо рдХреЗ рдмрд╛рдж, рд╕реВрдЪрдХ рдПрдХреНрд╕ рдЕрд╕рдорд╛рди рд╣реИред

рдХреНрд▓реЛрдЬрд░, рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ


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

1. рд▓реИрдореНрдмреНрдбрд╛ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрд╕реНрдЯреЗрдб рдлрдВрдХреНрд╢рди рдпрд╛ рдлрдВрдХреНрд╢рди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 fn make_plus_function(x: int) -> lambda(int) -> int { lambda(y: int) -> int { x + y } } let plus_two = make_plus_function(2); assert plus_two(3) == 5; 


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЗрдХрдкреНрд▓рд╕_рдлрдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдХреЗ int рдХреЗ рдПрдХ рддрд░реНрдХ "x" рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ "int-> int" рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рд▓реИрдореНрдмреНрдбрд╛ рдХреАрд╡рд░реНрдб рд╣реИ)ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред "рд░рд┐рдЯрд░реНрди" рдСрдкрд░реЗрдЯрд░ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдереЛрдбрд╝рд╛ рднреНрд░рд╛рдордХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдлрдкреА рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИред

2. рдмреНрд▓реЙрдХ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ, рдЬрд┐рд╕реЗ рдирд┐рдпрдорд┐рдд рдХреЛрдб рдХреЗ рдмреНрд▓реЙрдХ рдХреА рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
 fn map_int(f: block(int) -> int, vec: [int]) -> [int] { let result = []; for i in vec { result += [f(i)]; } ret result; } map_int({|x| x + 1 }, [1, 2, 3]); 


рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ - рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ "рдЗрдВрдЯ-> рдЗрдВрдЯ" рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рд▓рдВрдмреЛ рдлрд╝рдВрдХреНрд╢рди, рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реЗрдХреНрдЯрд░ рдЗрдВрдЯ (рдиреАрдЪреЗ рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ)ред рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ "рдмреНрд▓реЙрдХ" рд╕реНрд╡рдпрдВ рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ {x | x + 1}ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ C # рдореЗрдВ рд▓реИрдореНрдмрджрд╛рд╕ рдкрд╕рдВрдж рд╣реИ, рдкреНрд░рддреАрдХ | рдпрд╣ рджреГрдврд╝рддрд╛ рд╕реЗ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдпрд╛ (рдЬреЛ, рд╡реИрд╕реЗ, рд░реБрд╕реНрдд рдореЗрдВ рднреА рдореМрдЬреВрдж рд╣реИ, рд╕рднреА рдкреБрд░рд╛рдиреЗ рдЕрдЪреНрдЫреЗ syshny рд╕рдВрдЪрд╛рд▓рди рдХреА рддрд░рд╣) рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

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

 let daynum = bind std::vec::position(_, ["mo", "tu", "we", "do", "fr", "sa", "su"]) 


рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рд╛рдзрд╛рд░рдг рд╕реА рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрд╡рд░рдг рдмрдирд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
const char* daynum (int i) { const char *s ={"mo", "tu", "we", "do", "fr", "sa", "su"}; return s[i]; }

рд▓реЗрдХрд┐рди рдПрдХ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рд╣реИ, рди рдХрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдПрдХ (рд╡реИрд╕реЗ, рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рдХрд░реЗрдВ)

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг: рдРрдб рдлрд╝рдВрдХреНрд╢рди рджреЛ рдЗрдВрдЯ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЗрдВрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рдПрдХрд▓_рдкрд░рдо_рдПрдлрдПрди рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдВрддрд░ рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЗрдВрдЯ рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИред рдмрд╛рдЗрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рджреЛ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ add4 рдФрд░ add5 рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдРрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВред

 fn add(x: int, y: int) -> int { ret x + y; } type single_param_fn = fn(int) -> int; let add4: single_param_fn = bind add(4, _); let add5: single_param_fn = bind add(_, 5); 


рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд░рд╣ рд╣реА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
 assert (add(4,5) == add4(5)); assert (add(4,5) == add5(4)); 


4. рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА
рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ (рдЙрди рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд рдЬреЛ рд╢реБрджреНрдз рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЛ рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВ)ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рд╢реБрджреНрдз рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
  pure fn lt_42(x: int) -> bool { ret (x < 42); } 

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

рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдореИрдХреНрд░реЛрдЬрд╝
рдпреЛрдЬрдирд╛рдмрджреНрдз рд╕реБрд╡рд┐рдзрд╛, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рдЬрдВрдЧ рдореЗрдВ, рдпрд╣ рдЕрднреА рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╣реИред
 std::io::println(#fmt("%s is %d", "the answer", 42)); 

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

рдЧреБрдг


C # рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ (рдФрд░ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рднреА)ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рджред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдореЗрдЯрд╛-рд╕реВрдЪрдирд╛ рдХреЛ рдЙрд╕ рдЗрдХрд╛рдИ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рдПрдиреЛрдЯреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ,
 #[cfg(target_os = "win32")] fn register_win_service() { /* ... */ } 

рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде, рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЬреЛ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдХрдЯрддрдо рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
 fn register_win_service() { #[cfg(target_os = "win32")]; /* ... */ } 


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


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

рдПрдХ рдХрд╛рд░реНрдп рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрд╛рд░реНрдп рд╕реНрдкреЙрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдореЗрдВ рдЪреИрдирд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╣ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЪреИрдирд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд╛рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдЪреИрдирд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд╛рди рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреИрдирд▓ рд╣реИред
рдЪреИрдирд▓ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реЗрдВрдб рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдЪреИрдирд▓ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рднреЗрдЬрдиреЗ рдХрд╛ рдорд╛рди рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдВрддрд░рд┐рдХ рдЪреИрдирд▓ рдмрдлрд░ рдореЗрдВ рдореВрд▓реНрдп рд░рдЦрддрд╛ рд╣реИред
рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреЛрд░реНрдЯ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреЛрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ рдкреЛрд░реНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдкреЛрд░реНрдЯрд┐рдЬреНрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдмрд╛рдЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ - рдкреЛрд░реНрдЯред
рдкреЛрд░реНрдЯ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд░рдИрд╡реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рддрд░реНрдХ рдкреЛрд░реНрдЯ рд╣реИ, рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдкреЛрд░реНрдЯ рд╕реЗ рдбреЗрдЯрд╛ рд╣реИред рдкрдврд╝рдирд╛ рдХрд╛рд░реНрдп рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдпрджрд┐ рдкреЛрд░реНрдЯ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдХрд╛рд░реНрдп рдкреЛрд░реНрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рдЪреИрдирд▓ рдХреЛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИред
рдЪреИрдирд▓ рдХреЛ рдкреЛрд░реНрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЛрд░реНрдЯ рдХреЛ рдЪреИрдирд▓ рд╕реЗ рдЖрд░рдВрдн рдХрд░рдирд╛
let reqport = port();
let reqchan = chan(reqport);

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

Typestate


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

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

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

рдмрд╛рдзрд╛рдПрдВ рд╡рд┐рд╢реЗрд╖ рдЬрд╛рдВрдЪ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рди рдХреЗ рдЪрд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪреЗрдХ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
 pure fn is_less_than(int a, int b) -< bool { ret a < b; } fn test() { let x: int = 10; let y: int = 20; check is_less_than(x,y); } 

рд╡рд┐рдзреЗрдпрдХреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ "рд▓рдЯрдХрд╛" рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 fn test(int x, int y) : is_less_than(x,y) { ... } 


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

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

Source: https://habr.com/ru/post/In135712/


All Articles