ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช Ruby 3.1

Ruby 3.1.0 ื™ืฆื ืœืื•ืจ, ืฉืคืช ืชื›ื ื•ืช ื“ื™ื ืžื™ืช ืžื•ื ื—ื” ืขืฆืžื™ื, ื™ืขื™ืœื” ืžืื•ื“ ื‘ืคื™ืชื•ื— ืชื•ื›ื ื™ื•ืช ื•ืžืฉืœื‘ืช ืืช ืžื™ื˜ื‘ ื”ืชื›ื•ื ื•ืช ืฉืœ Perl, Java, Python, Smalltalk, Eiffel, Ada ื•-Lisp. ืงื•ื“ ื”ืคืจื•ื™ืงื˜ ืžื•ืคืฅ ืชื—ืช ืจื™ืฉื™ื•ื ื•ืช BSD ("2-ืกืขื™ืฃ BSDL") ื•-"Ruby", ื”ืžืชื™ื™ื—ืก ืœื’ืจืกื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ ืฉืœ ืจื™ืฉื™ื•ืŸ GPL ื•ืชื•ืื ื‘ืื•ืคืŸ ืžืœื ืœ-GPLv3.

ืฉื™ืคื•ืจื™ื ืขื™ืงืจื™ื™ื:

  • ื ื•ืกืฃ ืžื”ื“ืจ ื—ื“ืฉ ืฉืœ JIT ื‘ืชื”ืœื™ืš, YJIT, ืฉื ื•ืฆืจ ืขืœ ื™ื“ื™ ืžืคืชื—ื™ ืคืœื˜ืคื•ืจืžืช ื”ืžืกื—ืจ ื”ืืœืงื˜ืจื•ื ื™ Shopify ื›ื—ืœืง ืžื™ื•ื–ืžื” ืœืฉื™ืคื•ืจ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืชื•ื›ื ื™ื•ืช Ruby ื”ืžืฉืชืžืฉื•ืช ื‘ืžืกื’ืจืช Rails ื•ืงื•ืจืื•ืช ืœื”ืจื‘ื” ืฉื™ื˜ื•ืช. ื”ื”ื‘ื“ืœ ื”ืขื™ืงืจื™ ืžื”ืžื”ื“ืจ MJIT JIT ืฉื”ื™ื” ื‘ืฉื™ืžื•ืฉ ื‘ืขื‘ืจ, ื”ืžื‘ื•ืกืก ืขืœ ืขื™ื‘ื•ื“ ืฉื™ื˜ื•ืช ืฉืœืžื•ืช ื•ืžืฉืชืžืฉ ื‘ืžื”ื“ืจ ื—ื™ืฆื•ื ื™ ื‘ืฉืคืช C, ื”ื•ื ืฉ-YJIT ืžืฉืชืžืฉ ื‘-Lazy Basic Block Versioning (LBBV) ื•ืžื›ื™ืœ ืžื”ื“ืจ JIT ืžืฉื•ืœื‘. ืขื LBBV, JIT ืงื•ื“ื ื›ืœ ืงื•ืžืคื™ืœืฆื™ื” ืจืง โ€‹โ€‹ืืช ืชื—ื™ืœืช ื”ืฉื™ื˜ื”, ื•ืงื•ืžืคื™ืœืฆื™ื” ืืช ื”ืฉืืจ ื–ืžืŸ ืžื” ืœืื—ืจ ืžื›ืŸ, ืœืื—ืจ ืฉืกื•ื’ื™ ื”ืžืฉืชื ื™ื ื•ื”ืืจื’ื•ืžื ื˜ื™ื ื”ืžืฉืžืฉื™ื ื ืงื‘ืขื™ื ื‘ืžื”ืœืš ื”ื‘ื™ืฆื•ืข. ื‘ืฉื™ืžื•ืฉ ื‘-YJIT, ื ืจืฉืžื” ืขืœื™ื™ื” ืฉืœ 22% ื‘ื‘ื™ืฆื•ืขื™ื ื‘ืขืช ื”ืคืขืœืช ืžื‘ื—ืŸ railsbench, ื•ืขืœื™ื™ื” ืฉืœ 39% ื‘ืžื‘ื—ืŸ ืจื™ื ื“ื•ืจ ื”ื ื•ื–ืœ. YJIT ืžื•ื’ื‘ืœ ื›ืจื’ืข ืœืชืžื™ื›ื” ื‘ืžืขืจื›ืช ื”ืคืขืœื” ื“ืžื•ื™ื™ืช ื™ื•ื ื™ืงืก ื‘ืžืขืจื›ื•ืช ืขื ืืจื›ื™ื˜ืงื˜ื•ืจืช x86-64 ื•ืžื•ืฉื‘ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ (ื›ื“ื™ ืœื”ืคืขื™ืœ, ืฆื™ื™ืŸ ืืช ื”ื“ื’ืœ "--yjit" ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื”).
  • ื‘ื™ืฆื•ืขื™ื ืžืฉื•ืคืจื™ื ืฉืœ ืžื”ื“ืจ MJIT JIT ื”ื™ืฉืŸ. ืขื‘ื•ืจ ืคืจื•ื™ืงื˜ื™ื ื”ืžืฉืชืžืฉื™ื ื‘-Rails, ื’ื•ื“ืœ ื”ืžื˜ืžื•ืŸ ื”ืžืงืกื™ืžืœื™ ื”ืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ (--jit-max-cache) ื”ื•ื’ื“ืœ ืž-100 ืœ-10000 ื”ื•ืจืื•ืช. ื”ืคืกื™ืง ืœื”ืฉืชืžืฉ ื‘-JIT ืขื‘ื•ืจ ืฉื™ื˜ื•ืช ืขื ื™ื•ืชืจ ืž-1000 ื”ื•ืจืื•ืช. ื›ื“ื™ ืœืชืžื•ืš ื‘-Zeitwerk of Rails, ืงื•ื“ JIT ืื™ื ื• ืžื•ืฉืœืš ืขื•ื“ ื›ืืฉืจ TracePoint ืžื•ืคืขืœืช ืขื‘ื•ืจ ืื™ืจื•ืขื™ื ื‘ื›ื™ืชื”.
  • ื”ื•ื ื›ื•ืœืœ ืžืืคืจ debug.gem ืžืฉื•ื›ืชื‘ ืœื—ืœื•ื˜ื™ืŸ, ื”ืชื•ืžืš ื‘ืื’ื™ื ืžืจื—ื•ืง, ืื™ื ื• ืžืื˜ ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉื ื•ื’ื“ื”, ืชื•ืžืš ื‘ืื™ื ื˜ื’ืจืฆื™ื” ืขื ืžืžืฉืงื™ ืื™ืชื•ืจ ื‘ืื’ื™ื ืžืชืงื“ืžื™ื (VSCode ื•-Chrome), ื™ื›ื•ืœ ืœืฉืžืฉ ืœืื™ืชื•ืจ ื‘ืื’ื™ื ืžืจื•ื‘ื™ ื”ืœื™ื›ื™ ื•ืืคืœื™ืงืฆื™ื•ืช ืžืจื•ื‘ื™ ืชื”ืœื™ื›ื™ื, ืžืกืคืง ืžืžืฉืง ื‘ื™ืฆื•ืข ืงื•ื“ REPL, ืžืฆื™ืข ื™ื›ื•ืœื•ืช ืžืขืงื‘ ืžืชืงื“ืžื•ืช, ื™ื›ื•ืœ ืœื”ืงืœื™ื˜ ื•ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืงื˜ืขื™ ืงื•ื“. ืžืืชืจ ื”ื‘ืื’ื™ื ืฉื”ื•ืฆืข ื‘ืขื‘ืจ lib/debug.rb ื”ื•ืกืจ ืžื”ื”ืคืฆื” ื”ื‘ืกื™ืกื™ืช.
    ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช Ruby 3.1
  • ื”ื˜ืžืขื” ื”ื“ื’ืฉื” ื•ื™ื–ื•ืืœื™ืช ืฉืœ ืฉื’ื™ืื•ืช ื‘ื“ื•ื—ื•ืช ืžืขืงื‘ ื”ืชืงืฉืจื•ืช ื—ื•ื–ืจืช. ืกื™ืžื•ืŸ ืฉื’ื™ืื•ืช ืžืกื•ืคืง ื‘ืืžืฆืขื•ืช ื—ื‘ื™ืœืช gem ื”ืžื•ื‘ื ื™ืช ื•ืชื•ืžื›ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ error_highlight. ื›ื“ื™ ืœื‘ื˜ืœ ืกื™ืžื•ืŸ ืฉื’ื™ืื•ืช, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื”ื’ื“ืจื” "--disable-error_highlight". $ ruby โ€‹โ€‹test.rb test.rb:1:in " ": ืฉื™ื˜ื” ืœื ืžื•ื’ื“ืจืช "ื–ืžืŸ" ืขื‘ื•ืจ 1:Integer (NoMethodError) 1.time {} ^^^^^ ื”ืื ื”ืชื›ื•ื•ื ืช? ืคึผึดื™
  • ืžืขื˜ืคืช ื”ื—ื™ืฉื•ื‘ื™ื ื”ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื™ื IRB (REPL, Read-Eval-Print-Loop) ืžื™ื™ืฉืžืช ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ื”ืงื•ื“ ืฉื”ื•ื–ืŸ (ื‘ืขืช ื”ื”ืงืœื“ื”, ืžื•ืฆื’ ืจืžื– ืขื ืืคืฉืจื•ื™ื•ืช ืœื”ืžืฉืš ืงืœื˜, ืฉื‘ื™ื ื™ื”ื ื ื™ืชืŸ ืœื ื•ืข ื‘ืืžืฆืขื•ืช Tab ืื• Shift+ ืžืงืฉ Tab). ืœืื—ืจ ื‘ื—ื™ืจืช ืืคืฉืจื•ืช ื”ื”ืžืฉืš, ืžื•ืฆื’ืช ื‘ืงืจื‘ืช ืžืงื•ื ืชื™ื‘ืช ื“ื•-ืฉื™ื— ื”ืžืฆื™ื’ื” ืืช ื”ืชื™ืขื•ื“ ื”ืžืฉื•ื™ืš ืœืคืจื™ื˜ ื”ื ื‘ื—ืจ. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืงื™ืฆื•ืจ ื”ืžืงืœื“ืช Alt+d ื›ื“ื™ ืœื’ืฉืช ืœืชื™ืขื•ื“ ื”ืžืœื.
    ืฉื—ืจื•ืจ ืฉืคืช ื”ืชื›ื ื•ืช Ruby 3.1
  • ืชื—ื‘ื™ืจ ื”ืฉืคื” ืžืืคืฉืจ ื›ืขืช ืœื“ืœื’ ืขืœ ืขืจื›ื™ื ื‘-hash ืžื™ืœื•ืœื™ ื•ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืžื™ืœื•ืช ืžืคืชื— ื‘ืขืช ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื•ืช. ืœื“ื•ื’ืžื”, ื‘ืžืงื•ื ื”ื‘ื™ื˜ื•ื™ "{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 ื‘-[n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • ื‘ื”ืชืืžื•ืช ื“ืคื•ืกื™ื ืฉืœ ืฉื•ืจื” ืื—ืช, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืžื™ื˜ ืกื•ื’ืจื™ื™ื: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • ืฉืคืช ื”ื”ืขืจื•ืช ืžืกื•ื’ RBS, ื”ืžืืคืฉืจืช ืœืงื‘ื•ืข ืืช ืžื‘ื ื” ื”ืชื•ื›ื ื™ืช ื•ื”ืกื•ื’ื™ื ืฉื‘ื”ื ื ืขืฉื” ืฉื™ืžื•ืฉ, ื”ื•ืกื™ืคื” ืชืžื™ื›ื” ืœืฆื™ื•ืŸ ื”ื’ื‘ื•ืœ ื”ืขืœื™ื•ืŸ ืฉืœ ืคืจืžื˜ืจื™ ืกื•ื’ ื‘ืืžืฆืขื•ืช ื”ืกืžืœ "<", ื”ื•ืกืคื” ืชืžื™ื›ื” ื‘ื›ื™ื ื•ื™ื™ื ืฉืœ ืกื•ื’ื™ื ื’ื ืจื™ื™ื, ื”ื˜ืžืขื” ืชืžื™ื›ื” ืขื‘ื•ืจ ืื•ืกืคื™ื ืœื ื™ื”ื•ืœ ืื‘ื ื™ ื—ืŸ, ืฉื™ืคื•ืจ ื”ื‘ื™ืฆื•ืขื™ื ื•ื”ื˜ืžืขืช ื—ืชื™ืžื•ืช ื—ื“ืฉื•ืช ืจื‘ื•ืช ืœืกืคืจื™ื•ืช ืžื•ื‘ื ื•ืช ื•ืกื˜ื ื“ืจื˜ื™ื•ืช.
  • ืชืžื™ื›ื” ื ื™ืกื™ื•ื ื™ืช ื‘ืกื‘ื™ื‘ื•ืช ืคื™ืชื•ื— ืžืฉื•ืœื‘ื•ืช ื ื•ืกืคื” ืœื ืชื— ื”ืกื•ื’ ื”ืกื˜ื˜ื™ TypePro, ืืฉืจ ื™ื•ืฆืจ ื”ืขืจื•ืช RBS ื”ืžื‘ื•ืกืกื•ืช ืขืœ ื ื™ืชื•ื— ืงื•ื“ ืœืœื ืžื™ื“ืข ืกื•ื’ ืžืคื•ืจืฉ (ืœื“ื•ื’ืžื”, ื”ื•ื›ื ื” ืชื•ืกืฃ ืœืฉื™ืœื•ื‘ TypePro ืขื ืขื•ืจืš VSCode).
  • ืกื“ืจ ื”ืขื™ื‘ื•ื“ ืฉืœ ืžืฉื™ืžื•ืช ืžืจื•ื‘ื•ืช ื”ืฉืชื ื”. ืœื“ื•ื’ืžื”, ื‘ืขื‘ืจ ืจื›ื™ื‘ื™ ื”ื‘ื™ื˜ื•ื™ "foo[0], bar[0] = baz, qux" ืขื•ื‘ื“ื• ื‘ืกื“ืจ baz, qux, foo, bar, ืืš ื›ืขืช foo, bar, baz, qux.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื ื™ืกื™ื•ื ื™ืช ื‘ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ ืœืžื—ืจื•ื–ื•ืช ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ืŸ VWA (Variable Width Allocation).
  • ื’ืจืกืื•ืช ืžืขื•ื“ื›ื ื•ืช ืฉืœ ืžื•ื“ื•ืœื™ ืื‘ื ื™ ื—ืŸ ืžื•ื‘ื ื™ื ื•ืฉืœ ืืœื” ื”ื›ืœื•ืœื™ื ื‘ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช. ื—ื‘ื™ืœื•ืช net-ftp, net-imap, net-pop, net-smtp, matrix, prime ื•-debug ืžื•ื‘ื ื•ืช.

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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”