Paglabas ng Ruby programming language 3.1

Ang Ruby 3.1.0 ay inilabas, isang dynamic na object-oriented programming language na napakahusay sa pagbuo ng programa at isinasama ang pinakamahusay na mga tampok ng Perl, Java, Python, Smalltalk, Eiffel, Ada at Lisp. Ang code ng proyekto ay ipinamahagi sa ilalim ng mga lisensya ng BSD (β€œ2-clause BSDL”) at β€œRuby,” na tumutukoy sa pinakabagong bersyon ng lisensya ng GPL at ganap na tugma sa GPLv3.

Mga pangunahing pagpapabuti:

  • Isang bagong pang-eksperimentong in-process na JIT compiler, ang YJIT, ay idinagdag, na nilikha ng mga developer ng Shopify e-commerce platform bilang bahagi ng isang inisyatiba upang mapabuti ang pagganap ng mga programang Ruby na gumagamit ng Rails framework at tumatawag ng maraming pamamaraan. Ang pangunahing pagkakaiba sa dating ginamit na MJIT JIT compiler, na nakabatay sa pagproseso ng buong pamamaraan at gumagamit ng external na compiler sa wikang C, ay ang YJIT ay gumagamit ng Lazy Basic Block Versioning (LBBV) at naglalaman ng pinagsamang JIT compiler. Sa LBBV, ang JIT ay unang nag-compile lamang sa simula ng pamamaraan, at nag-compile ng natitira pagkaraan ng ilang oras, pagkatapos matukoy ang mga uri ng mga variable at argumento na ginamit sa panahon ng pagpapatupad. Kapag gumagamit ng YJIT, isang 22% na pagtaas sa performance ang naitala kapag nagpapatakbo ng railsbench test, at isang 39% na pagtaas sa liquid-render na pagsubok. Kasalukuyang limitado ang YJIT sa suporta para sa mga unix-like na OS sa mga system na may x86-64 architecture at hindi pinagana bilang default (upang i-activate, tukuyin ang flag na "--yjit" sa command line).
  • Pinahusay na pagganap ng lumang MJIT JIT compiler. Para sa mga proyektong gumagamit ng Rails, ang default na maximum na laki ng cache (--jit-max-cache) ay nadagdagan mula 100 hanggang 10000 mga tagubilin. Huminto sa paggamit ng JIT para sa mga pamamaraan na may higit sa 1000 mga tagubilin. Upang suportahan ang Zeitwerk ng Riles, hindi na itatapon ang JIT code kapag pinagana ang TracePoint para sa mga kaganapan sa klase.
  • Kabilang dito ang isang ganap na rewritten na debug.gem debugger, na sumusuporta sa malayuang pag-debug, hindi nagpapabagal sa pag-debug na application, sumusuporta sa pagsasama sa mga advanced na interface ng pag-debug (VSCode at Chrome), maaaring magamit para sa pag-debug ng mga multi-threaded at multi-process na mga application, nagbibigay isang interface ng pagpapatupad ng REPL code, nag-aalok ng mga advanced na kakayahan sa pagsubaybay, maaaring mag-record at mag-replay ng mga snippet ng code. Ang dating inaalok na debugger lib/debug.rb ay inalis sa base distribution.
    Paglabas ng Ruby programming language 3.1
  • Ipinatupad ang visual na pag-highlight ng mga error sa mga call back trace na ulat. Ang pag-flag ng error ay ibinibigay gamit ang built-in at default-enabled na gem package error_highlight. Upang i-disable ang pag-flag ng error, maaari mong gamitin ang setting na "--disable-error_highlight". $ ruby ​​​​test.rb test.rb:1:in " ": undefined method "time" para sa 1:Integer (NoMethodError) 1.time {} ^^^^^ Ang ibig mo bang sabihin? beses
  • Ang shell ng mga interactive na kalkulasyon na IRB (REPL, Read-Eval-Print-Loop) ay nagpapatupad ng awtomatikong pagkumpleto ng inilagay na code (habang nagta-type ka, ipinapakita ang isang pahiwatig na may mga opsyon para sa pagpapatuloy ng input, kung saan maaari kang lumipat sa Tab o Shift+ Tab key). Pagkatapos piliin ang opsyon sa pagpapatuloy, ang isang dialog box ay ipinapakita sa malapit na nagpapakita ng dokumentasyong nauugnay sa napiling item. Maaaring gamitin ang keyboard shortcut na Alt+d para ma-access ang buong dokumentasyon.
    Paglabas ng Ruby programming language 3.1
  • Pinapayagan na ngayon ng syntax ng wika ang mga halaga sa hash literal at mga argumento ng keyword na laktawan kapag tumatawag ng mga function. Halimbawa, sa halip na ang expression na "{x: x, y: y}" maaari mo na ngayong tukuyin ang "{x:, y:}", at sa halip na "foo(x: x, y: y)" - foo( x:, y :)".
  • Pinatatag na suporta para sa mga single-line pattern na tugma (ary => [x, y, z]), na hindi na na-flag bilang eksperimental.
  • Ang operator na "^" sa mga pattern na tugma ay maaari na ngayong maglaman ng mga arbitrary na expression, halimbawa: Prime.each_cons(2).lazy.find_all{_1 sa [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Sa single-line pattern matches, maaari mong alisin ang mga panaklong: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Ang wika ng anotasyon ng uri ng RBS, na nagbibigay-daan sa iyong matukoy ang istruktura ng programa at ang mga uri na ginamit, ay nagdagdag ng suporta para sa pagtukoy sa itaas na limitasyon ng mga parameter ng uri gamit ang simbolo na "<", nagdagdag ng suporta para sa mga alias ng mga generic na uri, nagpatupad ng suporta para sa mga koleksyon para sa pamamahala ng mga hiyas, pinahusay na pagganap at ipinatupad ang maraming bagong lagda para sa built-in at karaniwang mga aklatan.
  • Ang pang-eksperimentong suporta para sa pinagsama-samang development environment ay idinagdag sa TypePro static type analyzer, na bumubuo ng RBS annotation batay sa code analysis nang walang tahasang uri ng impormasyon (halimbawa, isang add-on ang inihanda para sa pagsasama ng TypePro sa VSCode editor).
  • Ang pagkakasunud-sunod ng pagproseso ng maraming takdang-aralin ay nabago. Halimbawa, dati ang mga bahagi ng expression na "foo[0], bar[0] = baz, qux" ay naproseso sa pagkakasunud-sunod na baz, qux, foo, bar, ngunit ngayon foo, bar, baz, qux.
  • Nagdagdag ng pang-eksperimentong suporta para sa paglalaan ng memorya para sa mga string gamit ang mekanismo ng VWA (Variable Width Allocation).
  • Mga na-update na bersyon ng mga built-in na gem module at ang mga kasama sa karaniwang library. Ang net-ftp, net-imap, net-pop, net-smtp, matrix, prime at debug packages ay built-in.

Pinagmulan: opennet.ru

Magdagdag ng komento