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

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

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

  • рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рд╡рд╛ рд╕реНрдЯреНрдпрд╛рдиреНрдбрдЕрд▓реЛрди рд░рдирдЯрд╛рдЗрдорд╣рд░реВ рдЬрд╕реНрддреИ wasmtime рдЪрд▓рд╛рдЙрди WebAssembly рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдбрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдиреЗ CRuby рдЕрдиреБрд╡рд╛рджрдХрдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреЛрд░реНрдЯ рдердкрд┐рдпреЛред рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд╕рдБрдЧ рд╕реАрдзрд╛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рдЪрд▓реНрджрд╛, WASI (WebAssembly System Interface) API рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдЕрдиреНрдп рдЪреАрдЬрд╣рд░реВ рдордзреНрдпреЗ, WASI рдХреЛ рд╢реАрд░реНрд╖рдорд╛ VFS рдмрд╛рдЗрдиреНрдбрд┐рдЩ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд░реБрдмреА рднрд╛рд╖рд╛рдорд╛ рд╕рдореНрдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдПрдХрд▓ wasm рдлрд╛рдЗрд▓рдХреЛ рд░реВрдкрдорд╛ рджреГрд╢реНрдпрдорд╛ рдкреНрдпрд╛рдХреЗрдЬ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд░ рдбреЗрдореЛ рд╡реЗрдм рд╕реЗрд╡рд╛рд╣рд░реВ рдЬрд╕реНрддреИ TryRuby рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рд╡рд┐рдХрд╛рд╕рдХреЛ рд╣рд╛рд▓рдХреЛ рдЪрд░рдгрдорд╛, рдкреЛрд░реНрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрдзрд╛рд░рднреВрдд рд░ рдмреБрдЯрд╕реНрдЯреНрд░реНрдпрд╛рдк рдкрд░реАрдХреНрд╖рдг рд╕реБрдЗрдЯрд╣рд░реВ рдкрд╛рд╕ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рдереНрд░реЗрдб рдПрдкреАрдЖрдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдиред рдкреЛрд░реНрдЯрд▓реЗ рдлрд╛рдЗрдмрд░, рдЕрдкрд╡рд╛рдж рд╡рд╛ рдлреЛрд╣реЛрд░ рд╕рдЩреНрдХрд▓рдирд▓рд╛рдИ рдкрдирд┐ рд╕рдорд░реНрдерди рдЧрд░реНрджреИрдиред
  • рдЗрди-рдкреНрд░реЛрд╕реЗрд╕ JIT рдХрдореНрдкрд╛рдЗрд▓рд░ YJIT, Shopify рдИ-рдХрдорд░реНрд╕ рдкреНрд▓реЗрдЯрдлрд░реНрдордХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд░реЗрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд░ рдзреЗрд░реИ рд╡рд┐рдзрд┐рд╣рд░реВ рдХрд▓ рдЧрд░реНрдиреЗ рд░реБрдмреА рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдмрдврд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╣рд▓рдХреЛ рдПрдХ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХреЛ, рд╕реНрдерд┐рд░ рд░ рддрдпрд╛рд░ рдШреЛрд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫред рдЙрддреНрдкрд╛рджрди рдкреНрд░рдпреЛрдЧред рдкрд╣рд┐рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ MJIT JIT рдХрдореНрдкрд╛рдЗрд▓рд░рдмрд╛рдЯ рдореБрдЦреНрдп рднрд┐рдиреНрдирддрд╛, рдЬреБрди рд╡рд┐рдзрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ рд░ рдмрд╛рд╣реНрдп C рдХрдореНрдкрд╛рдЗрд▓рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдпреЛ рд╣реЛ рдХрд┐ YJIT рд▓реЗ рд▓реЗрдЬреА рдмреЗрд╕рд┐рдХ рдмреНрд▓рдХ рд╕рдВрд╕реНрдХрд░рдг (LBBV) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рд░ рдПрдХ рдПрдХреАрдХреГрдд JIT рдХрдореНрдкрд╛рдЗрд▓рд░ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред LBBV рд▓рд╛рдИ рдзрдиреНрдпрд╡рд╛рдж, JIT рд▓реЗ рд╡рд┐рдзрд┐рдХреЛ рд╕реБрд░реБрдорд╛ рдорд╛рддреНрд░ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ, рд░ рдХреЗрд╣реА рд╕рдордпрдкрдЫрд┐ рдмрд╛рдБрдХреА рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдХреНрд░рдордорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рдЪрд░ рд░ рддрд░реНрдХрд╣рд░реВрдХреЛ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реЗрдкрдЫрд┐ред YJIT x86-64 рд░ arm64/aarch64 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВ рд▓рд┐рдирдХреНрд╕, MacOS, BSD, рд░ рдЕрдиреНрдп UNIX рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫред

    CRuby рдХреЛ рд╡рд┐рдкрд░реАрдд, YJIT рдХреЛрдб Rust рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ рд░ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди rustc 1.58.0+ рдХрдореНрдкрд╛рдЗрд▓рд░ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрдпрд╕реИрд▓реЗ YJIT рд╕рдВрдХрд▓рди рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЕрд╕рдХреНрд╖рдо рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЫред YJIT рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкреНрд░рдпреЛрдЧрдХреЛ рддреБрд▓рдирд╛рдорд╛ yjit-рдмреЗрдиреНрдЪ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдЙрдБрджрд╛ рдкреНрд░рджрд░реНрд╢рдирдорд╛ 41% рд╡реГрджреНрдзрд┐ рд░реЗрдХрд░реНрдб рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред

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

  • рдЕрдХреБрд╢рд▓ рд░ рд▓рд╛рдореЛ-рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (ReDoS) рдорд╛ рдмрд╛рд╣реНрдп рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджрд╛ рд╕реЗрд╡рд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреЗ рдЖрдХреНрд░рдордгрд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рдердк рд╕реБрд░рдХреНрд╖рд╛ рдердкрд┐рдпреЛред рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рд╕реБрдзрд╛рд░рд┐рдПрдХреЛ рдорд┐рд▓реНрджреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо, рдЬрд╕рд▓реЗ рд╕реНрдорд░рдг рдкреНрд░рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ '/^a*b?a*$/ =~ "a" * 50000 + "x"' рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп 10 рдмрд╛рдЯ 0.003 рд╕реЗрдХреЗрдиреНрдбрдорд╛ рдШрдЯрд╛рдЗрдПрдХреЛ рдЫред рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирдХреЛ рдореВрд▓реНрдп рдореЗрдореЛрд░реА рдЦрдкрддрдорд╛ рд╡реГрджреНрдзрд┐ рд╣реЛ, рдЬрд╕рдХреЛ рдЦрдкрдд рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рдХреЛ рдЖрдХрд╛рд░ рднрдиреНрджрд╛ рд▓рдЧрднрдЧ 10 рдЧреБрдгрд╛ рдмрдвреА рдЫред рджреЛрд╕реНрд░реЛ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рднрдиреЗрдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, "Regexp.timeout = 1.0") рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рд╣реЛ, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рд╕рдордп рд╣реБрдиреБрдкрд░реНрдЫред
  • рд╣рд░рд╛рдЗрд░рд╣реЗрдХреЛ рд╡рд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ "рдЕрдиреНрдд" рдмрдиреНрдж рд╣реБрдиреЗ рдХрдердирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рдХрд╛рд░рдг рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдорджреНрджрдд рдЧрд░реНрди рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕_рд╕реБрдЭрд╛рд╡ рдореЛрдб рд╕рдорд╛рд╡реЗрд╢ рдЧрд░рд┐рдПрдХреЛ рдЫред рдирдорд┐рд▓реЗрдХреЛ `рдЕрдиреНрдд', рд╣рд░рд╛рдПрдХреЛ рдХреБрдЮреНрдЬреА рд╢рдмреНрдж (`do', `def`, `if`, etc.) ? 1 рд╡рд░реНрдЧ рдХреБрдХреБрд░ > 2 defbark > 3 рдЕрдиреНрдд 4 рдЕрдиреНрдд
  • рддреНрд░реБрдЯрд┐ рд╕реНрдерд╛рди рдореЛрдбрдорд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рд░ рддрд░реНрдХрд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рддрд░реНрдХрд╣рд░реВ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЙрдиреЗ рдХреНрд╖рдорддрд╛ рдердкрд┐рдпреЛ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐: test.rb:2: `+' рдорд╛: nil рд▓рд╛рдИ рдкреВрд░реНрдгрд╛рдВрдХ (TypeError) sum = ary рдорд╛ рдЬрдмрд░рдЬрд╕реНрддреА рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред 0] + ary [1] ^^^^^^
  • рдЕрдиреНрдп рддрд░реНрдХ рд╕реЗрдЯ рд╡рд┐рдзрд┐рд╣рд░реВрдорд╛ рдкреБрди: рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЧрд░реНрди рдирдпрд╛рдБ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдердкрд┐рдпреЛ: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд - рдкреБрд░рд╛рдиреЛ MJIT JIT рдХрдореНрдкрд╛рдЗрд▓рд░рдХреЛ рд╕рдВрд╕реНрдХрд░рдг, рд░реБрдмреА рднрд╛рд╖рд╛рдорд╛ рдкреБрди: рд▓реЗрдЦрд┐рдПрдХреЛред MJIT рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдереНрд░реЗрдбрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛ рдЫреБрдЯреНрдЯреИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ MJIT рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░рд┐рдпреЛред
  • Bundler 2.4 рдорд╛, рдирд┐рд░реНрднрд░рддрд╛ рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдЩрд▓реЗ PubGrub рд╕рдВрд╕реНрдХрд░рдг рдЦреЛрдЬрдХрд░реНрддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЬреБрди рдбрд╛рд░реНрдЯрдХрд╛ рд▓рд╛рдЧрд┐ рдкрдм рдкреНрдпрд╛рдХреЗрдЬ рдкреНрд░рдмрдиреНрдзрдХрджреНрд╡рд╛рд░рд╛ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдкрд╣рд┐рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ Molinillo рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо RubyGems рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЬрд╛рд░реА рдЫ, рддрд░ рднрд╡рд┐рд╖реНрдпрдорд╛ PubGrub рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рд╣реБрдиреЗрдЫред
  • рдмрд┐рд▓реНрдЯ-рдЗрди рд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдордгрд┐ рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВред

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

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