рд░реБрдмреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ 3.1 рдХреЛ рд░рд┐рд▓реАрдЬ

Ruby 3.1.0 рдЬрд╛рд░реА рдЧрд░рд┐рдПрдХреЛ рдЫ, рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рдЬреБрди рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рдХрд╛рд╕рдорд╛ рдЕрддреНрдпрдзрд┐рдХ рдХреБрд╢рд▓ рдЫ рд░ Perl, Java, Python, Smalltalk, Eiffel, Ada рд░ Lisp рдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб BSD ("2-рдЦрдгреНрдб BSDL") рд░ "рд░реБрдмреА" рд▓рд╛рдЗрд╕реЗрдиреНрд╕ рдЕрдиреНрддрд░реНрдЧрдд рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ GPL рдЗрдЬрд╛рдЬрддрдкрддреНрд░рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгрд▓рд╛рдИ рдЬрдирд╛рдЙрдБрдЫ рд░ GPLv3 рд╕рдБрдЧ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЙрдкрдпреБрдХреНрдд рдЫред

рдореБрдЦреНрдп рд╕реБрдзрд╛рд░рд╣рд░реВ:

  • рдПрдХ рдирдпрд╛рдБ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЗрди-рдкреНрд░реЛрд╕реЗрд╕ JIT рдХрдореНрдкрд╛рдЗрд▓рд░, YJIT, рдердкрд┐рдПрдХреЛ рдЫ, Shopify рдИ-рд╡рд╛рдгрд┐рдЬреНрдп рдкреНрд▓реЗрдЯрдлрд░реНрдордХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд░реЗрд▓ рдврд╛рдБрдЪрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд░ рдзреЗрд░реИ рд╡рд┐рдзрд┐рд╣рд░реВ рдХрд▓ рдЧрд░реНрдиреЗ рд░реБрдмреА рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрдХреЛ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдЧрд░реНрди рдкрд╣рд▓рдХреЛ рдПрдХ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХрд╛ рдЫрдиреНред рдкрд╣рд┐рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ MJIT JIT рдХрдореНрдкрд╛рдЗрд▓рд░рдмрд╛рдЯ рдореБрдЦреНрдп рднрд┐рдиреНрдирддрд╛, рдЬреБрди рд╕рдореНрдкреВрд░реНрдг рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рд╢реЛрдзрдирдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ рд░ C рднрд╛рд╖рд╛рдорд╛ рдмрд╛рд╣реНрдп рдХрдореНрдкрд╛рдЗрд▓рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдпреЛ рд╣реЛ рдХрд┐ YJIT рд▓реЗ Lazy Basic Block Versioning (LBBV) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рд░ рдПрдХ рдПрдХреАрдХреГрдд JIT рдХрдореНрдкрд╛рдЗрд▓рд░ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред LBBV рдХреЛ рд╕рд╛рде, JIT рд▓реЗ рдкрд╣рд┐рд▓реЛ рд╡рд┐рдзрд┐рдХреЛ рд╢реБрд░реБрд╡рд╛рдд рдорд╛рддреНрд░ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ, рд░ рдмрд╛рдБрдХреАрд▓рд╛рдИ рдХреЗрд╣реА рд╕рдордп рдкрдЫрд┐ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдХреНрд░рдордорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рдЪрд░ рд░ рддрд░реНрдХрд╣рд░реВрдХреЛ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реЗрдкрдЫрд┐ред YJIT рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, Railsbench рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдЙрдБрджрд╛ рдкреНрд░рджрд░реНрд╢рдирдорд╛ 22% рд╡реГрджреНрдзрд┐ рд░реЗрдХрд░реНрдб рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рд░ рддрд░рд▓-рд░реЗрдиреНрдбрд░ рдкрд░реАрдХреНрд╖рдгрдорд╛ 39% рд╡реГрджреНрдзрд┐ред YJIT рд╣рд╛рд▓ x86-64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рднрдПрдХрд╛ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛ рдпреБрдирд┐рдХреНрд╕-рдЬрд╕реНрддреЛ рдУрдПрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдЧрд░реНрди рд╕реАрдорд┐рдд рдЫ рд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЕрд╕рдХреНрд╖рдо рдЧрд░рд┐рдПрдХреЛ рдЫ (рд╕рдХреНрд░рд┐рдп рдЧрд░реНрди, рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирдорд╛ "--yjit" рдЭрдгреНрдбрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН)ред
  • рдкреБрд░рд╛рдиреЛ MJIT JIT рдХрдореНрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕реБрдзрд╛рд░рд┐рдПрдХреЛ рдкреНрд░рджрд░реНрд╢рдиред рд░реЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдзрд┐рдХрддрдо рдХреНрдпрд╛рд╕ рд╕рд╛рдЗрдЬ (-jit-max-cache) 100 рджреЗрдЦрд┐ 10000 рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдорд╛ рдмрдврд╛рдЗрдПрдХреЛ рдЫред 1000 рднрдиреНрджрд╛ рдмрдвреА рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рднрдПрдХрд╛ рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ JIT рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд░реЛрдХрд┐рдпреЛред Zeitwerk of Rails рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрди, JIT рдХреЛрдб рдЕрдм рдЦрд╛рд░реЗрдЬ рдЧрд░рд┐рдиреЗ рдЫреИрди рдЬрдм TracePoint рд▓рд╛рдИ рдХреНрд▓рд╛рд╕ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдХреНрд╖рдо рдкрд╛рд░рд┐рдПрдХреЛ рдЫред
  • рдпрд╕рд▓реЗ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдкреБрди: рд▓реЗрдЦрд┐рдПрдХреЛ debug.gem рдбрд┐рдмрдЧрд░ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рд░рд┐рдореЛрдЯ рдбрд┐рдмрдЧрд┐рдЩрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ, рдбрд┐рдмрдЧ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдврд┐рд▓реЛ рдЧрд░реНрджреИрди, рдЙрдиреНрдирдд рдбрд┐рдмрдЧрд┐рдЩ рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВ (VSCode рд░ Chrome) рд╕рдБрдЧ рдПрдХреАрдХрд░рдгрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ, рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд░ рдмрд╣реБ-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдбрд┐рдмрдЧ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдПрдХ REPL рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрдиреНрдЯрд░рдлреЗрд╕, рдЙрдиреНрдирдд рдЯреНрд░реЗрд╕рд┐рдЩ рдХреНрд╖рдорддрд╛рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рд░реЗрдХрд░реНрдб рд░ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯрд╣рд░реВ рдкреБрди: рдкреНрд▓реЗ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдкрд╣рд┐рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдбрд┐рдмрдЧрд░ lib/debug.rb рдЖрдзрд╛рд░ рд╡рд┐рддрд░рдгрдмрд╛рдЯ рд╣рдЯрд╛рдЗрдпреЛред
    рд░реБрдмреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ 3.1 рдХреЛ рд░рд┐рд▓реАрдЬ
  • рдХрд▓ рдмреНрдпрд╛рдХ рдЯреНрд░реЗрд╕ рд░рд┐рдкреЛрд░реНрдЯрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рджреГрд╢реНрдп рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдЩ рд▓рд╛рдЧреВ рдЧрд░рд┐рдпреЛред рддреНрд░реБрдЯрд┐ рдЭрдгреНрдбрд╛ рдмрд┐рд▓реНрдЯ-рдЗрди рд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд-рд╕рдХреНрд╖рдо рд░рддреНрди рдкреНрдпрд╛рдХреЗрдЬ error_highlight рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред рддреНрд░реБрдЯрд┐ рдлреНрд▓реНрдпрд╛рдЧрд┐рдЩ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрди, рддрдкрд╛рдИрдВ "--disable-error_highlight" рд╕реЗрдЯрд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред $ ruby тАЛтАЛtest.rb test.rb:1:in " ": рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рдзрд┐ "рд╕рдордп" 1 рдХреЛ рд▓рд╛рдЧрд┐: рдкреВрд░реНрдгрд╛рдВрдХ (NoMethodError) 1.time {} ^^^^^ рдХреЗ рддрдкрд╛рдИрдВрд▓реЗ рднрдиреНрди рдЦреЛрдЬреНрдиреБрднрдПрдХреЛ рд╣реЛ? рдкрдЯрдХ
  • рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЧрдгрдирд╛рд╣рд░реВ IRB (REPL, Read-Eval-Print-Loop) рдХреЛ рдЦреЛрд▓рд▓реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдХреЛрдбрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорд╛рдкрдирд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ (рддрдкрд╛рдИрдБрд▓реЗ рдЯрд╛рдЗрдк рдЧрд░реНрджрд╛, рдЗрдирдкреБрдЯ рдЬрд╛рд░реА рд░рд╛рдЦреНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд╕рд╣рд┐рдд рдПрдЙрдЯрд╛ рд╕рдЩреНрдХреЗрдд рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреНрдЫ, рдЬрд╕рдХреЛ рдмреАрдЪрдорд╛ рддрдкрд╛рдИрдБ рдЯреНрдпрд╛рдм рд╡рд╛ Shift+ рд╕рдБрдЧ рд╕рд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЯреНрдпрд╛рдм рдХреБрдЮреНрдЬреА)ред рдирд┐рд░рдиреНрддрд░рддрд╛ рд╡рд┐рдХрд▓реНрдк рдЪрдпрди рдЧрд░реЗрдкрдЫрд┐, рдПрдХ рд╕рдВрд╡рд╛рдж рдмрдХреНрд╕ рдирдЬрд┐рдХреИ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреНрдЫ рдЬреБрди рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рд╡рд╕реНрддреБрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрдЫред рдХрд┐рдмреЛрд░реНрдб рд╕рд░реНрдЯрдХрдЯ Alt+d рдкреВрд░реНрдг рдХрд╛рдЧрдЬрд╛рдд рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
    рд░реБрдмреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ 3.1 рдХреЛ рд░рд┐рд▓реАрдЬ
  • рднрд╛рд╖рд╛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рд▓реЗ рдЕрдм рд╣реНрдпрд╛рд╕ рд▓рд┐рдЯрд░рд▓ рд░ рдХреБрдЮреНрдЬреА рд╢рдмреНрдж рддрд░реНрдХрд╣рд░реВрдорд╛ рдорд╛рдирд╣рд░реВрд▓рд╛рдИ рдХрд╛рд░реНрдпрд╣рд░реВ рдХрд▓ рдЧрд░реНрджрд╛ рдЫреЛрдбреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, "{x: x, y: y}" рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдХреЛ рд╕рдЯреНрдЯрд╛ рдЕрдм рддрдкрд╛рдЗрдБ "{x:, y:}" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ "foo(x: x, y: y)" - foo( x:, y:)"ред
  • рдПрдХрд▓-рд▓рд╛рдЗрди рдврд╛рдБрдЪрд╛ рдорд┐рд▓рд╛рдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдерд┐рд░ рд╕рдорд░реНрдерди (ary => [x, y, z]), рдЬреБрди рдЕрдм рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдкрдорд╛ рдлреНрд▓реНрдпрд╛рдЧ рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред
  • рдврд╛рдБрдЪрд╛ рдорд┐рд▓рд╛рдирд╣рд░реВрдорд╛ "^" рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдЕрдм рдордирдорд╛рдиреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрди рд╕рдХреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[рей, рел], [рел, рен], [резрез, резрей]]
  • рдПрдХрд▓-рд▓рд╛рдЗрди рдврд╛рдБрдЪрд╛ рдорд┐рд▓рд╛рдирд╣рд░реВрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдХреЛрд╖реНрдардХрд╣рд░реВ рд╣рдЯрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • RBS рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╕рди рднрд╛рд╖рд╛, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХрд╛рд░реНрдпрдХреНрд░рдордХреЛ рд╕рдВрд░рдЪрдирд╛ рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, "<" рдкреНрд░рддреАрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдкреНрд░рдХрд╛рд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдорд╛рдерд┐рд▓реНрд▓реЛ рд╕реАрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдорд░реНрдерди рдердкреЗрдХреЛ рдЫ, рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░рдХрд╛ рдЙрдкрдирд╛рдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдердкреЗрдХреЛ рдЫред рд░рддреНрдирд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдВрдЧреНрд░рд╣рд╣рд░реВ, рд╕реБрдзрд╛рд░рд┐рдПрдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд░ рдмрд┐рд▓реНрдЯ-рдЗрди рд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдирдпрд╛рдБ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░рд┐рдпреЛред
  • рдПрдХреАрдХреГрдд рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди TypePro рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрдорд╛ рдердкрд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдмрд┐рдирд╛ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдорд╛ рдЖрдзрд╛рд░рд┐рдд RBS рдПрдиреЛрдЯреЗрд╕рдирд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, VSCode рд╕рдореНрдкрд╛рджрдХрд╕рдБрдЧ TypePro рдПрдХреАрдХреГрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдб-рдЕрди рддрдпрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ)ред
  • рдзреЗрд░реИ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреЗ рдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдПрдХреЛ рдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдкрд╣рд┐рд▓реЗ "foo[0], bar[0] = baz, qux" рдХреЛ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдХреНрд░рдо baz, qux, foo, bar рдорд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рддрд░ рдЕрдм foo, bar, baz, quxред
  • VWA (рдЪрд░ рдЪреМрдбрд╛рдЗ рдЖрд╡рдВрдЯрди) рдореЗрдХрд╛рдирд┐рдЬрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реНрдЯреНрд░рд┐рдЩрдХрд╛ рд▓рд╛рдЧрд┐ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рдердкрд┐рдпреЛред
  • рдмрд┐рд▓реНрдЯ-рдЗрди рд░рддреНрди рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рд░ рддреА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреНред рдиреЗрдЯ-рдПрдлрдЯреАрдкреА, рдиреЗрдЯ-рдЗрдореНрдпрд╛рдк, рдиреЗрдЯ-рдкрдк, рдиреЗрдЯ-рдПрд╕рдПрдордЯреАрдкреА, рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕, рдкреНрд░рд╛рдЗрдо рд░ рдбрд┐рдмрдЧ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдирд┐рд░реНрдорд┐рдд рдЫрдиреНред

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди