ืžืขืœื“ื•ื ื’ ืคื•ืŸ ื“ื™ Ruby ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš 3.2

Ruby 3.2.0 ืื™ื– ื‘ืืคืจื™ื™ื˜, ืึท ื“ื™ื ืึทืžื™ืฉ ื›ื™ื™ืคืขืฅ-ืึธืจื™ืขื ื˜ื™ื“ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš ื•ื•ืึธืก ืื™ื– ื”ืขื›ืกื˜ ืขืคืขืงื˜ื™ื•ื• ืื™ืŸ ืคึผืจืึธื’ืจืึทื ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื•ืŸ ื™ื ืงืึธืจืคึผืขืจื™ื™ืฅ ื“ื™ ื‘ืขืกื˜ืขืจ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ Perl, Java, Python, Smalltalk, Eiffel, Ada ืื•ืŸ Lisp. ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืงืึธื“ ืื™ื– ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืื•ื ื˜ืขืจ ื“ื™ BSD ("2-ืงืœืึธื– BSDL") ืื•ืŸ "Ruby" ืœื™ื™ืกืึทื ืกื™ื–, ื•ื•ืึธืก ืจืขืคืขืจืก ืฆื• ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ GPL ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืื•ืŸ ืื™ื– ื’ืึธืจ ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืžื™ื˜ GPLv3.

