Нашри забони барномасозии Ruby 3.2

Ruby 3.2.0, забони барномасозии динамикии ба объект нигаронидашуда бароварда шуд, ки дар таҳияи барнома хеле самаранок аст ва беҳтарин хусусиятҳои Perl, Java, Python, Smalltalk, Eiffel, Ada ва Lisp-ро дар бар мегирад. Рамзи лоиҳа дар доираи литсензияҳои BSD (“2-банди BSDL”) ва “Ruby” паҳн карда мешавад, ки ба версияи охирини иҷозатномаи GPL дахл дорад ва бо GPLv3 комилан мувофиқ аст.

Такмилҳои асосӣ:

  • Бандари ибтидоии тарҷумони CRuby илова карда шуд, ки он ба коди мобайнии WebAssembly барои кор дар браузери веб ё дар зери вақти иҷроиши мустақил ба монанди wasmtime тартиб медиҳад. Барои ҳамкории мустақим бо системаи оператсионӣ ҳангоми кор дар алоҳидагӣ, API WASI (WebAssembly System Interface) истифода мешавад. Дар байни чизҳои дигар, дар болои WASI бастаи VFS таъмин карда шудааст, ки ба шумо имкон медиҳад, ки тамоми замимаи Ruby-ро ба презентатсия дар шакли як файли wasm бастабандӣ кунед. Иҷро кардан дар браузер метавонад барои эҷоди хидматҳои таълимӣ ва намоишӣ ба монанди TryRuby истифода шавад. Дар марҳилаи кунунии рушд, порт аз сюитаҳои санҷишии асосӣ ва bootstrap бомуваффақият мегузарад, ки Thread API-ро истифода намебаранд. Порт инчунин нахҳо, истисноҳо ё ҷамъоварии ахлотро дастгирӣ намекунад.
  • Компилятори JIT дар ҷараёни JIT, ки аз ҷониби таҳиягарони платформаи тиҷорати электронии Shopify ҳамчун як қисми ташаббус оид ба баланд бардоштани самаранокии барномаҳои Ruby, ки чаҳорчӯбаи Rails-ро истифода мебаранд ва усулҳои зиёдеро даъват мекунанд, устувор ва омода эълон карда шудааст. истифодаи истеҳсолот. Тафовути калидӣ аз компилятори қаблан истифодашудаи MJIT JIT, ки ба коркарди тамоми усулҳо асос ёфтааст ва компилятори берунаро бо забони Си истифода мебарад, дар он аст, ки YJIT Lazy Basic Block Versioning (LBBV) -ро истифода мебарад ва дорои компилятори ҳамгирошудаи JIT мебошад. Бо LBBV, JIT аввал танҳо ибтидои усулро тартиб медиҳад ва боқимондаро баъд аз чанд вақт пас аз муайян кардани намудҳои тағирёбандаҳо ва аргументҳои истифодашуда ҳангоми иҷро тартиб медиҳад. YJIT барои меъмории x86-64 ва arm64/aarch64 дар Linux, MacOS, BSD ва дигар платформаҳои UNIX дастрас аст.

    Баръакси Ruby, рамзи YJIT бо забони Rust навишта шудааст ва барои тартиб додани компилятори rustc 1.58.0+ талаб мекунад, аз ин рӯ сохтани YJIT бо нобаёнӣ ғайрифаъол аст ва ихтиёрӣ аст. Ҳангоми истифодаи YJIT, ҳангоми иҷрои санҷиши yjit-bench дар муқоиса бо истифодаи тафсир 41% афзоиши кор ба қайд гирифта шудааст.

    Нашри забони барномасозии Ruby 3.2

  • Муҳофизати иловагӣ аз ҳамлаҳои радкунии хидмат ҳангоми коркарди маълумоти беруна дар ифодаҳои муқаррарии бесамар ва вақтталаб (ReDoS). Алгоритми мувофиқ, ки техникаи ёддоштро истифода мебарад, хеле такмил дода шудааст. Масалан, мухлати ичрои ифодаи '/^a*b?a*$/ =~ "a" * 50000 + "x"' аз 10 то 0.003 сония кам карда шуд. Арзиши оптимизатсия афзоиши истеъмоли хотира мебошад, ки истеъмоли он аз андозаи маълумоти воридшуда тақрибан 10 маротиба зиёдтар аст. Андозаи дуюми амният ин қобилияти муайян кардани вақтхушӣ мебошад (масалан, “Regexp.timeout = 1.0”), ки дар давоми он ифодаи муқаррарӣ бояд коркард шавад.
  • Реҷаи syntax_suggest дохил карда шудааст, ки барои ташхиси сабабҳои хатогиҳои марбут ба ифодаи нопадид ё иловагии пӯшидаи "охир" кӯмак мекунад. "Анҷом" номувофиқ, калимаи калидӣ мавҷуд нест ('do', 'def', 'if' ва ғайра)? 1 синфи Dog > 2 defbark > 3 охири 4 охири
  • Имконияти қайд кардани аргументҳо барои хатогиҳои марбут ба намудҳо ва аргументҳо ба ҳолати намоиши ҷойгиршавии хатогӣ илова карда шудааст, масалан: test.rb:2:in `+': nil наметавонад ба Integer (TypeError) sum = ary маҷбур карда шавад [0] + ари [1] ^^^^^^
  • Синтаксиси нав барои масир кардани маҷмӯи аргументҳо ба усулҳои дигар илова карда шуд: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler пешниҳод карда мешавад - як варианти компилятори кӯҳнаи MJIT JIT, ки бо забони Ruby аз нав навишта шудааст. Боварӣ ҳосил кунед, ки MJIT ба ҷои кор дар риштаи коргари MJIT дар раванди алоҳида кор мекунад.
  • Дар Bundler 2.4 коркарди вобастагӣ детектори версияи PubGrub-ро истифода мебарад, ки инчунин дар мудири бастаи паб барои забони Dart истифода мешавад. Алгоритми қаблан истифодашудаи Molinillo дар RubyGems истифода мешавад, аммо дар оянда низ бо PubGrub иваз карда мешавад.
  • Версияҳои навшудаи модулҳои дарунсохт ва онҳое, ки ба китобхонаи стандартӣ дохил карда шудаанд.

Манбаъ: opennet.ru

Илова Эзоҳ