Ruby ծրագրավորման լեզվի թողարկում 3.2

Թողարկվել է Ruby 3.2.0-ը՝ դինամիկ օբյեկտի վրա հիմնված ծրագրավորման լեզու, որը շատ արդյունավետ է ծրագրերի մշակման մեջ և ներառում է Perl-ի, Java-ի, Python-ի, Smalltalk-ի, Eiffel-ի, Ada-ի և Lisp-ի լավագույն հատկանիշները: Ծրագրի կոդը բաշխված է BSD («2 կետ BSDL») և «Ruby» լիցենզիաների ներքո, որը վերաբերում է GPL լիցենզիայի վերջին տարբերակին և լիովին համատեղելի է GPLv3-ի հետ:

Հիմնական բարելավումներ.

  • Ավելացվեց CRuby թարգմանչի սկզբնական պորտը, որը հավաքվում է WebAssembly միջանկյալ կոդի մեջ՝ վեբ բրաուզերում կամ առանձին գործարկման ժամանակներում, ինչպիսին է wasmtime-ը: Օպերացիոն համակարգի հետ անմիջական փոխազդեցության համար, երբ աշխատում է առանձին, օգտագործվում է WASI (WebAssembly System Interface) API: Ի թիվս այլ բաների, WASI-ի վերևում տրամադրվում է VFS փաթաթան, որը թույլ է տալիս փաթեթավորել Ruby-ի ամբողջ հավելվածը ներկայացման մեջ՝ մեկ wasm ֆայլի տեսքով: Բրաուզերում աշխատելը կարող է օգտագործվել ուսուցման և ցուցադրական վեբ ծառայություններ ստեղծելու համար, ինչպիսին է TryRuby-ը: Զարգացման ներկա փուլում նավահանգիստը հաջողությամբ անցնում է հիմնական և bootstrap թեստային փաթեթները, որոնք չեն օգտագործում Thread API: Նավահանգիստը նաև չի աջակցում Fibers, բացառություններ կամ աղբահանություն:
  • YJIT-ի ընթացքի մեջ գտնվող JIT կոմպիլյատորը, որը ստեղծվել է Shopify էլեկտրոնային առևտրի պլատֆորմի մշակողների կողմից՝ որպես Ruby ծրագրերի արդյունավետությունը բարձրացնելու նախաձեռնության մաս, որոնք օգտագործում են Rails շրջանակը և կոչում են բազմաթիվ մեթոդներ, հայտարարվել է կայուն և պատրաստ։ արտադրության օգտագործումը. Հիմնական տարբերությունը նախկինում օգտագործված MJIT JIT կոմպիլյատորից, որը հիմնված է ամբողջ մեթոդների մշակման վրա և օգտագործում է արտաքին կոմպիլյատոր C լեզվով, այն է, որ 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 build-ը լռելյայն անջատված է և պարտադիր չէ: YJIT-ն օգտագործելիս կատարողականի 41% աճ է գրանցվել yjit-bench թեստն իրականացնելիս՝ համեմատած մեկնաբանության օգտագործման հետ:

    Ruby ծրագրավորման լեզվի թողարկում 3.2

  • Ավելացվեց լրացուցիչ պաշտպանություն ծառայության մերժման հարձակումներից, երբ արտաքին տվյալները մշակվում են անարդյունավետ և ժամանակատար կանոնավոր արտահայտություններով (ReDoS): Զգալիորեն բարելավվել է համընկնման ալգորիթմը, որն օգտագործում է մտապահման տեխնիկան։ Օրինակ, «/^a*b?a*$/ =~ «a» * 50000 + «x»» արտահայտության կատարման ժամանակը կրճատվել է 10-ից մինչև 0.003 վայրկյան: Օպտիմալացման արժեքը հիշողության սպառման ավելացումն է, որի սպառումը մոտավորապես 10 անգամ գերազանցում է մուտքային տվյալների չափը: Անվտանգության երկրորդ միջոցը ժամանակացույց սահմանելու հնարավորությունն է (օրինակ՝ «Regexp.timeout = 1.0»), որի ընթացքում կանոնավոր արտահայտությունը պետք է մշակվի:
  • Ներառված է syntax_suggest ռեժիմը, որն օգնում է ախտորոշել սխալների պատճառները, որոնք կապված են բացակայող կամ լրացուցիչ փակվող «վերջ» արտահայտության հետ: Անզուգական «վերջ», բացակայում է հիմնաբառը («do», «def», «եթե» և այլն): 1 դասի շուն > 2 հատիկ > 3 վերջ 4 վերջ
  • Տեսակների և արգումենտների հետ կապված սխալների համար արգումենտներ նշելու հնարավորությունն ավելացվել է սխալի գտնվելու վայրի ցուցադրման ռեժիմին, օրինակ՝ test.rb:2: «+»-ում. զրոյական թիվը չի կարող հարկադրվել 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 տարբերակի դետեկտորը, որը նաև օգտագործվում է pub փաթեթների կառավարիչում Dart լեզվի համար: Նախկինում օգտագործված Molinillo ալգորիթմը շարունակում է կիրառվել RubyGems-ում, սակայն հետագայում կփոխարինի նաև PubGrub-ով։
  • Ներկառուցված թանկարժեք մոդուլների և ստանդարտ գրադարանում ներառվածների թարմացված տարբերակները:

Source: opennet.ru

Добавить комментарий