рдЕрдЧрд░ рдореИрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди d2 рдХреЛ рдлрд╝рдВрдХреНрд╢рди d1 рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ d2 рдХрд╣рддрд╛ рд╣реИ рддреЛ d2 рдмрджрд▓реЗрдВ, d1 d2 рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдпрд╣ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдм precompiled рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЗрд╕ рдХреА рдПрдХ рдиреЛрдЯ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдХреНрдпрд╛ рдкреБрд░рд╛рдиреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд▓реЙрдиреНрдЧрдЬрдВрдк рдХреЗ рд╕рд╛рде рдирдП рдореЗрдВ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?
(рдЬреНрдпрд╛рджрд╛рддрд░ REPL рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреВрд░реНрдг рднрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛)
julia> function d2()
a
end
julia> function d()
d2()
end
julia> d()
in d: a not defined
julia> function d2()
b=2
end
julia> d()
in d: a not defined
julia> d2
Methods for generic function d2
d2() at prompt:2
julia> function d()
d2()
end
julia> d()
2
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП d2()
рдХрд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рд╕рдордп d()
рдкрджреНрдзрддрд┐ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдк d2()
рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХреЗред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ d()
рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЕрднреА рднреА рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ: - /
рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдирд╣реАрдВ рдерд╛ :)
рдпрд╣ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рд╣реИ; рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ JIT рдХреЛ рдХрд╛рдо рдкрд░ рджреЗрдЦрдиреЗ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рддрдХ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
julia> function f2()
a
end
julia> function f1()
f2()
end
julia> function f2()
2
end
julia> f1()
2
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ REPL рдореЗрдВ рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдирд╛рдЯрдХреАрдп рдлреИрд╢рди рдореЗрдВ рдЕрдВрддрд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдпрд╣ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕рдореАрдХрд░рдг рдпрд╛ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛!
рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдкрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:
рдкреВрд░реНрд╡ рдХреЛ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЛ рдмрджрд▓рдХрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЗрд╕реЗ рдЬрдЧрд╣ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдирдП рд╕реНрдерд╛рди рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рд┐рдВрдЧ рд╕рд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдкреБрд░рд╛рдиреЗ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЛ рдПрдХ рд╕реНрдЯрдм рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреВрджрддрд╛ рд╣реИ , рдХреЙрд▓рд┐рдВрдЧ рд╕рд╛рдЗрдЯ рдкреИрдЪрд┐рдВрдЧред рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрди рдХреЙрд▓рд░реНрд╕ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд░реА-рдЬреЗрдЖрдИрдЯреА рдХрд┐рдпрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рд╕рдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рднрд▓реЗ рд╣реА рдХреЛрдИ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреА рд╣реИ рд╡рд╣ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╡рд┐рдзрд┐ рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред
рдЕрдВрдХ 47 рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдУрд╣ред рдЦреИрд░, рдЪреВрдВрдХрд┐ рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрддреНрддрд░ рд╣реИ рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИ, рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдареАрдХ рд╣реИред рд░рди-рдЯрд╛рдЗрдо рдореЗрдВ, рдпрд╣ рд▓рдЧрднрдЧ рдХрднреА рднреА рдХрд┐рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрдпреЛрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝рдХрд░ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдпрджрд┐ рд╕рдорд╛рдзрд╛рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрд░рд┐ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрддрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдП?
рд╣рдореЗрдВ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред
рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдпрд╣ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдореА рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рддреЛ рдЬреВрд▓рд┐рдпрд╛ рдЬреЛ рдЪрд╛рд╣реЗ рдХрд░ рд╕рдХрддреА рд╣реИ, рдЗрд╕рдореЗрдВ рд╡рд╣ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд░рддреА рд╣реИред рд╡рд┐рдзрд┐ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдмрдЧ рдлрд┐рдХреНрд╕ рдирд╣реАрдВред рдореБрдЭреЗ рдпрд╣ рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ v1.0 рдореБрджреНрджрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдПрдХ рдЯреВрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИред рдпрд╣ v1.1 рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡реИрдз v1.0 рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдкреНрдкрд▓ рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо / рдПрд▓рдПрд▓рдбреАрдмреА рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рд╕реЗ рдЧреНрд░реЗрдЧ рдХреНрд▓реЗрдЯрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдереЗ рдХрд┐ рдПрд▓рд┐рд╕рд┐рдЯ рдХреИрд╕реЗ рдХрд░реЗрдВ (рдПрд▓рдПрд▓рдбреАрдмреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде, llvm рдХрд╛ рдПрдХ рдЙрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдПрдореНрдмреЗрдбреЗрдб рдкреНрд░рддреАрдХ рдЬрд╛рдирдХрд╛рд░реА (рдкреНрд░рддреАрдХ рдЖрдпрд╛рдд) рд╕реЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА; рдмрд╛рдЗрдирд░реА рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдЙрди рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде (рдкреВрд░реНрдг рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ)ред
31 рдорд╛рд░реНрдЪ 2012 рдХреЛ, 11:02 рдмрдЬреЗ, рдЬреЗрд╕рди рдИред рдПрдЯреЗрди рдиреЗ рд▓рд┐рдЦрд╛:
рдкреНрд░рд┐рдп LLDB рдЙрддреНрд╕рд╛рд╣реА,
рдЕрдЧрд░ рдореИрдВ OSX рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ lldb рд▓рд╛рдЗрдмреНрд░реЗрд░реА / рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рддреЛ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЕрдм рдкреНрд░рддреАрдХреЛрдВ рдХреА рджреЛ рд╕реВрдЪрд┐рдпрд╛рдБ рд▓реМрдЯреЗрдВ- (dyldinfo -lazy_bind -exports) рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рдорд╛рди
); рдпрд╛рдиреА рдореБрдЭреЗ рдмрд╛рдЗрдирд░реА рд╢реЗрдпрд░реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдмрдВрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореЗрд░реА рдЖрд╢рд╛ рдереА рдХрд┐ рдПрдХ lldb рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВ OSX рдкрд░ рдЙрд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдКрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╣реИред (рдХреЛрдб рдХрд╛ рд▓рд┐рдирдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП libbfd рдФрд░ libdld рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдереЛрдбрд╝рд╛ рдкреНрдпрд╛рд░ / рд░рдЦрд░рдЦрд╛рд╡ рд╣реЛ рд░рд╣рд╛ рд╣реИ)ред
рдореИрдВ рд╢рд╛рдорд┐рд▓ / lldb / рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lldb рдХреЛ рдЗрд╕реА рдЬрд╛рдирдХрд╛рд░реА (рдЖрдпрд╛рддрд┐рдд рдкреНрд░рддреАрдХ рд╕реВрдЪреА, рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЧрдИ рдЪрд┐рд╣реНрди рд╕реВрдЪреА) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред Lldb рдореЗрдВ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реБрдЭрд╛рд╡реЛрдВ / рд╕рдВрдХреЗрдд рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛!
рдзрдиреНрдпрд╡рд╛рджред
рдЬреЗрд╕рдирдпрджрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ dyldinfo рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ: (рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЗрд╡рд▓ рдкреНрд░рддреАрдХ рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкрддреЗ рдпрд╛ рдЦрдВрдб рдпрд╛ рдЕрдиреБрднрд╛рдЧ рдХреА рдирд╣реАрдВ):
$ рдлрд╝рд╛рдЗрд▓ / tmp / sample_bundle
/ tmp / sample_bundle: Mach-O 64-рдмрд┐рдЯ рдмрдВрдбрд▓ x86_64$ dyldinfo -lazy_bind -export / tmp / sample_bundle
рдЖрд▓рд╕реА рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА (dyld рдЬрд╛рдирдХрд╛рд░реА рдХреЗ lazy_bind рднрд╛рдЧ рд╕реЗ):
рдЦрдВрдб рдЦрдВрдб рдкрддрд╛ рд╕реВрдЪрдХрд╛рдВрдХ dylib рдкреНрд░рддреАрдХ
__DATA __la_symbol_ptr 0x00001030 0x0000 рдлреНрд▓реИрдЯ-рдирд╛рдорд╕реНрдерд╛рди __mm_pop_chunk
__DATA __la_symbol_ptr 0x00001038 0x0015 рдлреНрд▓реИрдЯ-рдирд╛рдорд╕реНрдерд╛рди _dh_define
рдирд┐рд░реНрдпрд╛рдд рдЬрд╛рдирдХрд╛рд░реА (trie рд╕реЗ):
0x000008A0 _C_ipair
0x00000920 _init_ipair
0x00000BC0 _C_iprot
0x00000C40 _C_ipi2
0x00000CC0 _C_ipi1
0x00001040 _K_ipair_R43808f40
0x00001160 _K_ipi1_R5cb4475d
0x00001260 _K_ipi2_R5cb4475d
0x00001360 _K_iprot_Rfc8fe739
0x00001460 _majver_ipair
0x00001464 _minver_ipair
рд╕реЛрдо, 2 рдЕрдкреНрд░реИрд▓, 2012 рдХреЛ 3:13 рдмрдЬреЗ, рдЧреНрд░реЗрдЧ рдХреНрд▓реЗрдЯрди [email protected] рдиреЗ рд▓рд┐рдЦрд╛:
Yes you can do this with LLDB. If you load a binary and dump its symbol table, you will see the information you want. For symbols that are lazily bound, you can look for "Trampoline" symbols:
cd lldb/test/lang/objc/foundation
make
lldb a.out
(lldb) target modules dump symtab a.out
Symtab, file = .../lldb/test/lang/objc/foundation/a.out, num_symbols = 54:
Debug symbol
|Synthetic symbol
||Externally Visible
|||
Index UserID DSX Type File Address/Value Load Address Size Flags Name
------- ------ --- ------------ ------------------ ------------------ ------------------ ---------- ----------------------------------
[ 0] 0 D SourceFile 0x0000000000000000 Sibling -> [ 15] 0x00640000 /Volumes/work/gclayton/Documents/src/lldb/test/lang/objc/foundation/main.m
[ 1] 2 D ObjectFile 0x000000004f79f1ca 0x0000000000000000 0x00660001 /Volumes/work/gclayton/Documents/src/lldb/test/lang/objc/foundation/main.o
[ 2] 4 D Code 0x00000001000010f0 0x00000000000000c0 0x000e0000 -[MyString initWithNSString:]
[ 3] 8 D Code 0x00000001000011b0 0x0000000000000090 0x000e0000 -[MyString dealloc]
[ 4] 12 D Code 0x0000000100001240 0x00000000000000a0 0x000e0000 -[MyString description]
[ 5] 16 D Code 0x00000001000012e0 0x0000000000000020 0x000e0000 -[MyString descriptionPauses]
[ 6] 20 D Code 0x0000000100001300 0x0000000000000030 0x000e0000 -[MyString setDescriptionPauses:]
[ 7] 24 D Code 0x0000000100001330 0x0000000000000030 0x000e0000 -[MyString str_property]
[ 8] 28 D Code 0x0000000100001360 0x0000000000000050 0x000e0000 -[MyString setStr_property:]
[ 9] 32 D Code 0x00000001000013b0 0x0000000000000040 0x000f0000 Test_Selector
[ 10] 36 D Code 0x00000001000013f0 0x0000000000000130 0x000f0000 Test_NSString
[ 11] 40 D Code 0x0000000100001520 0x0000000000000120 0x000f0000 Test_MyString
[ 12] 44 D Code 0x0000000100001640 0x00000000000001b0 0x000f0000 Test_NSArray
[ 13] 48 D Code 0x00000001000017f0 0x00000000000000e1 0x000f0000 main
[ 14] 56 D X Data 0x0000000100002680 0x0000000000000000 0x00200000 my_global_str
[ 15] 58 D SourceFile 0x0000000000000000 Sibling -> [ 19] 0x00640000 /Volumes/work/gclayton/Documents/src/lldb/test/lang/objc/foundation/my-base.m
[ 16] 60 D ObjectFile 0x000000004f79f1ca 0x0000000000000000 0x00660001 /Volumes/work/gclayton/Documents/src/lldb/test/lang/objc/foundation/my-base.o
[ 17] 62 D Code 0x00000001000018e0 0x0000000000000020 0x000e0000 -[MyBase propertyMovesThings]
[ 18] 66 D Code 0x0000000100001900 0x000000000000001f 0x000e0000 -[MyBase setPropertyMovesThings:]
[ 19] 82 Data 0x0000000100002000 0x0000000000000460 0x000e0000 pvars
[ 20] 83 ObjCIVar 0x0000000100002518 0x0000000000000148 0x001e0000 MyBase.propertyMovesThings
[ 21] 84 X Data 0x0000000100002660 0x0000000000000008 0x000f0000 NXArgc
[ 22] 85 X Data 0x0000000100002668 0x0000000000000008 0x000f0000 NXArgv
[ 23] 86 X ObjCClass 0x00000001000024d8 0x0000000000000028 0x000f0000 MyBase
[ 24] 87 X ObjCClass 0x0000000100002460 0x0000000000000028 0x000f0000 MyString
[ 25] 88 X ObjCIVar 0x0000000100002510 0x0000000000000008 0x000f0000 MyString._desc_pauses
[ 26] 89 X ObjCIVar 0x0000000100002508 0x0000000000000008 0x000f0000 MyString.date
[ 27] 90 X ObjCIVar 0x0000000100002500 0x0000000000000008 0x000f0000 MyString.str
[ 28] 91 X ObjCMetaClass 0x00000001000024b0 0x0000000000000028 0x000f0000 MyBase
[ 29] 92 X ObjCMetaClass 0x0000000100002488 0x0000000000000028 0x000f0000 MyString
[ 30] 97 X Data 0x0000000100002678 0x0000000000000008 0x000f0000 __progname
[ 31] 98 X Data 0x0000000100000000 0x00000000000010b0 0x000f0010 _mh_execute_header
[ 32] 99 X Data 0x0000000100002670 0x0000000000000008 0x000f0000 environ
[ 33] 101 X Data 0x0000000100002680 0x0000000000000000 0x000f0000 my_global_str
[ 34] 102 X Code 0x00000001000010b0 0x0000000000000040 0x000f0000 start
[ 35] 103 Trampoline 0x0000000100001938 0x0000000000000006 0x00010200 NSLog
[ 36] 104 X Undefined 0x0000000000000000 0x0000000000000000 0x00010400 OBJC_CLASS_$_NSArray
[ 37] 105 X Undefined 0x0000000000000000 0x0000000000000000 0x00010200 OBJC_CLASS_$_NSAutoreleasePool
[ 38] 106 X Undefined 0x0000000000000000 0x0000000000000000 0x00010400 OBJC_CLASS_$_NSDate
[ 39] 107 X Undefined 0x0000000000000000 0x0000000000000000 0x00010400 OBJC_CLASS_$_NSObject
[ 40] 108 X Undefined 0x0000000000000000 0x0000000000000000 0x00010200 OBJC_CLASS_$_NSString
[ 41] 109 X Undefined 0x0000000000000000 0x0000000000000000 0x00010400 OBJC_METACLASS_$_NSObject
[ 42] 110 X Undefined 0x0000000000000000 0x0000000000000000 0x00010400 __CFConstantStringClassReference
[ 43] 111 X Undefined 0x0000000000000000 0x0000000000000000 0x00010100 _objc_empty_cache
[ 44] 112 X Undefined 0x0000000000000000 0x0000000000000000 0x00010100 _objc_empty_vtable
[ 45] 113 Trampoline 0x000000010000193e 0x0000000000000006 0x00010300 exit
[ 46] 114 Trampoline 0x0000000100001920 0x0000000000000006 0x00010100 objc_getProperty
[ 47] 115 Trampoline 0x0000000100001926 0x0000000000000006 0x00010100 objc_msgSend
[ 48] 116 Trampoline 0x000000010000192c 0x0000000000000006 0x00010100 objc_msgSendSuper2
[ 49] 117 X Undefined 0x0000000000000000 0x0000000000000000 0x00010100 objc_msgSend_fixup
[ 50] 118 Trampoline 0x0000000100001932 0x0000000000000006 0x00010100 objc_setProperty
[ 51] 119 Trampoline 0x0000000100001944 0x0000000000000006 0x00010300 printf
[ 52] 120 Trampoline 0x000000010000194a 0x0000000000000006 0x00010300 usleep
[ 53] 121 X Undefined 0x0000000000000000 0x0000000000000000 0x00010300 dyld_stub_binder
(lldb)
All lazily bound symbols will have type Trampoline:
[ 45] 113 Trampoline 0x000000010000193e 0x0000000000000006 0x00010300 exit
[ 46] 114 Trampoline 0x0000000100001920 0x0000000000000006 0x00010100 objc_getProperty
[ 47] 115 Trampoline 0x0000000100001926 0x0000000000000006 0x00010100 objc_msgSend
[ 48] 116 Trampoline 0x000000010000192c 0x0000000000000006 0x00010100 objc_msgSendSuper2
[ 50] 118 Trampoline 0x0000000100001932 0x0000000000000006 0x00010100 objc_setProperty
[ 51] 119 Trampoline 0x0000000100001944 0x0000000000000006 0x00010300 printf
[ 52] 120 Trampoline 0x000000010000194a 0x0000000000000006 0x00010300 usleep
The other symbols that are exernal are marked with an "X" (which is a boolean flag on each symbol).
The symbols can be accessed via the SBModule:
size_t
SBModule::GetNumSymbols ();
lldb::SBSymbol
SBModule::GetSymbolAtIndex (size_t idx);
And then you can get the symbol type from each SBSymbol:
SymbolType
SBSymbol::GetType ();
I just added the ability to see if a symbol is externally visible:
% svn commit
Sending include/lldb/API/SBSymbol.h
Sending scripts/Python/interface/SBSymbol.i
Sending source/API/SBSymbol.cpp
Transmitting file data ...
Committed revision 153893.
bool
SBSymbol::IsExternal();
So your flow should be:
SBDebugger::Initialize();
SBDebugger debugger(SBDebugger::Create());
SBTarget target (debugger.CreateTarget (const char *filename,
const char *target_triple,
const char *platform_name,
bool add_dependent_modules,
lldb::SBError& error));
SBFileSpec exe_file_spec (filename);
SBModule exe_module (target.FindModule(exe_file_spec));
if (exe_module.IsValid()
{
const size_t num_symbols = exe_module. GetNumSymbols();
for (size_t i=0; i<num_symbols; ++i)
{
SBSymbol symbol (exe_module. GetSymbolAtIndex(i));
if (symbol.IsExternal())
{
}
if (symbol.GetType() == lldb::eSymbolTypeTrampoline)
{
}
}
}
> _______________________________________________
> lldb-dev mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
рд╕реЛрдо, 2 рдЕрдкреНрд░реИрд▓ 2012 рдХреЛ рд╢рд╛рдо 4:05 рдмрдЬреЗ, рдЧреНрд░реЗрдЧ рдХреНрд▓реЗрдЯрди [email protected] рдиреЗ рд▓рд┐рдЦрд╛:
A quick clarification on the args to CreateTarget:
"filename" is just a full path to the local object file you want to observer. "target_triple" is your <arch>-<vendor>-<os>, or something like "x86_64-apple-darwin" or "i386-pc-linux" and can be NULL if the file is only a single architecture. "platform_name" can be NULL. "add_dependent_modules" should be false, since you are only interested in seeing the one object file itself, an SBError instance should be created and passed in.
рджреЗрд╡-рд╕реВрдЪреА рдЪрд░реНрдЪрд╛ рдпрд╣рд╛рдВ: https://groups.google.com/forum/?fromgroups=# -topic/julia -dev / snnGKJul4vgред
рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдзрд╛рдЧреЗ рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рд╕рдВрднрд╡рддрдГ рдЕрдкрдиреЗ рдХреЛрдбреЗрдХреНрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЫреЗрдбрд╝рдЦрд╛рдиреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдмрд╛рд░-рдмрд╛рд░ Core.include()
рдлрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ, listTests()
рдФрд░ runTests()
ред рдореИрдВ рддрдм listTests()
рдФрд░ runTests()
рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рд╕реЗ рдлрд┐рд░ рд╕реЗ рдирдпрд╛ рд╕реНрд╡рд░реВрдк рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдПрдХ рдирдИ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ 2-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА "рдПрдкреАрдЖрдИ" рдХреЗ рд╕рд╛рде рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдЙрдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЕрдирд╛рдо рдореЙрдбреНрдпреВрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЙрдарддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рджреЗрд╡ рд╕реВрдЪреА рдкрд░ рднреА рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ рдЖрдк рдПрдХ рд╣реА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрдИ рдмрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╢рд╛рдпрдж рдПрдХ рдкреБрд░рд╛рдирд╛ рдзрд╛рдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХред
рд╢рд╛рдпрдж рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг evalfile
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ "рд░рд┐рдЯрд░реНрди" рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЕрдирд╛рдо рдореЙрдбреНрдпреВрд▓ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?
рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣рд╛ рдерд╛: https://github.com/JuliaLang/julia/issues/3661
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдкрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ? рдореИрдВ рдПрдХ рд╕рд░рд▓ рдпреЛрдЬрдирд╛ рдХреЛ рдХреЛрдбрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдПрдХ рдЙрд▓реНрдЯреЗ рдХреЙрд▓ рдЧреНрд░рд╛рдл рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЬрдм рднреА рдХреЛрдИ рдирдпрд╛ рддрд░реАрдХрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд┐рдирд╛ рдЕреЙрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб рдПрдПрд╕рдЯреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рддрдм рдЙрд╕ рдЧреНрд░рд╛рдл рдХреЛ рдЪрд▓рддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рдЙрддрдирд╛ рд╣реА рдЙрдЪрд┐рдд рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдХреЛрдИ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдЧреЗ рдмрдврд╝реЛ рдФрд░ рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ!
рдпрджрд┐ рдХреЙрд▓рд▓реА рдХреЗ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХреЗ _execution_ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрд░рдИрдкреАрдПрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ рдкрд░реЗ рд╣реИрдВ: рдпрд╣ рдПрдХ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдВрддрд┐рдо рдЙрддреНрддрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХреБрд╢рд▓ "рдордВрдЪрди" рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ: рдХреБрдЫ рдХрд╛рд░реНрдп рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХреБрдЫ рдкрд╣рд▓реВ рдЗрдирдкреБрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдПрдХ рдиреЙрдирд╡реЙрдпрд░рд┐рдпрд▓ рддрд░реАрдХреЗ рд╕реЗ --- рд╡рд┐рд╣рд┐рдд рдЙрджрд╛рд╣рд░рдг рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рд▓реВрдкреНрд╕ рдПрдХ рд╕рд░рдгреА рдХреА рдЖрдпрд╛рдореАрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1 рдФрд░ 2, рдФрд░ рдлрд┐рд░ рдПрдХ рдЖрд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рджрд┐рдЦрддрд╛ рд╣реИ:
_method_cache = Dict()
function myfunction(A::AbstractArray)
N = ndims(A)
if !haskey(_method_cache, N)
func = eval(<an expression that generates the function definition for N dimensions>)
_method_cache[N] = func
else
func = _method_cache[N]
end
return func(A)
end
рддреЛ рдкрд╣рд▓реА рдмрд╛рд░ myfunction
рдХреЛ 4-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ 4 рдЖрдпрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ _method_cache
рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрдирдкреБрдЯ рдкрд░ рдирдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред 4-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде myfunction
рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЙрд▓ рдкрд░, рдпрд╣ рдХреЗрд╡рд▓ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред _method_cache
рдЬреВрд▓рд┐рдпрд╛ рдХреА рдЕрдкрдиреА рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА "рдЫрд╛рдпрд╛ рд╡рд┐рдзрд┐ рддрд╛рд▓рд┐рдХрд╛" рд╣реИ, рдПрдХ рдЬреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред (рдЗрд╕реЗ рдирд┐рдЬреА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЖрдорддреМрд░ рдкрд░ let
рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред)
рдЬрдмрдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рд░реНрдп рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ, рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢-рд▓реБрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдХрдо рд╕рдордп рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╣реИ рдЬреЛ рдЖрдк рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдоред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
function myfunction(A::AbstractArray)
bodyexpr = <an expression for the body of the function specific for N dimensions>
f = <strong i="17">@eval</strong> begin
function myfunction(A::$(typeof(A)))
$bodyexpr
end
end
return f(A)
end
рдпрд╣рд╛рдБ, myfunction
рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЗрди рд╡рд┐рд╢реЗрд╖ рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП myfunction
_more рд╡рд┐рд╢рд┐рд╖реНрдЯ_ рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдирдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛; рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп "рдлрд╝реЙрд▓рдмреИрдХ" рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдХреБрдЫ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдирддреАрдЬрддрди, рдпрд╣ рдордВрдЪрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐-рддрд╛рд▓рд┐рдХрд╛ рддрдВрддреНрд░реЛрдВ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдЬреЛ рдХреБрдЫ рднреА myfunction
рдкрд╣рд▓реЗ рд╣реА рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдХреЙрд▓рд░ рд╣рдореЗрд╢рд╛ myfunction
eval
myfunction
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ рджреЗрд╡-рднрдпрд╛рдирдХ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд╣реЛрдЧрд╛ред
рддреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ _ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
# 5395 рднреА рджреЗрдЦреЗрдВред
рдЕрдореВрд░реНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдзрд┐ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЙрдкрдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
abstract A
immutable B <: A; end
immutable C <: A; end
g(x::Vector{A}) = f(x[1])
f(::B) = 1
g(A[B()])
f(::C) = 0.5
g(A[C()])
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ 4602678819172646912
ред рд╣рдореЗрдВ g
рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрд╛рд╣рд░ рдлреЗрдВрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ f(::A)
рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреА рдкреБрд╖реНрдЯрд┐ рдЕрдм рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред
рд╣рд╛рдВ, рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рддрд░реАрдХреЗ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╣рдореЗрд╢рд╛ рдирдИ рдкрджреНрдзрддрд┐ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ
f() = x()
x() = 1
println(f())
x() = 2
println(f())
рджреЗрддрд╛ рд╣реИ
1
1
рдЬрдмрдХрд┐
g() = y()
precompile(g, ())
y() = 1
println(g())
y() = 2
println(g())
рджреЗрддрд╛ рд╣реИ
1
2
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдорд╛рдорд▓рд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреЙрд▓рд░ рдкреБрдирд░реНрдорд┐рд▓рди рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдирд╣реАрдВ рд╣реИ)ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдмреЗрд╡рдХреВрдл рдХрд╣рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рд╕реНрддрд░ рдХреЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЦрддреНрдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдкрддреЗ рдХреЛ рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд╛рди рд╕реЗ рджреЗрдЦреЗрдВ рдФрд░ рдХреЙрд▓ рдХрд░реЗрдВред рдХреНрдпрд╛ рдпрд╣ C ++ рдпрд╛ Java рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рд╣реЛрдЧрд╛? рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕реНрдереИрддрд┐рдХ рдкрддреЗ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╕реНрдерд┐рд░ рдпрд╛ рдЧрддрд┐рд╢реАрд▓ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА / рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рдВрдХреНрд╢рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рд┐рдЪ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ рдФрд░ рдХреЛрдб рдЖрдзрд╛рд░ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЬрд╛рдм рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред
@ omer4d рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╕рднреА "рдЖрд╢реНрд░рд┐рддреЛрдВ" рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдереИрддрд┐рдХ рдкрддреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ C ++ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдЕрд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЬреЛ рд▓реЛрдЧ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡рд┐рдХрд╛рд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЬреЛ рд▓реЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡рд┐рдХрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдПрдбреНрд░реЗрд╕ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗред
рдЬреЛ рд▓реЛрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рджреЛрдиреЛрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗрд╡рд▓ рдЫреЛрдЯреЗ рд╕реНрддрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╣реБрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рддрд┐ рдореЙрдбреНрдпреВрд▓ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рдкреНрд░рдердо,
рдПрдиреЛрдЯреЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЙрдкрджреНрд░рд╡ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЙрдиреНрд╣реЗрдВ рд╣реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрд╕рдкрд╛рд╕ред рдпрджрд┐ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ 2 рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╛ 3 рд╕рдорд╕реНрдпрд╛рдУрдВ, рд╡реЗ рдХрд╛рдлреА рдвреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛, рдХреЛрдИ рдирд╣реАрдВ рд╣реИ
рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдПрдиреЛрдЯреЗрд╢рди рд▓реЗрдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред рдХреЛрдИ рдирд╣реАрдВ рд╣реИ
рдЗрд╕ рдмрд╛рдд рдХреЗ рдмреАрдЪ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдЗрд╕реЗ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ред рддреАрд╕рд░рд╛, рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрдЯреМрддреА рдЯрд╛рдЗрдк рдХрд░реЗрдВ
рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд┐рд░реНрдл рдХреЙрд▓ рд╕рд╛рдЗрдЯреНрд╕ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИрдВ
рдХрдо рд╕реЗ рдХрдо рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЪреАрдЬреЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рдордиреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдЦреИрд░, рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдХреАрд╡рд░реНрдб рдХреЗ рджрд░реНрдЬрдиреЛрдВ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдкрдирд╛ рдЕрдзрд┐рдХрддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рджреЛ рдХреЛ рдЕрд░реНрд╣рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХреБрдЫ рдЪрдХреНрд░реЛрдВ рдХреЗ рдмрд╛рдж recompile рдРрд╕рд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ ред рдореИрдВ рддреАрд╕рд░реЗ рдмрд┐рдВрджреБ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдиреАрдЪреЗ рдХрджрдо рд░рдЦреВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓ рдЯреНрд░реА рдХреА рдЬрдбрд╝ рдореЗрдВ рдЧреЗрдо рдпрд╛ рдПрдиреАрдореЗрд╢рди рд▓реВрдк рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред = (
@JeffBezanson рдореИрдВ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ eval
(рдЬреИрд╕реЗ REPL рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░ рджрд░реНрдЬ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреА рдЧрдИ рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрддред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ display
рдХрд╛ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд░реАрдм рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд░реНрдкреНрд░рд╛рдЗрдЬрд╝реНрдб рдерд╛, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
julia> f(a, b) = a + b
f (generic function with 1 method)
julia> g(args...) = f(args...)
g (generic function with 1 method)
julia> g(1, 2)
3
julia> f(a::Int, b::Int) = a - b
f (generic function with 2 methods)
julia> g(1, 2)
-1
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд░рд░рдЧ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ ..... рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡рд╛рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рд░ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рд╕реНрдорд╛рд░реНрдЯ рд╣реИ рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдХреЗрд╡рд▓ recompile рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
julia> f(a, b) = a + b
f (generic function with 1 method)
julia> g(a, b) = f(a, b)
g (generic function with 1 method)
julia> g(1, 2)
3
julia> f(a::Int, b::Int) = a - b
f (generic function with 2 methods)
julia> g(1, 2)
3
рджрд░рдЕрд╕рд▓, рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди @code_typed
рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ .....
julia> f(a, b) = a + b
f (generic function with 1 method)
julia> g(args...) = f(args...)
g (generic function with 1 method)
julia> g(1, 2)
3
julia> <strong i="7">@code_typed</strong> g(1, 2)
1-element Array{Any,1}:
:($(Expr(:lambda, Any[:(args::(top(apply_type))(Vararg,Any)::Any::Any)], Any[Any[],Any[Any[:args,(Int64,Int64),0]],Any[]], :(begin # none, line 1:
return (top(box))(Int64,(top(add_int))((top(tupleref))(args::(Int64,Int64),1)::Int64,(top(tupleref))(args::(Int64,Int64),2)::Int64))
end::Int64))))
julia> f(a::Int, b::Int) = a - b
f (generic function with 2 methods)
julia> g(1, 2)
-1
julia> <strong i="8">@code_typed</strong> g(1, 2)
1-element Array{Any,1}:
:($(Expr(:lambda, Any[:(args::(top(apply_type))(Vararg,Any)::Any::Any)], Any[Any[],Any[Any[:args,(Int64,Int64),0]],Any[]], :(begin # none, line 1:
return (top(box))(Int64,(top(add_int))((top(tupleref))(args::(Int64,Int64),1)::Int64,(top(tupleref))(args::(Int64,Int64),2)::Int64))
end::Int64))))
рддрдерд╛
julia> f(a, b) = a + b
f (generic function with 1 method)
julia> g(args...) = f(args...)
g (generic function with 1 method)
julia> g(1, 2)
3
julia> f(a::Int, b::Int) = a - b
f (generic function with 2 methods)
julia> g(1, 2)
-1
julia> <strong i="12">@code_typed</strong> g(1, 2)
1-element Array{Any,1}:
:($(Expr(:lambda, Any[:(args::(top(apply_type))(Vararg,Any)::Any::Any)], Any[Any[],Any[Any[:args,(Int64,Int64),0]],Any[]], :(begin # none, line 1:
return (top(box))(Int64,(top(sub_int))((top(tupleref))(args::(Int64,Int64),1)::Int64,(top(tupleref))(args::(Int64,Int64),2)::Int64))
end::Int64))))
рдХреНрдпрд╛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реАрдХреЛрдВ (рдпрд╛ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ / рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕) рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреНрд░рдордгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рд╣рд░ рд╕рдордп рдХреБрдЫ рднреА рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рд┐рдд (рдХреЙрд▓рд░) рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рдВрдЦреНрдпрд╛ (рдпрд╛рдиреА рдирдИ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдлрд╝рдВрдХреНрд╢рдВрд╕, рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдПрдХ рдлрд╝реАрд▓реНрдб рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реБрдП) рдЕрднреА рднреА рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ "рдЪрд╛рд▓реВ" рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрдирдмрд┐рд▓реНрдЯ (рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдерд╛?
(рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рджрдВрдб рдХреЗ рдмрд┐рдирд╛)
рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рдХреЛ рд░рдирдЯрд╛рдЗрдо рддрдХ рд▓реЗ рдЬрд╛рдПрдЧрд╛ (рдФрд░ рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рд╣реЛрдЧрд╛), рдЬреЛ рд╡рд╛рдВрдЫрдиреАрдп рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╡реЗрдм рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдФрд░ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ _miveive_ рджрд░реНрдж рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рдорд╕рд▓реЗ рдХрд╛ рд╣рд▓ рдЖрд╕рд╛рдиреА рд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ред
рдЗрд╕рд▓рд┐рдП рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред (рд╡рд░реНрддрдорд╛рди рдирд┐рд╖реНрдкрд╛рджрди рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдБрдЪ)
рдпрд╣рд╛рдБ рдореБрд╢реНрдХрд┐рд▓ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╣рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрджрд┐ (рдФрд░ рдХреЗрд╡рд▓ рдпрджрд┐) рддреЛ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдКрдкрд░реА рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ( inlining рдЖрджрд┐) рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред (рдЕрд╕реНрдкрд╖реНрдЯ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рдорд╛рди)
рдпрджрд┐ рдЭрдВрдбреЗ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ 0.5 рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ / рдХрд╛рд░реНрдпреЛрдВ рдХреА рдирдИ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдЙрддреНрддрд░ рдореЗрдВ рдЗрд╕реЗ рд╣рд┐рдЯ рдХрд░рдирд╛ рдЕрдм рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╢рд╛рдпрдж рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
julia> function f(x)
1
end
f (generic function with 1 method)
julia> map(f, 1:10)
10-element Array{Int64,1}:
1
1
1
1
1
1
1
1
1
1
julia> function f(x)
2
end
WARNING: Method definition f(Any) in module Main at REPL[9]:2 overwritten at REPL[11]:2.
f (generic function with 1 method)
julia> map(f, 1:10)
10-element Array{Int64,1}:
1
1
1
1
1
1
1
1
1
1
рд╡рд╣ рдЕрднреА рднреА рд╕рд┐рд░реНрдл # 265 рд╡реЗрдирд┐рд▓рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА v0.6-dev рдореЗрдВ рддрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ :)
@vtjnash рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рджрд░реНрд╢рди рдпрд╛ рдореЗрдореЛрд░реА рдЯреНрд░реЗрдбрдСрдлрд╝ рд╣реИ?
рдЗрд╕рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рдореЗрдореЛрд░реА (140 рдПрдордмреА -> 170 рдПрдордмреА) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди (рд╕рдВрдХрд▓рди рдпрд╛ рд░рдирдЯрд╛рдЗрдо) рдкрд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рддрдХ рдмрд╣реБрдд рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдЕрдм рддрдХ рдХреЗ рдбреЗрдореЛ рдордЬреЗрджрд╛рд░ рд╣реИрдВ:
julia> f() = 1
f (generic function with 1 method)
julia> function g(x)
<strong i="7">@eval</strong> f() = $x # this is the correct way to write `global f() = x` (which should be a syntax error, but isn't currently)
return @eval(f)() # use `eval` to hide the value from optimization / inlining, but the call is not inside eval
end
g (generic function with 1 method)
julia> g(2)
WARNING: Method definition f() in module Main at REPL[1]:1 overwritten at REPL[2]:2.
1
julia> g(3)
WARNING: Method definition f() in module Main at REPL[2]:2 overwritten at REPL[2]:2.
2
julia> g(4)
WARNING: Method definition f() in module Main at REPL[2]:2 overwritten at REPL[2]:2.
3
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ 2, 3, рдЖрджреЗрд╢ рдХреЗ рдХрд╛рд░рдг 4, рдЬрд┐рд╕рдореЗрдВ рдХрд╛ рд╕рдВрдХрд▓рди рд╣реИ g
рдмрдирд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХрд┐ Redefines f
рд╣реЛрддрд╛ рд╣реИ?
рдпрд╣ рд▓рдЧрднрдЧ рд╕рд╣реА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рднрд╛рд╖рд╛ рд╢рдмреНрджрд╛рд░реНрде рд╕рдВрдХрд▓рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ g
рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрд╕ рд╕рдордп f
рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реАрдХреНрд╖рдг рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ
рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ +
рдЖрджрд┐рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдордЬрд╝реЗрджрд╛рд░ рдереЛрдбрд╝рд╛ рдбреЗрдореЛ рд╣реИ рдЬреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ:
julia> add_ctr = UInt(0)
0x0000000000000000
julia> Base.:+(a::Int, b::Int) = (global add_ctr += 1; Core.Intrinsics.add_int(a, b))
julia> add_ctr
0x0000000000000016
julia> last = 0;
julia> println(Int(add_ctr - last)); last = add_ctr;
287
julia> println(Int(add_ctr - last)); last = add_ctr;
17
рдпрд╣ рдПрдХ рдзреЛрдЦрд╛ рд╣реИ: рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ +
рдЙрдкрдпреЛрдЧ рдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛ред svd
рддрд░рд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ REPL рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдо рд╕реЗ рдХрдо 100 рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддрдм рд╣рдо рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВрдЧреЗред
рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ / рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рд▓рд╛рдЗрд╡ рд░реА-рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдХреЗ рдЕрд╡рд╕рд░ рдореБрдЭреЗ рдЙрдбрд╝рд╛ рд░рд╣реЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред рдФрд░ рдпрд╣рд╛рдБ рдореИрдВ рдПрдХ рдирдпрд╛ рдХреАрдмреЛрд░реНрдб рдЦрд░реАрджрдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрдХреНрд░рдо Ctrl-D; julia<Enter>
рдХреЗрд╡рд▓ рдкрд╣рдирд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ред рд▓рдЧрддрд╛ рд╣реИ рдореБрдЭреЗ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдиреЛрдЯреЛрдВ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рд░рд╣рд╕реНрдпрдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдордЭ рдЕрдм collect
Generator
рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ (рдкрд╛рд░реНрд╕ рд╕реНрддрд░ рдкрд░ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╡рд┐рдкрд░реАрдд) 0.4 рдореЗрдВ? - @which
рд╡рд╣рд╛рдБ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)? рдпрд╣ рдЙрджрд╛рд╣рд░рдг, vchuravy рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╕рдорд╛рди рд╣реИ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рднреА рдПрдХ рдЧреЛрддреНрд░ рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЕрдм 0.5 рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ:
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.5.0-rc3+0 (2016-08-22 23:43 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | x86_64-linux-gnu
julia> f(x) = 1
f (generic function with 1 method)
julia> [f(x) for x in 1:5]
5-element Array{Int64,1}:
1
1
1
1
1
julia> f(x) = 2
WARNING: Method definition f(Any) in module Main at REPL[1]:1 overwritten at REPL[3]:1.
f (generic function with 1 method)
julia> [f(x) for x in 1:5]
5-element Array{Int64,1}:
1
1
1
1
1
julia> <strong i="9">@which</strong> [f(x) for x in 1:5]
collect(itr::Base.Generator) at array.jl:295
рдмрд┐рд▓рдХреБрд▓ рдареАрдХ рдирд╣реАрдВ?
рдлрд┐рдХреНрд╕ # 265 рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ
рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдп рд╣реИ ЁЯШ▓
рдХреНрдпрд╛ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЕрднреА рднреА 0.5.x рдкрд░ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ?
рдирд╣реАрдВред
@ rapus95 , рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрдХреНрд░рд╛рдордХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЧрд▓рдд рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдЕрд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдореЛрдЪрди рдЧреБрд░реБ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ 0.6 рдореЗрдВ рд░рдЦрдирд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реИред (рдЖрдк рд╣рдореЗрд╢рд╛ рдорд╛рд╕реНрдЯрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ 0.6 рдХреА рд░рд┐рд╣рд╛рдИ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред)
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкреНрд░рдЧрддрд┐ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдБ! рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ https://groups.google.com/forum/#/topic/julia -users / OBs0fmNmjCU рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓реЗ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╡рд╛рд╣ред рдХреНрдпрд╛ рд╢рд╛рдирджрд╛рд░ рдкрд▓ рд╣реИ!
рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ!
рдХреНрдпрд╛ рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЛ 0.5 рд╕реЗрд░реА рддрдХ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ? рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ 0.6 рдореЗрдВ рдХреНрдпрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛?
рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдФрд░ рдХреЗрд╡рд▓ 0.6 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛
рдпрд╣ рддрдп рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдмрдврд╝рд┐рдпрд╛ рд╣реИред рдкреБрд░рд╛рдиреА рдЖрджрддреЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдорд░рддреА рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрднреА-рдХрднреА рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдкреБрдирдГ рдЖрд░рдВрдн рдФрд░ / рдпрд╛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдореБрдЭреЗ рдпрд╛рдж рдЖрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдЧреЗрдо-рдЪреЗрдВрдЬрд░ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╡рд╛рд╣ред рдХреНрдпрд╛ рд╢рд╛рдирджрд╛рд░ рдкрд▓ рд╣реИ!