Julia: рд╢реЛ рд╕реНрд░реЛрдд рдХреЛрдб рдЙрддреНрддрд░ рд╕реЗ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдорд╛рд░реНрдЪ 2013  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: JuliaLang/julia

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

julia> methods(base)
# methods for generic function base
base(base::Integer,n::Integer,pad::Integer) at intfuncs.jl:290
base(symbols::Array{Uint8,N},n::Integer,p::Integer) at intfuncs.jl:291
base(base_or_symbols::Union(Integer,Array{Uint8,N}),n::Integer) at intfuncs.jl:292

julia> implementation(base,1)
base(base::Integer, n::Integer, pad::Integer) = _base(dig_syms,int(base),unsigned(abs(n)),pad,n<0)

julia> implementation(base,3)
base(base_or_symbols::Union(Integer,Array{Uint8}), n::Integer) = base(base_or_symbols, n, 1)

рдпрд╣ рдХреБрдЫ IDE рдореЗрдВ рдЬрдВрдк-рдЯреВ-рдХреЛрдб рд╕рд╛рдорд╛рди рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди REPL рдореЗрдВ, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдмрд╕ _base рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ dig_syms рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рджреЗрдЦрдиреЗ рджреЗрддрд╛ рд╣реИ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА _base рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ base рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рдмрдирд╛рддрд╛ рд╣реИред (REPL рд╕реЗ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛)

julia> methods(Base._base)
# methods for generic function _base
_base(symbols::Array{Uint8,N},b::Int32,x::Unsigned,pad::Int32,neg::Bool) at intfuncs.jl:278

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд▓рд╛рдЗрди рдирдВрдмрд░ / рдлрд╛рдЗрд▓реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА methods рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреЛрдб рдХреА рдЙрдкрдпреБрдХреНрдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдпрд╣ рдЕрднреА рднреА рдореБрдЭреЗ рд╡рд┐рдХреГрдд рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ

julia> <strong i="6">@code_native</strong> 1 + 2
    .section    __TEXT,__text,regular,pure_instructions
; тФМ @ int.jl:53 within `+'
    leaq    (%rdi,%rsi), %rax
    retq
; тФФ
; тФМ @ int.jl:53 within `<invalid>'
    nopw    %cs:(%rax,%rax)
; тФФ

рдФрд░ рдЗрд╕

julia> <strong i="10">@code_llvm</strong> 1 + 2

;  @ int.jl:53 within `+'
define i64 @"julia_+_13402"(i64, i64) {
top:
  %2 = add i64 %1, %0
  ret i64 %2
}

рдФрд░ рдЗрд╕

julia> <strong i="14">@code_typed</strong> 1 + 2
CodeInfo(
1 тФА %1 = Base.add_int(x, y)::Int64
тФФтФАтФА      return %1
) => Int64

рдФрд░ рдЗрд╕

julia> <strong i="18">@code_lowered</strong> 1 + 2
CodeInfo(
1 тФА %1 = Base.add_int(x, y)
тФФтФАтФА      return %1
)

рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ

julia> <strong i="23">@code_source</strong> 1 + 2
ERROR: LoadError: UndefVarError: <strong i="24">@code_source</strong> not defined
in expression starting at REPL[23]:1

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

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

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

рдирд╣реАрдВ, рдпрд╣ # 265 рдХреЗ рд╕рд╛рде рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдпрд╣ рдЕрдм рд╕реНрд░реЛрдд рдХреЛрдб рдЬреИрд╕рд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдореВрд▓ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝реЗрдВред

@JeffBezanson рд╕реЗ рд╕рд╣рдордд

рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде +1ред
рдмреЗрд╣рддрд░ рдлрд┐рдХреНрд╕ https://github.com/JuliaLang/julia/issues/2594 , рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИ рдЬрдм start рдПрдХ рдореВрд▓ cmd рдХрдорд╛рдВрдб рдФрд░ notepad рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рди рддреЛ рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рд╢реЛ / рдЬрдВрдкред
edit рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рд╣реИ, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ / рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдкреЗрдЬрд░ рд╕рдорд░реНрдерди # 6921 рдЗрд╕ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд░ рдХреБрдЫ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдирдХрд╛рд░ рд╕рдХрддрд╛ рд╣реИред

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, <strong i="5">@less</strong> func(x) рд▓рдЧрднрдЧ рд╡реИрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ @astrieanna рдорд╛рдБрдЧрддрд╛ рд╣реИ (рдкреЗрдЬрд┐рдВрдЧ рдХреЗ рд╕рд╛рде), рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рд╣рд░реА $PAGER рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

<strong i="5">@less</strong> func(x) рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдореЗрдВ rephrased рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЙрдкрд▓рдмреНрдз рдереАрдВ

  • рдЙрддреНрддрд░реЛрддреНрддрд░ рдпрд╛ рд░рдирдЯрд╛рдЗрдо рд╕реЗ рдПрдПрд╕рдЯреА рдХреЛрдб рдкреВрд░реНрд╡ рд╕реНрд░реЛрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
  • рдЪрд░ / рдкреНрд░рдХрд╛рд░ / рдХрд╛рд░реНрдп / рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреБрди: рдкрд░рд┐рднрд╛рд╖рд┐рдд / рд╕рд╛рдл рдХрд░рдирд╛

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

julia> q=:( function a(i::Int) ; return i+4 ; end ; b=4 ; println(a(b))  )
quote 
    function a(i::Int) # none, line 1:
        return i + 4
    end
    begin 
        b = 4
        println(a(b))
    end
end

julia> function exprdescend(ex) ; if (isa(ex,Expr)) ; println("Descending Expr:",ex) ; println("head:",ex.head); println("args:",ex.args) ; println("type:",ex.typ)  ; for i in ex.args ; exprdescend(i) ; end ; else ; println("*:",typeof(ex),":",ex)  ; end  ;  end
// # ''try it ... long output''

рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ: JeffBezanson рдиреЗ 20 рдорд╛рд░реНрдЪ 2013 рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреА
"рдирд╣реАрдВ, рдпрд╣ # 265 рдХреЗ рд╕рд╛рде рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдпрд╣ рдЕрднреА рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдореВрд▓ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝реЗрдВред ред "

рддреЛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ? рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ / рдмрдпрд╛рди рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?

// # str = read_whole_file_into_a_string(filename)
julia> str="for i in [1,2,3,4] ; println(i) ; end "
julia> s=parse(str)
:(for i = [1,2,3,4] # line 1:
        println(i)
    end)
julia> exprdescend(s)
Descending Expr:for i = [1,2,3,4] # line 1:
    println(i)
end
head:for
args:{:(i = [1,2,3,4]),quote  # line 1:
    println(i)
end}
type:Any
Descending Expr:i = [1,2,3,4]
head:=
args:{:i,:([1,2,3,4])}
type:Any
*:Symbol:i
Descending Expr:[1,2,3,4]
head:vcat
args:{1,2,3,4}
type:Any
*:Int64:1
*:Int64:2
*:Int64:3
*:Int64:4
Descending Expr:begin  # line 1:
    println(i)
end
head:block
args:{:( # line 1:),:(println(i))}
type:Any
*:LineNumberNode: # line 1:
Descending Expr:println(i)
head:call
args:{:println,:i}
type:Any
*:Symbol:println
*:Symbol:i

@hgkamath рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИред рдХреГрдкрдпрд╛ рдореИрдиреБрдЕрд▓ рдХреЗ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдкрдврд╝реЗрдВред

рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ @generated рдХрд╛рд░реНрдп (https://groups.google.com/d/topic/julia-users/4pkWhcap1Zg/discussion рд╕реЗ) рд╣реЛрдЧрд╛ред

рдУрд╣, рдХреНрдпрд╛ рдореИрдВрдиреЗ рдЗрд╕реЗ # 22007 рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ?

рд╕реЙрд░реНрдЯ - рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд░рдИрдкреАрдПрд▓ рдореЛрдб рдореЗрдВ рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕реНрд░реЛрдд рдХреЛ рд╕реНрдЯреИрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

julia> x -> x+1
(::#5) (generic function with 1 method)

рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред ( рдкреНрд░рд╡рдЪрди рднреА рджреЗрдЦреЗрдВ)

REPL рдореЛрдб рдореЗрдВ

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ:

let h = Base.active_repl.interface.modes[1].hist,
    replno = match(r"REPL\[(\d+)\]", $filename)

    replno === nothing || h.history[h.start_idx + parse(Int, replno[1])]
end

"рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рдХрд╖реНрдЯрдкреНрд░рдж" == "рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП"

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

Https://github.com/MasonProtter/LegibleLambdas.jl рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдпрд╛рдУ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛

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

julia> using Yao

julia> control(2, 1=>X)
(n -> control(n, 2, 1 => X gate))

рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдВрдЧреЗ рдХрд┐ рдпрд╣ рдПрдХ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдЧреЗ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ LegibleLambdas рд╣реЛ, рдпрд╣ #42 рдЬреИрд╕реА рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рднреНрд░рд╛рдордХ рд╣реИред рдпрд╣ рднреА рдлреНрд▓рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдкрд╣рд▓реЗ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рдХреЛрдиреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд▓реЗрдЧрд┐рдмрд▓рд▓реИрдореНрдмрд╕ рдореЗрдВ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдХрд┐ рд╣рдо рдмрд╛рд╣рд░реА рдкреИрдХреЗрдЬ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рдорд░реНрдерди рд╕реЗ рд╕реАрдзреЗ рдЖрд░рдкреАрдкреАрдПрд▓ рдореЗрдВ рдЗрди рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдЕрднреА рднреА рдореБрдЭреЗ рд╡рд┐рдХреГрдд рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ

julia> <strong i="6">@code_native</strong> 1 + 2
    .section    __TEXT,__text,regular,pure_instructions
; тФМ @ int.jl:53 within `+'
    leaq    (%rdi,%rsi), %rax
    retq
; тФФ
; тФМ @ int.jl:53 within `<invalid>'
    nopw    %cs:(%rax,%rax)
; тФФ

рдФрд░ рдЗрд╕

julia> <strong i="10">@code_llvm</strong> 1 + 2

;  @ int.jl:53 within `+'
define i64 @"julia_+_13402"(i64, i64) {
top:
  %2 = add i64 %1, %0
  ret i64 %2
}

рдФрд░ рдЗрд╕

julia> <strong i="14">@code_typed</strong> 1 + 2
CodeInfo(
1 тФА %1 = Base.add_int(x, y)::Int64
тФФтФАтФА      return %1
) => Int64

рдФрд░ рдЗрд╕

julia> <strong i="18">@code_lowered</strong> 1 + 2
CodeInfo(
1 тФА %1 = Base.add_int(x, y)
тФФтФАтФА      return %1
)

рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ

julia> <strong i="23">@code_source</strong> 1 + 2
ERROR: LoadError: UndefVarError: <strong i="24">@code_source</strong> not defined
in expression starting at REPL[23]:1

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

рдЗрд╕реА рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдм https://github.com/timholy/CodeTracking.jl рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ Revise.jl рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЦреЗрд▓рд╛, рдФрд░ рдЬрдм рддрдХ рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд╣реАрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ рдЬрдм Revise рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рднреЗрджрднрд╛рд╡ (рдЬреИрд╕реЗ https://github.com/FluxML/Zygote.jl) рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рддрдм рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ

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

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

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

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

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

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

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