рдЬреВрд▓рд┐рдпрд╛ рд╕реЗ 6 рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреБрд░реБрд╖


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


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


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ Rackauckas 7 рдЬреВрд▓рд┐рдпрд╛ Gotchas рдФрд░ рдХреИрд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмреНрд▓реЙрдЧ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╣реИ


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


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


рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ: REPL (рдЯрд░реНрдорд┐рдирд▓) рдореЗрдВ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ


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


рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░: рдХреНрдпреЛрдВ рдЬреВрд▓рд┐рдпрд╛ рддреЗрдЬ рд╣реИ


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


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


 function f(a,b) return 2a+b end 

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ , рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдпрд╣рд╛рдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдЬреВрд▓рд┐рдпрд╛ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрдореВрд░реНрдд рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдпрджрд┐ рдЖрдк f(2.0,3.0) рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреВрд▓рд┐рдпрд╛ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдЪрд▓рд╛рдПрдЧрд╛, рдЬреЛ рджреЛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ 2a + b ред рдпрджрд┐ рдЖрдк f(2,3) , рддреЛ рдЬреВрд▓рд┐рдпрд╛ рдПрдХ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдЪрд▓рд╛рдПрдЧрд╛ рдЬреЛ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ 2a + b ред рдлрд╝рдВрдХреНрд╢рди f рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдореВрд░реНрдд рдпрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рд░реВрдк рд╣реИ, рдФрд░ рдЗрди рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХ рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдРрд╕реА рдпреЛрдЬрдирд╛ рдХреЛ рдХрдИ рдкреНрд░реЗрд╖рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ: + рдСрдкрд░реЗрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реИред рдЬреВрд▓рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреА рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдЬреЛ f (2.0,3.0) рдХрд╣рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рд╣реИ рдЬреЛ рдЖрдк C / рдлреЛрд░рдЯреНрд░рд╛рди рдореЗрдВ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ code_native рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 @code_native f(2.0,3.0) 

 pushq %rbp movq %rsp, %rbp Source line: 2 vaddsd %xmm0, %xmm0, %xmm0 vaddsd %xmm1, %xmm0, %xmm0 popq %rbp retq nop 

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


 @code_native f(2,3) pushq %rbp movq %rsp, %rbp Source line: 2 leaq (%rdx,%rcx,2), %rax popq %rbp retq nopw (%rax,%rax) 

рд╕рд╛рд░: REPL / рдЧреНрд▓реЛрдмрд▓ рд╕реНрдХреЛрдк рдкреНрд░рдХрд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ


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


 function outer() a = 5 function inner() return 2a end b = inner() return 3a+b end 

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


 a=2.0; b=3.0 function linearcombo() return 2a+b end ans = linearcombo() 

рдФрд░


 a = 2; b = 3 ans2= linearcombo() 

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


рдмреЛрдЭрд┐рд▓
 pushq %rbp movq %rsp, %rbp pushq %r15 pushq %r14 pushq %r12 pushq %rsi pushq %rdi pushq %rbx subq $96, %rsp movl $2147565792, %edi # imm = 0x800140E0 movabsq $jl_get_ptls_states, %rax callq *%rax movq %rax, %rsi leaq -72(%rbp), %r14 movq $0, -88(%rbp) vxorps %xmm0, %xmm0, %xmm0 vmovups %xmm0, -72(%rbp) movq $0, -56(%rbp) movq $10, -104(%rbp) movq (%rsi), %rax movq %rax, -96(%rbp) leaq -104(%rbp), %rax movq %rax, (%rsi) Source line: 3 movq pcre2_default_compile_context_8(%rdi), %rax movq %rax, -56(%rbp) movl $2154391480, %eax # imm = 0x806967B8 vmovq %rax, %xmm0 vpslldq $8, %xmm0, %xmm0 # xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7] vmovdqu %xmm0, -80(%rbp) movq %rdi, -64(%rbp) movabsq $jl_apply_generic, %r15 movl $3, %edx movq %r14, %rcx callq *%r15 movq %rax, %rbx movq %rbx, -88(%rbp) movabsq $586874896, %r12 # imm = 0x22FB0010 movq (%r12), %rax testq %rax, %rax jne L198 leaq 98096(%rdi), %rcx movabsq $jl_get_binding_or_error, %rax movl $122868360, %edx # imm = 0x752D288 callq *%rax movq %rax, (%r12) L198: movq 8(%rax), %rax testq %rax, %rax je L263 movq %rax, -80(%rbp) addq $5498232, %rdi # imm = 0x53E578 movq %rdi, -72(%rbp) movq %rbx, -64(%rbp) movq %rax, -56(%rbp) movl $3, %edx movq %r14, %rcx callq *%r15 movq -96(%rbp), %rcx movq %rcx, (%rsi) addq $96, %rsp popq %rbx popq %rdi popq %rsi popq %r12 popq %r14 popq %r15 popq %rbp retq L263: movabsq $jl_undefined_var_error, %rax movl $122868360, %ecx # imm = 0x752D288 callq *%rax ud2 nopw (%rax,%rax) 

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


 a = 1 for i = 1:100 a += a + f(a) end 

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


рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХреИрд╕реЗ рдмрдЪреЗрдВ


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


 function geta(a) # can also just define a=1 here for i = 1:100 a += a + f(a) end return a end a = geta(1) 

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


 const b = 5 

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


 const a = 5 f() = a println(f()) # Prints 5 a = 6 println(f()) # Prints 5 # WARNING: redefining constant a 

рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ, рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╡рд╣ f () = a (рдЪреВрдВрдХрд┐ рдПрдХ рд╕реНрдерд┐рд░ рд╣реИ) рдХрд╛ рдЙрддреНрддрд░ рдЬрд╛рдирддрд╛ рд╣реИ, рдмрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬрд╡рд╛рдм рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рдирд┐рд░рдВрддрд░ рдирд╣реАрдВ рдерд╛ рддреЛ a рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗред


Moral: рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдзреЗ REPL рдореЗрдВ рди рд▓рд┐рдЦреЗрдВ, рд╣рдореЗрд╢рд╛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯреЗрдВред


Nezhdanchik рджреЛ: рдЯрд╛рдЗрдк рдЕрд╕реНрдерд┐рд░рддрд╛


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


 function g() x=1 for i = 1:10 x = x/2 end return x end 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ 1/2 рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдордиреЗ x = 1 рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрдВрддрд░рд┐рдХ рд▓реВрдк рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдерд╛:


 function h() x=1.0 for i = 1:10 x = x/2 end return x end 

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


рдореВрд▓ рдкрд╛рдж
 pushq %rbp movq %rsp, %rbp pushq %r15 pushq %r14 pushq %r13 pushq %r12 pushq %rsi pushq %rdi pushq %rbx subq $136, %rsp movl $2147565728, %ebx # imm = 0x800140A0 movabsq $jl_get_ptls_states, %rax callq *%rax movq %rax, -152(%rbp) vxorps %xmm0, %xmm0, %xmm0 vmovups %xmm0, -80(%rbp) movq $0, -64(%rbp) vxorps %ymm0, %ymm0, %ymm0 vmovups %ymm0, -128(%rbp) movq $0, -96(%rbp) movq $18, -144(%rbp) movq (%rax), %rcx movq %rcx, -136(%rbp) leaq -144(%rbp), %rcx movq %rcx, (%rax) movq $0, -88(%rbp) Source line: 4 movq %rbx, -104(%rbp) movl $10, %edi leaq 477872(%rbx), %r13 leaq 10039728(%rbx), %r15 leaq 8958904(%rbx), %r14 leaq 64(%rbx), %r12 leaq 10126032(%rbx), %rax movq %rax, -160(%rbp) nopw (%rax,%rax) L176: movq %rbx, -128(%rbp) movq -8(%rbx), %rax andq $-16, %rax movq %r15, %rcx cmpq %r13, %rax je L272 movq %rbx, -96(%rbp) movq -160(%rbp), %rcx cmpq $2147419568, %rax # imm = 0x7FFF05B0 je L272 movq %rbx, -72(%rbp) movq %r14, -80(%rbp) movq %r12, -64(%rbp) movl $3, %edx leaq -80(%rbp), %rcx movabsq $jl_apply_generic, %rax vzeroupper callq *%rax movq %rax, -88(%rbp) jmp L317 nopw %cs:(%rax,%rax) L272: movq %rcx, -120(%rbp) movq %rbx, -72(%rbp) movq %r14, -80(%rbp) movq %r12, -64(%rbp) movl $3, %r8d leaq -80(%rbp), %rdx movabsq $jl_invoke, %rax vzeroupper callq *%rax movq %rax, -112(%rbp) L317: movq (%rax), %rsi movl $1488, %edx # imm = 0x5D0 movl $16, %r8d movq -152(%rbp), %rcx movabsq $jl_gc_pool_alloc, %rax callq *%rax movq %rax, %rbx movq %r13, -8(%rbx) movq %rsi, (%rbx) movq %rbx, -104(%rbp) Source line: 3 addq $-1, %rdi jne L176 Source line: 6 movq -136(%rbp), %rax movq -152(%rbp), %rcx movq %rax, (%rcx) movq %rbx, %rax addq $136, %rsp popq %rbx popq %rdi popq %rsi popq %r12 popq %r13 popq %r14 popq %r15 popq %rbp retq nop 

рдХреЗ рдЦрд┐рд▓рд╛рдл


рдиреАрдЯ рдЕрд╕реЗрдореНрдмрд▓рд░ рд╕реНрдкреЗрд▓
 pushq %rbp movq %rsp, %rbp movabsq $567811336, %rax # imm = 0x21D81D08 Source line: 6 vmovsd (%rax), %xmm0 # xmm0 = mem[0],zero popq %rbp retq nopw %cs:(%rax,%rax) 

рд╕рдорд╛рди рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдРрд╕рд╛ рдЕрдВрддрд░!


рдЯрд╛рдЗрдк рдЕрд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ рдФрд░ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ



рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ: "рдареАрдХ рд╣реИ, рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдЗрди рдЕрд╕реНрдерд┐рд░рддрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рди рдХрд░рдиреА рдкрдбрд╝реЗ?" рдЙрддреНрддрд░ рд╣реИ:


  1. рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ
  2. рд╡реЗ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  3. рдЖрдк рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрд╕реНрдерд┐рд░рддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ


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


     @code_warntype g() 


рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
 Variables: #self#::#g x::ANY #temp#@_3::Int64 i::Int64 #temp#@_5::Core.MethodInstance #temp#@_6::Float64 Body: begin x::ANY = 1 # line 3: SSAValue(2) = (Base.select_value)((Base.sle_int)(1,10)::Bool,10,(Base.box)(Int64,(Base.sub_int)(1,1)))::Int64 #temp#@_3::Int64 = 1 5: unless (Base.box)(Base.Bool,(Base.not_int)((#temp#@_3::Int64 === (Base.box)(Int64,(Base.add_int)(SSAValue(2),1)))::Bool)) goto 30 SSAValue(3) = #temp#@_3::Int64 SSAValue(4) = (Base.box)(Int64,(Base.add_int)(#temp#@_3::Int64,1)) i::Int64 = SSAValue(3) #temp#@_3::Int64 = SSAValue(4) # line 4: unless (Core.isa)(x::UNION{FLOAT64,INT64},Float64)::ANY goto 15 #temp#@_5::Core.MethodInstance = MethodInstance for /(::Float64, ::Int64) goto 24 15: unless (Core.isa)(x::UNION{FLOAT64,INT64},Int64)::ANY goto 19 #temp#@_5::Core.MethodInstance = MethodInstance for /(::Int64, ::Int64) goto 24 19: goto 21 21: #temp#@_6::Float64 = (x::UNION{FLOAT64,INT64} / 2)::Float64 goto 26 24: #temp#@_6::Float64 = $(Expr(:invoke, :(#temp#@_5), :(Main./), :(x::Union{Float64,Int64}), 2)) 26: x::ANY = #temp#@_6::Float64 28: goto 5 30: # line 6: return x::UNION{FLOAT64,INT64} end::UNION{FLOAT64,INT64} 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЯрд╛рдЗрдк рдПрдХреНрд╕ Any ред рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ strict type рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдПрдХ рдЕрдореВрд░реНрдд рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдмреЙрдХреНрд╕рд┐рдВрдЧ / рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрдд рдореЗрдВ рд╣рдо x рдХреЛ UNION {FLOAT64, INT64} рд░реВрдк рдореЗрдВ UNION {FLOAT64, INT64} , рдЬреЛ рдПрдХ рдФрд░ рдЧреИрд░-рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдпрджрд┐ рд╣рдо h рд▓рд┐рдП code_warntype рдХреЛ code_warntype , рддреЛ рд╣рдореЗрдВ рд╕рднреА рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рдорд┐рд▓рддреЗ рд╣реИрдВ:


 @code_warntype h() Variables: #self#::#h x::Float64 #temp#::Int64 i::Int64 Body: begin x::Float64 = 1.0 # line 3: SSAValue(2) = (Base.select_value)((Base.sle_int)(1,10)::Bool,10,(Base.box)(Int64,(Base.sub_int)(1,1)))::Int64 #temp#::Int64 = 1 5: unless (Base.box)(Base.Bool,(Base.not_int)((#temp#::Int64 === (Base.box)(Int64,(Base.add_int)(SSAValue(2),1)))::Bool)) goto 15 SSAValue(3) = #temp#::Int64 SSAValue(4) = (Base.box)(Int64,(Base.add_int)(#temp#::Int64,1)) i::Int64 = SSAValue(3) #temp#::Int64 = SSAValue(4) # line 4: x::Float64 = (Base.box)(Base.Float64,(Base.div_float)(x::Float64,(Base.box)(Float64,(Base.sitofp)(Float64,2)))) 13: goto 5 15: # line 6: return x::Float64 end::Float64 

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


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


рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд╕реНрдерд┐рд░рддрд╛рдУрдВ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ



рдЯрд╛рдЗрдк рдЕрд╕реНрдерд┐рд░рддрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрджрд┐ рдЖрдк рд╕реА / рдлреЛрд░рдЯреНрд░рд╛рди рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ), рддреЛ рдЖрдк рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 local a::Int64 = 5 

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


 a = (b/c)::Float64 

рдпрд╣ рдХрд╣рдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ: "b / c рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ Float64 рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рд░реВрдкрд╛рдВрддрд░рдг рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред" рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рд░рдЦрдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЯрд╛рдЗрдк рдЕрд╕реНрдерд┐рд░рддрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреЛрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рдкрд╛рдЧрд▓ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:


 arr = Vector{Union{Int64,Float64}}(undef, 4) arr[1]=4 arr[2]=2.0 arr[3]=3.2 arr[4]=1 

рдЬреЛ 4x1 рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдФрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ Union {Int64, Float64} , рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рдерд╛, рд╕рдЦреНрдд рдирд╣реАрдВ рдерд╛, рдЬрд┐рд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рдереАрдВред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдпрд╛ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрддреНрд╡ рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдЕрдВрдХрдЧрдгрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 function foo{T,N}(array::Array{T,N}) for i in eachindex(array) val = array[i] # do algorithm X on val end end 

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


 function inner_foo{T<:Number}(val::T) # Do algorithm X on val end function foo2{T,N}(array::Array{T,N}) for i in eachindex(array) inner_foo(array[i]) end end 

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


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


рд╕рд░рдкреНрд░рд╛рдЗрдЬрд╝ 3: рдПрд╡рд▓ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ



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


 macro defa() :(a=5) end 

рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА defa рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ a = 5 ( :(a = 5) рдХреЛ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рдХреЛрдб рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ)ред


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


 @eval :(a=5) 

(REPL). , / . рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 function testeval() @eval :(a=5) return 2a+5 end 

, a REPL. , , :


 function testeval() @eval :(a=5) b = a::Int64 return 2b+5 end 

b тАФ , , , , , . eval , , REPL .


4:


Julia , . : , .


, ? , , . рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 a = 2 + 3 + 4 + 5 + 6 + 7 +8 + 9 + 10+ 11+ 12+ 13 a 

