Ruby програмчлалын хэлний хувилбар 3.1

Ruby 3.1.0 гарсан ба динамик объект хандалтат програмчлалын хэл нь програм боловсруулахад өндөр үр ашигтай бөгөөд Perl, Java, Python, Smalltalk, Eiffel, Ada, Lisp-ийн шилдэг боломжуудыг агуулсан. Төслийн код нь GPL лицензийн хамгийн сүүлийн хувилбарт хамаарах, GPLv2-тай бүрэн нийцдэг BSD ("3 зүйлтэй BSDL") болон "Ruby" лицензийн дагуу түгээгддэг.

Гол сайжруулалтууд:

  • Shopify цахим худалдааны платформыг хөгжүүлэгчид Rails фреймворк ашигладаг Ruby програмуудын гүйцэтгэлийг сайжруулах санаачилгын хүрээнд бүтээгдсэн YJIT хэмээх шинэ туршилтын процессын JIT хөрвүүлэгчийг нэмж оруулав. Өмнө нь ашиглаж байсан MJIT JIT хөрвүүлэгчээс гол ялгаа нь бүхэл бүтэн аргуудыг боловсруулахад үндэслэсэн, Си хэл дээр гадаад хөрвүүлэгч ашигладаг YJIT нь Lazy Basic Block Versioning (LBBV) ашигладаг бөгөөд нэгдсэн JIT хөрвүүлэгчийг агуулдаг. LBBV-ийн тусламжтайгаар JIT нь эхлээд аргын зөвхөн эхлэлийг эмхэтгэдэг бөгөөд гүйцэтгэлийн явцад ашигласан хувьсагчийн төрлүүд болон аргументуудыг тодорхойлсны дараа хэсэг хугацааны дараа үлдсэн хэсгийг нь эмхэтгэдэг. YJIT-ийг ашиглах үед railsbench тестийг ажиллуулахад гүйцэтгэл 22%, шингэнийг үзүүлэх туршилт 39% өссөн байна. YJIT нь одоогоор x86-64 архитектуртай системүүдийн unix-тэй төстэй үйлдлийн системүүдийн дэмжлэгээр хязгаарлагдаж байгаа бөгөөд анхдагчаар идэвхгүй болсон байна (идэвхжүүлэхийн тулд командын мөрөнд “--yjit” тугийг зааж өгнө үү).
  • Хуучин MJIT JIT хөрвүүлэгчийн гүйцэтгэл сайжирсан. Rails ашигладаг төслүүдийн хувьд анхдагч хамгийн их кэш хэмжээг (--jit-max-cache) 100-аас 10000 заавар болгон нэмэгдүүлсэн. 1000 гаруй заавартай аргуудад JIT ашиглахаа больсон. Zeitwerk of Rails-ийг дэмжихийн тулд TracePoint-г ангийн үйл явдалд идэвхжүүлсэн үед JIT кодыг хаяхаа больсон.
  • Үүнд алсын зайнаас дибаг хийхийг дэмждэг, дибаг хийсэн програмыг удаашруулдаггүй, дэвшилтэт дибаг хийх интерфэйсүүдтэй (VSCode болон Chrome) нэгтгэхийг дэмждэг, олон урсгалтай болон олон процесст програмуудыг дибаг хийхэд ашиглаж болох, бүрэн дахин бичсэн debug.gem дибаглагч багтсан болно. REPL кодын гүйцэтгэх интерфейс нь дэвшилтэт мөрдөх чадварыг санал болгодог, кодын хэсгүүдийг бичиж, дахин тоглуулах боломжтой. Өмнө нь санал болгож байсан дибаггер lib/debug.rb нь үндсэн түгээлтээс хасагдсан.
    Ruby програмчлалын хэлний хувилбар 3.1
  • Буцах дуудлагын ул мөрийн тайланд гарсан алдааг нүдээр харуулах ажлыг хэрэгжүүлсэн. Алдаа тэмдэглэгээг суулгасан болон өгөгдмөл идэвхжүүлсэн эрдэнийн багц error_highlight ашиглан өгдөг. Алдааны тэмдэглэгээг идэвхгүй болгохын тулд та "--disable-error_highlight" тохиргоог ашиглаж болно. $ ruby ​​​​test.rb test.rb:1:""-д: 1-д зориулсан тодорхойгүй арга "цаг":Бүхэл тоо (NoMethodError) 1.цаг {} ^^^^^ Та тэгсэн үү? удаа
  • Интерактив тооцооллын бүрхүүл IRB (REPL, Унших-Үнэлэх-Хэвлэх-Loop) нь оруулсан кодыг автоматаар гүйцээхийг хэрэгжүүлдэг (таныг бичих үед үргэлжлүүлэн оруулах сонголт бүхий зөвлөмж гарч ирэх бөгөөд тэдгээрийн хооронд та Tab эсвэл Shift+ дарж шилжиж болно. Таб товчлуур). Үргэлжлүүлэх сонголтыг сонгосны дараа ойролцоох харилцах цонх гарч ирэх бөгөөд энэ нь сонгосон зүйлтэй холбоотой баримт бичгийг харуулах болно. Баримт бичигт бүрэн хандахын тулд Alt+d гарын товчлолыг ашиглаж болно.
    Ruby програмчлалын хэлний хувилбар 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 #= > ? [[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, матриц, prime болон дибаг хийх багцууд нь суурилагдсан.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх