Выпуск мовы праграмавання Ruby 3.1

Адбыўся рэліз Ruby 3.1.0, дынамічнай аб'ектна-арыентаванай мовы праграмавання, які адрозніваецца высокай эфектыўнасцю распрацоўкі праграм і ўвабрала ў сябе лепшыя рысы Perl, Java, Python, Smalltalk, Eiffel, Ada і Lisp. Код праекту распаўсюджваецца пад ліцэнзіямі BSD ("2-clause BSDL") і "Ruby", якая спасылаецца на апошні варыянт ліцэнзіі GPL і цалкам сумяшчальная з GPLv3.

Асноўныя паляпшэнні:

  • Дададзены новы эксперыментальны ўнутрыпрацэсны JIT-кампілятар YJIT, створаны распрацоўшчыкамі платформы электроннай камерцыі Shopify у рамках ініцыятывы па павелічэнні прадукцыйнасці Ruby-праграм, якія выкарыстоўваюць фрэймворк Rails і выклікаюць вельмі шмат метадаў. Ключавым адрозненнем ад раней выкарыстоўванага JIT-кампілятара MJIT, які базуецца на апрацоўцы метадаў цалкам і выкарыстоўвае вонкавы кампілятар на мове Сі, з'яўляецца тое, што YJIT ужывае версіяванне базавых блокаў (LBBV – Lazy Basic Block Versioning) і ўтрымоўвае інтэграваны JIT-кампілятар. Дзякуючы LBBV, JIT спачатку кампілюе толькі пачатак метаду, а астатнюю частку кампілюе праз некаторы час, пасля таго як падчас выкананні будзе вызначаны тыпы выкарыстоўваных зменных і аргументаў. Пры выкарыстанні YJIT зафіксавана павелічэнне прадукцыйнасці пры выкананні тэсту railsbench на 22%, а тэсту liquid-render на 39%. YJIT пакуль абмежаваны падтрымкай unix-падобных АС на сістэмах з архітэктурай x86-64 і адключаны па змаўчанні (для актывацыі варта паказаць у камандным сцёку сцяг "-yjit").
  • Падвышаная прадукцыйнасць старога JIT-кампілятара MJIT. Для праектаў, якія выкарыстоўваюць Rails, максімальны памер кэша (jit-max-cache) па змаўчанні павялічаны са 100 да 10000 інструкцый. Спынена непрымяненне JIT для метадаў, якія ўключаюць больш за 1000 інструкцый. Для падтрымкі Zeitwerk of Rails сфарміраваны ў JIT код больш не адкідваецца, калі для падзей класа ўключаны TracePoint.
  • У склад уключаны цалкам перапісаны адладчык debug.gem, які падтрымлівае выдаленую адладку, не запавольвае працу наладжвальнага прыкладання, падтрымлівае інтэграцыю з прасунутымі адладкавымі інтэрфейсамі (VSCode і Chrome), можа выкарыстоўвацца для адладкі шматструменных і шматпрацэсных прыкладанняў, дае інтэрфейс выканання кода магчымасці трасіроўкі, можа запісваць і паўторна прайграваць урыўкі кода. Раней які прапаноўваўся адладчык lib/debug.rb выдалены з базавай пастаўкі.
    Выпуск мовы праграмавання Ruby 3.1
  • Рэалізавана нагляднае выдзяленне памылак у справаздачах зваротнай трасіроўкі выклікаў. Пазнака памылак забяспечваецца пры дапамозе ўбудаванага і ўключанага па змаўчанні gem-пакета error_highlight. Для адключэння пазнакі памылак можна выкарыстоўваць наладу "-disable-error_highlight". $ ruby ​​test.rb test.rb:1:in « »: undefined method «time» for 1:Integer (NoMethodError) 1.time {} ^^^^^ Did you mean? times
  • У абалонцы інтэрактыўных вылічэнняў IRB (REPL, Read-Eval-Print-Loop) рэалізавана аўтаматычнае дадатак уводзімага кода (па меры набору выводзіцца падказка з варыянтамі працягу ўводу, паміж якімі можна перамяшчацца клавішай Tab або Shift+Tab). Пасля выбару варыянту працягу побач забяспечана выснова дыялогу, у якім паказваецца дакументацыя, звязаная з абраным элементам. Для пераходу да поўнай дакументацыі можа выкарыстоўвацца клавіятурная камбінацыя 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, які дазваляе вызначаць структуру праграмы і выкарыстоўваных тыпаў, дададзеная падтрымка ўказання верхняй мяжы параметраў тыпу пры дапамозе знака «<«, дададзеная падтрымка псеўданімаў абагульненых тыпаў, рэалізавана падтрымка калекцый для кіравання gem-амі, падвышаная прадукцыйнасць і рэалізавана шмат новых сігнатур для ўбудаваных і стандартных бібліятэк.
  • У статычны аналізатар тыпаў TypePro, які генеруе RBS-анатацыі на аснове аналізу кода без відавочнай інфармацыі аб тыпах, дададзена эксперыментальная падтрымка інтэграваных асяроддзяў распрацоўкі (напрыклад, падрыхтаваны дадатак для інтэграцыі TypePro з рэдактарам VSCode).
  • Зменены парадак апрацоўкі шматлікіх прысваенняў. Напрыклад, раней складовыя часткі выраза "foo[0], bar[0] = baz, qux" апрацоўваліся ў парадку baz, qux, foo, bar, а зараз foo, bar, baz, qux.
  • Дададзена эксперыментальная падтрымка вылучэння памяці для радкоў з выкарыстаннем механізму VWA (Variable Width Allocation).
  • Абноўлены версіі ўбудаваных і ўваходных у стандартную бібліятэку gem-модуляў. Убудаваны пакеты net-ftp, net-imap, net-pop, net-smtp, matrix, prime і debug.

Крыніца: opennet.ru

Дадаць каментар