Ruby программалоо тилинин чыгарылышы 3.2

Ruby 3.2.0 чыгарылды, динамикалык объектиге багытталган программалоо тили, программаны иштеп чыгууда жогорку эффективдүү жана Perl, Java, Python, Smalltalk, Eiffel, Ada жана Lispдин эң мыкты мүмкүнчүлүктөрүн камтыган. Долбоордун коду BSD (“2-пункттуу BSDL”) жана “Ruby” лицензияларынын алкагында таратылат, ал GPL лицензиясынын акыркы версиясына тиешелүү жана GPLv3 менен толук шайкеш келет.

Негизги жакшыртуулар:

  • CRuby котормочусунун баштапкы порту кошулду, ал веб браузерде же wasmtime сыяктуу өз алдынча иштөө убакыттарында иштөө үчүн WebAssembly аралык кодуна түзүлөт. Өзүнчө иштеп жатканда операциялык система менен түз өз ара аракеттенүү үчүн WASI (WebAssembly System Interface) API колдонулат. Башка нерселер менен катар, WASIнин үстүндө VFS орогуч камтылган, ал сизге Ruby тиркемесин толугу менен бир wasm файлы түрүндөгү презентацияга пакеттөө мүмкүнчүлүгүн берет. Браузерде иштөө TryRuby сыяктуу тренинг жана демо желе кызматтарын түзүү үчүн колдонулушу мүмкүн. Өнүктүрүүнүн азыркы этабында порт Thread API колдонбогон негизги жана жүктөөчү тест пакеттеринен ийгиликтүү өтүп жатат. Порт ошондой эле Fibers, өзгөчө учурларды же таштанды чогултууну колдобойт.
  • Shopify электрондук коммерциялык платформасынын иштеп чыгуучулары тарабынан Rails алкагын колдонгон жана көптөгөн ыкмаларды чакырган Ruby программаларынын натыйжалуулугун жогорулатуу демилгесинин алкагында түзүлгөн YJIT процессиндеги JIT компилятору туруктуу жана даяр деп жарыяланды. өндүрүштү пайдалануу. Мурда колдонулган MJIT JIT компиляторунан негизги айырмасы, ал бүт методдорду иштетүүгө негизделген жана Си тилинде тышкы компиляторду колдонот, YJIT Lazy Basic Block Versioning (LBBV) колдонот жана интеграцияланган JIT компиляторун камтыйт. LBBV менен, JIT адегенде методдун башталышын гана түзөт, ал эми калганын бир нече убакыт өткөндөн кийин, колдонулган өзгөрмөлөрдүн жана аргументтердин түрлөрү аткаруу учурунда аныкталгандан кийин түзөт. YJIT Linux, MacOS, BSD жана башка UNIX платформаларында x86-64 жана arm64/aarch64 архитектуралары үчүн жеткиликтүү.

    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 класс ит > 2 дефбарк > 3 аягы 4 аягы
  • Типтерге жана аргументтерге байланыштуу каталар үчүн аргументтерди белгилөө мүмкүнчүлүгү ката жайгашкан жерди көрсөтүү режимине кошулду, мисалы: test.rb:2:in `+': nil бүтүн санга (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 менен алмаштырылат.
  • Камтылган асыл таш модулдарынын жана стандарттык китепканага киргизилгендердин жаңыланган версиялары.

Source: opennet.ru

Комментарий кошуу