, 90, 27. ? a = 2 + 3 + 4 + 5 + 6 + 7 , a = 27 , +8 + 9 + 10+ 11+ 12+ 13 , , , :


 a = 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10+ 11+ 12+ 13 

90, . , .


. тАФ , . rssdev10

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


 x = rand(2,2) a = [cos(2*pi.*x[:,1]).*cos(2*pi.*x[:,2])./(4*pi) -sin(2.*x[:,1]).*sin(2.*x[:,2])./(4)] b = [cos(2*pi.*x[:,1]).*cos(2*pi.*x[:,2])./(4*pi) - sin(2.*x[:,1]).*sin(2.*x[:,2])./(4)] 

, a b тАФ , ! (2,2) , тАФ (1-) 2. , , :


 a = [1 -2] b = [1 - 2] 

: 1 -2 . : 1-2 . - . :


 a = [1 2 3 -4 2 -3 1 4] 

2x4. , . : hcat :


 a = hcat(cos(2*pi.*x[:,1]).*cos(2*pi.*x[:,2])./(4*pi),-sin(2.*x[:,1]).*sin(2.*x[:,2])./(4)) 

!


тДЦ5: ,



(View) тАФ () , ( ), .

, , . , . , .

тАФ "". "" , . "" тАФ ( ). ( () ) . , :


 a = [3;4;5] b = a b[1] = 1 

, a тАФ [1; 4; 5] , . . b a . , b = a b a . , , b , , ( b a ). , . , , :


 a = rand(2,2) # Makes a random 2x2 matrix b = vec(a) # Makes a view to the 2x2 matrix which is a 1-dimensional array 

b , b a , b . , , ( , ). . , . рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 c = a[1:2,1] 

( , c a ). , , , , . , , :


 d = @view a[1:2,1] e = view(a,1:2,1) 

d , e тАФ , d e a , , , . ( , , тАФ reshape , .) , . рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 a[1:2,1] = [1;2] 

a , a[1:2,1] view (a, 1:2,1) , , a . -? , :


 b = copy(a) 

, b a , , b a . a , copy! (B, a) , a a ( , b ). . , Vector {Vector} :


 a = [ [1, 2, 3], [4, 5], [6, 7, 8, 9] ] 

. , ?


 b = copy(a) b[1][1] = 10 a 

 3-element Array{Array{Int64,1},1}: [10, 2, 3] [4, 5] [6, 7, 8, 9] 

, a[1][1] 10! ? copy a . a , b , b . , deepcopy :


 b = deepcopy(a) 

, . , , .


тДЦ6: , In-Place


MATLAB / Python / R . Julia , , , " ". (. . , , , , ). (in-place), . ? in-place ( mutable function ) тАФ , , . , . , :


 function f() x = [1;5;6] for i = 1:10 x = x + inner(x) end return x end function inner(x) return 2x end 

, inner , , 2x . , . , - y , :


 function f() x = [1;5;6] y = Vector{Int64}(3) for i = 1:10 inner(y,x) for i in 1:3 x[i] = x[i] + y[i] end copy!(y,x) end return x end function inner!(y,x) for i=1:3 y[i] = 2*x[i] end nothing end 

. inner!(y, x) , y . y , y , , , inner! (y, x) . , , mutable (, ""). ! ( ).


, inner!(y, x) . copy!(y, x) тАФ , x y , . , , . : x y . , x + inner(x) , , , 11 . , .


, , , . - ( loop-fusion ). Julia v0.5 . ( ( broadcast ), ). , f.(x) тАФ , f x , , . f x , x = x + f. (x) . :


 x .= x .+ f.(x) 

.= , , ,


 for i = 1:length(x) x[i] = x[i] + f(x[i]) end 

, :


 function f() x = [1;5;6] for i = 1:10 x .= x .+ inner.(x) end return x end function inner(x) return 2x end 

MATLAB / R / Python , , , . , , C / Fortran .


: ,


: , . , . , . , , . , .


- , C / Fortran , . - , , !


: ? , . , , ? [ , Javascript var x = 3 x , x = 3 x . ? , - Javascript!]

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


All Articles