Chilankhulo cha pulogalamu cha Ruby 3.3 chasindikizidwa

Ruby 3.3.0 inatulutsidwa, chinenero chowongolera chokhazikika pa chinthu chomwe chimagwira ntchito bwino pakupanga mapulogalamu ndipo chimaphatikizapo zinthu zabwino kwambiri za Perl, Java, Python, Smalltalk, Eiffel, Ada ndi Lisp. Khodi ya polojekitiyi imagawidwa pansi pa ziphaso za BSD ("2-clause BSDL") ndi "Ruby", zomwe zikutanthauza mtundu waposachedwa wa laisensi ya GPL ndipo imagwirizana kwathunthu ndi GPLv3.

Kusintha kwakukulu:

  • Kapangidwe kake kakuphatikiza ndi Prism parser, yokhazikitsidwa ngati laibulale ya libprism C, yogwiritsidwa ntchito pomasulira CRuby, ndi phukusi lamtengo wapatali m'chilankhulo cha Ruby, chomwe chimapereka API yapagulu kuti ipangitse kachidindo kumtunda-pansi kwa chilankhulo cha Ruby. , yoyenera kugwiritsidwa ntchito pama projekiti opanga m'malo mwa Ripper parser. Ubwino wa Prism umaphatikizira kusuntha kwabwino komanso kusasinthika kolakwika mu code. Kuti mutsegule chatsopano, mutha kugwiritsa ntchito njira ya "ruby -parser=prism" kapena RUBYOPT=”—parser=prism" chilengedwe. Kuti muwerenge kachidindo mumapulogalamu anu, njira za Prism.parse(gwero) zilipo kuti mupeze chithunzithunzi cha AST cha code, Prism.parse_comments(gwero) kuti mutenge ndemanga pamakhodi, ndi Prism.parse_success?(gwero) kuti muwonetsetse pa zolakwika mu code.
  • M'malo mwa phukusi la njati zakunja, pulojekiti ya Lrama imagwiritsidwa ntchito popanga magawo, omwe amapereka Ruby kukhazikitsidwa kwa LALR algorithm, imathandizira matanthauzo a galamala ogwirizana ndi Bison (parse.y) omwe amagwiritsidwa ntchito mu CRuby, ndikugwiritsa ntchito zida zapamwamba monga kukonza zolakwika ndi malamulo parameterized (?, *, +).
  • Kukhathamiritsa kwakukulu kwa magwiridwe antchito apangidwa kwa compiler ya YJIT JIT, yomwe ikupangidwa ndi omwe akupanga nsanja ya Shopify e-commerce ngati gawo la njira yowonjezera magwiridwe antchito a Ruby omwe amagwiritsa ntchito chimango cha Rails ndikuyitanitsa njira zambiri. Mosiyana ndi kaphatikizidwe ka JIT kamene kanagwiritsidwa ntchito kale, YJIT yatsopano imagwiritsa ntchito Lazy Basic Block Versioning (LBBV) m'malo mokonza njira zonse ndipo ikugwiritsidwa ntchito ngati chophatikiza cha JIT cholembedwa m'chinenero cha Rust. Ndi LBBV, JIT imayamba kupanga zoyambira zokha za njirayo, ndikuphatikiza zina pambuyo pake, pambuyo poti mitundu yamitundu ndi mikangano yogwiritsidwa ntchito yatsimikiziridwa pakuphedwa.

    Poyesa kuphedwa kwa emulator ya Optcarrot, ntchito yogwiritsira ntchito YJIT ndi yoposa katatu kuposa kuthamanga pogwiritsa ntchito womasulira. Mtundu watsopanowu umapereka magawo amakaundula a magwiridwe antchito apamakina, amakulitsa kuchuluka kwa mafoni omwe aphatikizidwa ndi mfundo zongosankha, kugwiritsa ntchito njira zoyambira komanso zapadera, ndikuwonjezera kukhathamiritsa kwa magwiridwe antchito "Integer#*", "Integer#!=" , “String#” !=", "String#getbyte", "Kernel#block_given?", "Kernel#is_a?", "Kernel#chitsanzo_cha?" ndi "Module#===". Kuwonjezeka kwakukulu kophatikiza liwiro.

    Kugwiritsa ntchito kukumbukira posungirako metadata kwachepetsedwa kwambiri ndipo kupanga ma code ophatikizika kwambiri pamapangidwe a ARM64 kwatsimikiziridwa. Mwachikhazikitso, code yotolera zinyalala ya Code (“-yjit-code-gc”) imayimitsidwa, yomwe imatulutsa makina osagwiritsidwa ntchito osagwiritsidwa ntchito, koma imayambitsa kuwonongeka kwa magwiridwe antchito panthawi yotolera zinyalala. Anawonjezera RubyVM ::YJIT.enable njira yowongolera ngati YJIT imayatsidwa panthawi yothamanga, popanda kuyendetsedwa ndi njira yeniyeni ya mzere wa lamulo kapena kusintha kwa chilengedwe. Ziwerengero zomwe zikuwonetsedwa pofotokoza njira ya "--yjit-stats" zakulitsidwa. Makhalidwe owonjezera (--yjit-perf) ndi njira zotsatirira (--yjit-trace-exits).

  • Pulogalamu yatsopano ya JIT RJIT ikufunsidwa, yolembedwa kwathunthu m'chinenero cha Ruby ndikulowetsa MJIT, koma mosiyana ndi yotsirizirayi, sichifuna C compiler ikagwiritsidwa ntchito. RJIT imangothandizira zomangamanga za x86-64 ndi nsanja za Unix.
  • Anawonjezera M: N ulusi scheduler, yomwe imakulolani kuti mugwiritse ntchito chiwerengero chochepa cha ulusi wamakina opangira makina opangira ulusi mu code ya Ruby kuti muchepetse kupitilira pakupanga ndi kuyang'anira ulusi. Mwachikhazikitso, ulusi wa 8 OS umagwiritsidwa ntchito (ukhoza kusinthidwa kudzera mu RUBY_MAX_CPU variable variable). Kugwiritsa ntchito pulogalamu ya M:N kumatha kuyambitsa zovuta zofananira ndi zowonjezera za C, chifukwa chake zimayimitsidwa mwachisawawa pagulu lalikulu la Ractor, koma zimayatsidwa kwa omwe si akulu. Kuti muumirize chokonzera "M:N", ikani kusintha kwa chilengedwe RUBY_MN_THREADS=1.
  • Kuthekera kwa chipolopolo cha computing IRB (REPL, Read-Eval-Print-Loop) chakulitsidwa. Yowonjezera irb: rdbg debugging mode, yomwe ili yofanana ndi kuthekera kwake kwa pry-byebug debugger. Thandizo lowonjezera pakuwonera masamba ambiri pazotsatira za ls, show_source ndi show_cmds. Thandizo loyesera pakumalizitsa zolowetsa zokha lakhazikitsidwa, poganizira mitundu ya data. Malamulo amaperekedwa kuti asinthe mtundu wa font ndi kalembedwe.
  • Kuyitana njira ya "it" popanda zotsutsana mu chipika chopanda malire kwachotsedwa (mwachitsanzo, "[1, 2, 3].each {ikuika}").
  • RubyGems ndi Bundler tsopano zikuphatikiza chenjezo ngati phukusi lamtengo wapatali la abbrev, base64, bigdecimal, csv, drb, getoptlong, mutex_m, nkf, viewer, racc, resolv-replace, rinda ndi syslog zafotokozedwa mu "zofunikira" ngati sizinawonjezedwe. ku Gemfile kapena gempec. M'matembenuzidwe amtsogolo a Ruby, miyala yamtengo wapatali iyi idzamangidwa mu phukusi lapakati.
  • Mitundu yosinthidwa ya ma module amtengo wapatali omangidwa ndi omwe akuphatikizidwa mu library yanthawi zonse.

Source: opennet.ru

Gulani kuchititsa kodalirika kwamasamba okhala ndi chitetezo cha DDoS, ma seva a VPS VDS Gulani malo odalirika osungira mawebusayiti okhala ndi chitetezo cha DDoS, ma seva a VPS VDS | ProHoster