Kutolewa kwa lugha ya programu ya Ruby 3.2

Ruby 3.2.0 imetolewa, lugha ya programu inayoelekezwa kwa kitu chenye nguvu ambayo ina ufanisi mkubwa katika uundaji wa programu na inajumuisha vipengele bora vya Perl, Java, Python, Smalltalk, Eiffel, Ada na Lisp. Msimbo wa mradi unasambazwa chini ya leseni za BSD ("2-clause BSDL") na "Ruby", ambayo inarejelea toleo jipya zaidi la leseni ya GPL na inaoana kikamilifu na GPLv3.

Maboresho kuu:

  • Imeongeza mlango wa awali wa mkalimani wa CRuby ambao unajumuisha msimbo wa kati wa WebAssembly ili kuendeshwa katika kivinjari cha wavuti au chini ya nyakati za kukimbia zinazojitegemea kama vile wasmtime. Kwa mwingiliano wa moja kwa moja na mfumo wa uendeshaji wakati wa kukimbia tofauti, API ya WASI (WebAssembly System Interface) hutumiwa. Miongoni mwa mambo mengine, kifungo cha VFS juu ya WASI kinatolewa, ambayo inakuwezesha kufunga programu nzima katika lugha ya Ruby kwa mtazamo kwa namna ya faili moja ya wasm. Kuendesha katika kivinjari kunaweza kutumika kutengeneza mafunzo na huduma za wavuti za onyesho kama vile TryRuby. Katika hatua ya sasa ya maendeleo, bandari inafanikiwa kupitisha vyumba vya mtihani wa msingi na bootstrap, ambayo haitumii API ya Thread. Lango pia halitumii Nyuzi, Vighairi, au Ukusanyaji wa Taka.
  • Mkusanyaji wa mchakato wa JIT YJIT, iliyoundwa na watengenezaji wa jukwaa la Shopify e-commerce kama sehemu ya mpango wa kuongeza utendaji wa programu za Ruby zinazotumia mfumo wa Reli na kuita njia nyingi, imetangazwa kuwa thabiti na tayari kutumika. matumizi ya uzalishaji. Tofauti kuu kutoka kwa kikusanyaji cha MJIT JIT kilichotumika hapo awali, ambacho kinategemea uchakataji wa mbinu na kutumia kikusanya C cha nje, ni kwamba YJIT hutumia Lazy Basic Block Versioning (LBBV) na ina mkusanyiko jumuishi wa JIT. Shukrani kwa LBBV, JIT inakusanya mwanzo tu wa njia hiyo mwanzoni, na inakusanya iliyobaki baada ya muda fulani, baada ya aina za vigezo na hoja zinazotumiwa kuamuliwa wakati wa utekelezaji. YJIT inapatikana kwa x86-64 na usanifu wa arm64/aarch64 kwenye Linux, MacOS, BSD, na mifumo mingine ya UNIX.

    Tofauti na CRuby, msimbo wa YJIT umeandikwa kwa Rust na unahitaji mkusanyaji wa rustc 1.58.0+ kujumuisha, kwa hivyo utungaji wa YJIT umezimwa kwa chaguomsingi na ni hiari. Wakati wa kutumia YJIT, ongezeko la 41% la utendaji lilirekodiwa wakati wa kufanya jaribio la yjit-benchi ikilinganishwa na kutumia ukalimani.

    Kutolewa kwa lugha ya programu ya Ruby 3.2

  • Umeongeza ulinzi wa ziada dhidi ya mashambulizi ambayo husababisha kunyimwa huduma wakati wa kuchakata data ya nje katika vielezi vya kawaida visivyofaa na vya muda mrefu (ReDoS). Imeboreshwa kwa kiasi kikubwa algorithm ya kulinganisha, ambayo hutumia mbinu ya kukariri. Kwa mfano, muda wa utekelezaji wa usemi '/^a*b?a*$/ =~ "a" * 50000 + "x"' umepunguzwa kutoka sekunde 10 hadi 0.003. Bei ya uboreshaji ni ongezeko la matumizi ya kumbukumbu, matumizi ambayo ni karibu mara 10 kuliko ukubwa wa data ya pembejeo. Kipimo cha pili cha usalama ni uwezo wa kufafanua muda wa kuisha (kwa mfano, "Regexp.timeout = 1.0"), ambayo usemi wa kawaida lazima uwe na muda wa kuchakatwa.
  • Hali ya syntax_suggest imejumuishwa ili kusaidia kutambua sababu za makosa yanayohusishwa na taarifa ya kufunga ya "mwisho" inayokosekana au isiyo na maana. `Mwisho' usiolinganishwa, neno kuu linalokosekana (`fanya', `def`, `if`, n.k.) ? Mbwa wa darasa 1 > 2 defbark > 3 mwisho 4 mwisho
  • Imeongeza uwezo wa kutia alama kwenye hoja za hitilafu zinazohusiana na aina na hoja kwa modi ya eneo la hitilafu, kwa mfano: test.rb:2:in `+': nil haiwezi kulazimishwa kuwa Integer (TypeError) sum = ary[0] + ary [1] ^^^^^^^
  • Imeongeza syntax mpya ya kuelekeza kwa njia zingine za kuweka hoja: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler iliyopendekezwa - lahaja ya mkusanyaji wa zamani wa MJIT JIT, iliyoandikwa upya katika lugha ya Ruby. Utekelezaji wa MJIT umehakikishwa katika mchakato tofauti, badala ya utekelezaji katika uzi wa mfanyakazi wa MJIT.
  • Katika Bundler 2.4, utunzaji wa utegemezi hutumia kitafuta toleo la PubGrub, kinachotumiwa pia na msimamizi wa kifurushi cha baa kwa Dart. Algorithm iliyotumika hapo awali ya Molinillo inaendelea kutumika katika RubyGems, lakini pia itabadilishwa na PubGrub katika siku zijazo.
  • Matoleo yaliyosasishwa ya moduli za vito vya maktaba zilizojengewa ndani na za kawaida.

Chanzo: opennet.ru

Kuongeza maoni