Ukukhishwa kolimi lohlelo lweRuby 3.2

I-Ruby 3.2.0 ikhishwe, ulimi lokuhlela olugxile entweni oluguquguqukayo olusebenza kahle kakhulu ekuthuthukisweni kohlelo futhi luhlanganisa izici ezinhle kakhulu ze-Perl, Java, Python, Smalltalk, Eiffel, Ada kanye ne-Lisp. Ikhodi yephrojekthi isatshalaliswa ngaphansi kwe-BSD (“2-clause BSDL”) kanye namalayisensi e-“Ruby”, asho inguqulo yakamuva yelayisensi ye-GPL futhi ehambisana ngokugcwele ne-GPLv3.

Ukuthuthukiswa okuyinhloko:

  • Kwengezwe imbobo yokuqala yomhumushi we-CRuby, ehlanganisa ibe ikhodi emaphakathi ye-WebAssembly ukuze isebenze kusiphequluli sewebhu noma ngaphansi kwezikhathi zokusebenza ezizimele njenge-wasmtime. Ngokusebenzelana okuqondile nesistimu yokusebenza uma isebenza ngokuhlukene, i-WASI (WebAssembly System Interface) isetshenziswa API. Phakathi kwezinye izinto, i-VFS wrapper inikezwa phezulu kwe-WASI, ekuvumela ukuthi uhlanganise lonke uhlelo lweRuby lube isethulo ngendlela yefayela elilodwa le-wasm. Ukusebenzisa isiphequluli kungasetshenziswa ukudala ukuqeqeshwa kanye nezinsizakalo zewebhu zedemo ezifana ne-TryRuby. Esigabeni samanje sokuthuthuka, ichweba lidlula ngempumelelo amasudi okuhlola ayisisekelo kanye ne-bootstrap, angasebenzisi i-Thread API. Imbobo futhi ayisekeli ama-Fibers, okuhlukile, noma ukuqoqwa kukadoti.
  • I-YJIT in-process JIT compiler, edalwe abathuthukisi benkundla ye-e-commerce yakwaShopify njengengxenye yesinyathelo sokwandisa ukusebenza kwezinhlelo zeRuby ezisebenzisa uhlaka lwe-Rails futhi zibize izindlela eziningi, imenyezelwe ukuthi izinzile futhi isilungele. ukusetshenziswa kokukhiqiza. Umehluko oyinhloko kumhlanganisi we-MJIT JIT owake wasetshenziswa ngaphambili, osekelwe ekucubunguleni zonke izindlela futhi esebenzisa isihlanganisi sangaphandle ngolimi lwe-C, ukuthi i-YJIT isebenzisa i-Lazy Basic Block Versioning (LBBV) futhi iqukethe i-JIT compiler ehlanganisiwe. Nge-LBBV, i-JIT iqala ukuhlanganisa kuphela isiqalo sendlela, bese ihlanganisa okunye ngemva kwesikhathi esithile, ngemva kokuba izinhlobo zokuguquguquka nezimpikiswano ezisetshenzisiwe zinqunywa phakathi nokubulawa. I-YJIT iyatholakala ku-x86-64 kanye nezakhiwo ze-arm64/aarch64 ku-Linux, MacOS, BSD nakwezinye izinkundla ze-UNIX.

    Ngokungafani no-Ruby, ikhodi ye-YJIT ibhalwe ngolimi Lwe-Rust futhi idinga i-rustc 1.58.0+ compiler ukuze ihlanganiswe, ngakho ukwakhiwa kwe-YJIT kukhutshaziwe ngokuzenzakalelayo futhi kuyakhethwa. Uma usebenzisa i-YJIT, ukukhuphuka kokusebenza okungu-41% kwarekhodwa lapho kusetshenziswa ukuhlolwa kwe-yjit-bench uma kuqhathaniswa nokusebenzisa ukuhumusha.

    Ukukhishwa kolimi lohlelo lweRuby 3.2

  • Kwengezwe ukuvikela okwengeziwe ekunqatshelweni kokuhlaselwa kwesevisi lapho kusetshenzwa idatha yangaphandle ngezinkulumo ezivamile ezingasebenzi kahle nezidla isikhathi (ReDoS). I-algorithm efanayo, esebenzisa indlela yokubamba ngekhanda, ithuthukiswe kakhulu. Isibonelo, isikhathi sokusetshenziswa senkulumo ethi '/^a*b?a*$/ =~ "a" * 50000 + "x"' sehlisiwe ukusuka ku-10 ukuya kumasekhondi angu-0.003. Izindleko zokuthuthukisa ukwanda kokusetshenziswa kwenkumbulo, ukusetshenziswa kwayo cishe izikhathi eziyi-10 ngaphezu kosayizi wedatha yokufaka. Isilinganiso sesibili sokuvikeleka yikhono lokuchaza ukuphela kwesikhathi (isibonelo, “Regexp.timeout = 1.0”) lapho inkulumo evamile kufanele icutshungulwe.
  • Imodi ye-syntax_suggest ifakiwe, esiza ukuhlonza izimbangela zamaphutha ahlotshaniswa nenkulumo ethi “isiphetho” esishodayo noma engeziwe. `Ukuphela' okungenakuqhathaniswa, igama elingukhiye elishodayo (`yenza', `def`, `uma`, njll.) ? 1 class Inja > 2 defbark > 3 end 4 end
  • Ikhono lokumaka ama-agumenti amaphutha ahlobene nezinhlobo nama-agumenti lengezwe kumodi yokubonisa indawo yephutha, isibonelo: test.rb:2:ku `+': i-nil ayikwazi ukuphoqelwa ku-Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Kwengezwe i-syntax entsha yokuqondisa kabusha amasethi ezimpikiswano kwezinye izindlela: def foo(*) ibha(*) end def baz(**) quux(**) end
  • Kuhlongozwe i-Ruby_vm/mjit/compiler - okuhlukile kwe-MJIT JIT compiler endala, ebhalwe kabusha ngolimi lwesiRuby. Iqinisekise ukuthi i-MJIT isebenza ngenqubo ehlukile esikhundleni sokusebenza ngochungechunge lwesisebenzi se-MJIT.
  • Ku-Bundler 2.4, ukucutshungulwa kokuncika kusebenzisa umtshina wenguqulo ye-PubGrub, esetshenziswa futhi kusiphathi sephakheji ye-pub yolimi lwe-Dart. I-algorithm ye-Molinillo esetshenziswe ngaphambilini iyaqhubeka nokusetshenziswa ku-RubyGems, kodwa futhi izothathelwa indawo yi-PubGrub ngokuzayo.
  • Izinguqulo ezibuyekeziwe zamamojula ayigugu akhelwe ngaphakathi nalawo afakwe kulabhulali ejwayelekile.

Source: opennet.ru

Engeza amazwana