ื”ื•ื™ืคึผื˜ ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ:

  • ืฆื•ื’ืขื’ืขื‘ืŸ ืึทืŸ ืขืจืฉื˜ ืคึผืึธืจื˜ ืคื•ืŸ ื“ื™ Cruby ื™ื‘ืขืจื–ืขืฆืขืจ, ื•ื•ืึธืก ืงืึทืžืคึผื™ื™ืœื– ืื™ืŸ ื•ื•ืขื‘ืึทืกืกืขืžื‘ืœื™ ื™ื ื˜ืขืจืžื™ื“ื™ื™ื˜ ืงืึธื“ ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ืึท ื•ื•ืขื‘ ื‘ืœืขื˜ืขืจืขืจ ืึธื“ืขืจ ืื•ื ื˜ืขืจ ืกื˜ืึทื ื“ืึทืœืึธื ืข ืจื•ื ื˜ื™ืžืข ืึทื–ืึท ื•ื•ื™ wasmtime. ืคึฟืึทืจ ื“ื™ืจืขืงื˜ ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืžื™ื˜ ื“ื™ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื ื•ื•ืขืŸ ืคืœื™ืกื ื“ื™ืง ืกืขืคึผืขืจืึทื˜ืœื™, ื“ื™ WASI (WebAssembly System Interface) API ืื™ื– ื’ืขื ื™ืฆื˜. ืฆื•ื•ื™ืฉืŸ ืื ื“ืขืจืข ื–ืื›ืŸ, ืึท VFS ืจืึทืคึผืขืจ ืื™ื– ืฆื•ื’ืขืฉื˜ืขืœื˜ ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ WASI, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืคึผืขืงืœ ื“ื™ ื’ืื ืฆืข Ruby ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ืึท ืคึผืจืขื–ืขื ื˜ื™ืจื•ื ื’ ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ืึท ืื™ื™ืŸ ื•ื•ืึทืกื ื˜ืขืงืข. ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ืึท ื‘ืœืขื˜ืขืจืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืฆื• ืฉืึทืคึฟืŸ ื˜ืจื™ื™ื ื™ื ื’ ืื•ืŸ ื“ืขืžืึธ ื•ื•ืขื‘ ื‘ืึทื“ื™ื ื•ื ื’ืก ืึทื–ืึท ื•ื•ื™ TryRuby. ืื™ืŸ ื“ืขื ืงืจืึทื ื˜ ื‘ื™ื ืข ืคื•ืŸ โ€‹โ€‹ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’, ื“ื™ ืคึผืึธืจื˜ ื”ืฆืœื—ื” ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ื“ื™ ื™ืงืขืจื“ื™ืง ืื•ืŸ ื‘ืึธืึธืฆื˜ืจืึทืคึผ ืคึผืจื•ื‘ื™ืจืŸ ืกื•ื•ื™ืฅ, ื•ื•ืึธืก ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ ื“ื™ ืคืึธื“ืขื ืึทืคึผื™. ื“ืขืจ ืคึผืึธืจื˜ ืื•ื™ืš ืฉื˜ื™ืฆื˜ ื ื™ืฉื˜ ืคื™ื™ื‘ืขืจื–, ืื•ื™ืกื ืขืžืขืŸ ืึธื“ืขืจ ืžื™ืกื˜ ื–ืึทืžืœื•ื ื’.
  • ื“ืขืจ YJIT ืื™ืŸ-ืคืจืืฆืขืก JIT ืงืืžืคื™ื™ืœืขืจ, ื‘ืืฉืืคืŸ ื“ื•ืจืš ื“ื™ ื“ืขื•ื•ืขืœืืคืขืจืก ืคื•ืŸ ื“ืขืจ Shopify ืื™-ืงืืžืขืจืฅ ืคืœืื˜ืคืืจืžืข ืืœืก ื˜ื™ื™ืœ ืคื•ืŸ ืืŸ ืื™ื ื™ืฆื™ืื˜ื™ื•ื• ืฆื• ืคืืจื‘ืขืกืขืจืŸ ื“ื™ ืคืขืจืคืืจืžืื ืก ืคื•ืŸ ืจื•ื‘ื™ ืคืจืื’ืจืืžืขืŸ ื ื™ืฆื ื“ื™ื’ ื“ืขื Rails ืคืจื™ื™ืžื•ื•ืขืจืง ืื•ืŸ ืจื•ืคืŸ ืืกืืš ืžืขื˜ืื“ืŸ, ืื™ื– ื’ืขื•ื•ืืจืŸ ื’ืขืžืืœื“ืŸ ืืœืก ืกื˜ืื‘ื™ืœ ืื•ืŸ ื’ืจื™ื™ื˜ ืคืืจ ืคืจืื“ื•ืงืฆื™ืข ื‘ืื ื•ืฅ. ื“ืขืจ ื”ื•ื™ืคื˜ ืื•ื ื˜ืขืจืฉื™ื™ื“ ืคื•ืŸ ื“ืขื ืคืจื™ืขืจ ื’ืขื ื•ืฆื˜ืŸ MJIT JIT ืงืืžืคื™ื™ืœืขืจ, ื•ื•ืืก ืื™ื– ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื‘ืืืจื‘ืขื˜ืŸ ื’ืื ืฆืข ืžืขื˜ืื“ืŸ ืื•ืŸ ื ื™ืฆื˜ ืืŸ ืขืงืกื˜ืขืจื ืขื C ืงืืžืคื™ื™ืœืขืจ, ืื™ื– ืื– YJIT ื ื™ืฆื˜ Lazy Basic Block Versioning (LBBV) ืื•ืŸ ืื ื˜ื”ืืœื˜ ืืŸ ืื™ื ื˜ืขื’ืจื™ืจื˜ืŸ JIT ืงืืžืคื™ื™ืœืขืจ. ื“ืื ืง LBBV, ืงืืžืคื™ื™ืœื˜ ื“ืขืจ JIT ืื ืคืื ื’ืก ื ืืจ ื“ืขื ืื ืคืื ื’ ืคื•ืŸ ื ืžืขื˜ืื“, ืื•ืŸ ืงืืžืคื™ื™ืœื˜ ื“ื™ ืจืขืฉื˜ ืฉืคืขื˜ืขืจ, ื ืื›ื“ืขื ื•ื•ืืก ื“ื™ ื˜ื™ืคืŸ ืคื•ืŸ ื“ื™ ื’ืขื ื•ืฆื˜ืข ื•ื•ืขืจื™ืึทื‘ืœืขืŸ ืื•ืŸ ืืจื’ื•ืžืขื ื˜ืŸ ื•ื•ืขืจืŸ ื‘ืืฉื˜ื™ืžื˜ ื‘ืขืชืŸ ืื•ื™ืกืคื™ืจืŸ. YJIT ืื™ื– ืคืืจืืŸ ืคืืจ ื“ื™ x86-64 ืื•ืŸ arm64/aarch64 ืืจื›ื™ื˜ืขืงื˜ื•ืจืŸ. Linux, MacOS, BSD ืื•ืŸ ืื ื“ืขืจืข UNIX ืคึผืœืึทื˜ืคืึธืจืžืขืก.

    ื ื™ื˜ ืขื ืœืขืš Ruby, ื“ื™ YJIT ืงืึธื“ ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ื“ื™ ืจื•ืกื˜ ืฉืคึผืจืึทืš ืื•ืŸ ืจื™ืงื•ื•ื™ื™ืขืจื– ื“ื™ Rustc 1.58.0+ ืงืึทืžืคึผื™ื™ืœืขืจ ืคึฟืึทืจ ื–ืึทืžืœื•ื ื’, ืึทื–ื•ื™ ื“ื™ YJIT ื‘ื•ื™ืขืŸ ืื™ื– ืคืึทืจืงืจื™ืคึผืœื˜ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืื•ืŸ ืื™ื– ืึทืคึผืฉืึทื ืึทืœ. ื•ื•ืขืŸ ื ื™ืฆืŸ YJIT, ืึท 41% ืคืึทืจื’ืจืขืกืขืจืŸ ืื™ืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืื™ื– ืจืขืงืึธืจื“ืขื“ ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ yjit-ื‘ืขื ืง ื˜ืขืกื˜ ืงืึทืžืคึผืขืจื“ ืžื™ื˜ ื™ื ื˜ืขืจืคึผืจื™ื˜ื™ื™ืฉืึทืŸ.

    ืžืขืœื“ื•ื ื’ ืคื•ืŸ ื“ื™ Ruby ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš 3.2
  • ืฆื•ื’ืขืœื™ื™ื’ื˜ ื ืึธืš ืฉื•ืฅ ืงืขื’ืŸ ืึธืคึผืœื™ื™ืงืขื ื•ื ื’ ืคื•ืŸ ื“ื™ื ืกื˜ ืื ืคืืœืŸ ื•ื•ืขืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึทื˜ืŸ ืื™ืŸ ื‘ืึทื˜ืœืึธื ื™ืฉ ืื•ืŸ ืฆื™ื™ื˜-ืงืึทื ืกื•ืžื™ื ื’ ืจืขื’ื•ืœืขืจ ืื•ื™ืกื“ืจื•ืงืŸ (ReDoS). ื“ื™ ื•ื•ืึธืก ืจื™ื›ื˜ืŸ ืึทืœื’ืขืจื™ื“ืึทื, ื•ื•ืึธืก ื ื™ืฆื˜ ืžืขืžืึธืจื™ื–ืึทื˜ื™ืึธืŸ ื˜ืขื›ื ื™ืง, ืื™ื– ื‘ืื˜ื™ื™ื˜ื™ืง ื™ืžืคึผืจื•ื•ื•ื“. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืฆื™ื™ื˜ ืคื•ืŸ ื“ื™ ืื•ื™ืกื“ืจื•ืง '/^ืึท*ื‘?ืึท*$/ =~ "ืึท" * 50000 + "ืจืขื ื˜ื’ืขื "' ืื™ื– ืจื™ื“ื•ืกื˜ ืคื•ืŸ 10 ืฆื• 0.003 ืกืขืงื•ื ื“ืขืก. ื“ืขืจ ืคึผืจื™ื™ึทื– ืคื•ืŸ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ืื™ื– ืึท ืคืึทืจื’ืจืขืกืขืจืŸ ืื™ืŸ ื–ื›ึผืจื•ืŸ ืงืึทื ืกืึทืžืฉืึทืŸ, ื“ื™ ืงืึทื ืกืึทืžืฉืึทืŸ ืคื•ืŸ ื•ื•ืึธืก ืื™ื– ื‘ืขืขืจืขืš 10 ืžืืœ ื”ืขื›ืขืจ ื•ื•ื™ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ. ื“ื™ ืจื’ืข ื–ื™ื›ืขืจื”ื™ื™ื˜ ืžืึธืก ืื™ื– ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื“ืขืคื™ื ื™ืจืŸ ืึท ื˜ื™ื™ืžืึทื•ื˜ (ืœืžืฉืœ, "Regexp.timeout = 1.0") ื‘ืขืฉืึทืก ื•ื•ืึธืก ื“ื™ ืจืขื’ื•ืœืขืจ ืื•ื™ืกื“ืจื•ืง ืžื•ื–ืŸ ื–ื™ื™ืŸ ืคึผืจืึทืกืขืกื˜.
  • ื“ื™ ืกื™ื ื˜ืึทืงืก_ืกืึทื’ื“ื–ืฉืขืกื˜ ืžืึธื“ืข ืื™ื– ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜, ื•ื•ืึธืก ื”ืขืœืคึผืก ื“ื™ืึทื’ื ืึธื–ื™ืจืŸ ื“ื™ ืกื™ื‘ื•ืช ืคื•ืŸ ืขืจืจืึธืจืก ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ืึท ืคืขืœื ื“ื™ืง ืึธื“ืขืจ ืขืงืกื˜ืจืข ืงืœืึธื•ื–ื™ื ื’ "ืกื•ืฃ" ืื•ื™ืกื“ืจื•ืง. ื ื™ื˜ ืขื ืœืขืš 'ืกื•ืฃ', ืคืขืœื ื“ื™ืง ืงื™ื•ื•ืขืจื“ ('ื˜ืึธืŸ', 'ื“ืขืฃ', 'ืื•ื™ื‘', ืืื–"ื• ื•) ? 1 ืงืœืึทืก ื“ืึธื’> 2 ื“ืขืคื‘ืึทืจืง> 3 ืกื•ืฃ 4 ืกื•ืฃ
  • ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืฆื™ื™ื›ืŸ ืึทืจื’ื•ืžืขื ื˜ืŸ ืคึฟืึทืจ ืขืจืจืึธืจืก ืฉื™ื™ึทื›ื•ืช ืฆื• ื˜ื™ื™ืคึผืก ืื•ืŸ ืึทืจื’ื•ืžืขื ื˜ืŸ ืื™ื– ืฆื•ื’ืขืœื™ื™ื’ื˜ ืฆื• ื“ื™ ื•ื•ื™ื™ึทื– ืžืึธื“ืข ืคื•ืŸ โ€‹โ€‹ื˜ืขื•ืช ืึธืจื˜, ืœืžืฉืœ: test.rb:2:in `+': nil ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ื’ืขืฆื•ื•ื•ื ื’ืขืŸ ืื™ืŸ ื™ื ื˜ืขื’ืขืจ (ื˜ื™ืคึผืขืขืจืจืึธืจ) sum = ary [0] + ืึทืจื™ [1] ^^^^^^
  • ืฆื•ื’ืขืœื™ื™ื’ื˜ ื ื™ื™ึท ืกื™ื ื˜ืึทืงืก ืคึฟืึทืจ ืจื™ื“ืขืจืขืงื˜ื™ื ื’ ืกืขืฅ ืคื•ืŸ ืึทืจื’ื•ืžืขื ื˜ืŸ ืฆื• ืื ื“ืขืจืข ืžืขื˜ื”ืึธื“ืก: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler ืื™ื– ืคืืจื’ืขืœื™ื™ื’ื˜ - ืึท ื•ื•ืึทืจื™ืึทื ื˜ ืคื•ืŸ ื“ื™ ืึทืœื˜ MJIT JIT ืงืึทืžืคึผื™ื™ืœืขืจ, ืจื™ืจื™ื˜ืึทืŸ ืื™ืŸ ื“ื™ Ruby ืฉืคึผืจืึทืš. ื™ื ืฉื•ืจื“ ืึทื– MJIT ืœื•ื™ืคื˜ ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืคึผืจืึธืฆืขืก ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ืึท MJIT ืึทืจื‘ืขื˜ืขืจ ืคืึธื“ืขื.
  • ืื™ืŸ ื‘ื•ื ื“ืœืขืจ 2.4, ื“ืขืคึผืขื ื“ืขื ืกื™ ืคึผืจืึทืกืขืกื™ื ื’ ื ื™ืฆื˜ ื“ื™ PubGrub ื•ื•ืขืจืกื™ืข ื“ืขื˜ืขืงื˜ืึธืจ, ืื•ื™ืš ื’ืขื ื™ืฆื˜ ืื™ืŸ ื“ื™ ืฉืขื ืง ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ ืคึฟืึทืจ ื“ื™ ื“ืึทืจื˜ ืฉืคึผืจืึทืš. ื“ื™ ืคืจื™ืขืจ ื’ืขื•ื•ื™ื™ื ื˜ Molinillo ืึทืœื’ืขืจื™ื“ืึทื ื”ืืœื˜ ืฆื• ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืื™ืŸ RubyGems, ืึธื‘ืขืจ ื•ื•ืขื˜ ืื•ื™ืš ื–ื™ื™ืŸ ืจื™ืคึผืœื™ื™ืกื˜ ื“ื•ืจืš PubGrub ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜.
  • ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ื™ื™ื“ืœืฉื˜ื™ื™ืŸ ืžืึทื“ื–ืฉื•ืœื– ืื•ืŸ ื“ื™ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ ื ืึธืจืžืึทืœ ื‘ื™ื‘ืœื™ืึธื˜ืขืง.

ืžืงื•ืจ: opennet.ru

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster