ËshtĂ« publikuar gjuha programuese Ruby 4.0

Lëshimi i Ruby 4.0.0, një gjuhë programimi dinamike e orientuar drejt objekteve, e fokusuar në efikasitetin e lartë të zhvillimit të aplikacioneve dhe përfshirjen e karakteristikave më të mira nga Perl, Java, Python, Smalltalk, Eiffel, Ada dhe Lisp. Kodi i projektit shpërndahet nën licencat BSD ("2-clause BSDL") dhe "Ruby", e cila referohet versionit më të fundit të licencës GPL dhe është e pajtueshme me GPLv3.

Përmirësimet kryesore:

  • NĂ« pĂ«rbĂ«rje Ă«shtĂ« pĂ«rfshirĂ« njĂ« JIT-kompilator i ri, ZJIT, i pozicionuar si gjenerata e ardhshme e Ruby JIT. Si pikĂ« default vazhdon tĂ« pĂ«rdoret JIT-kompilatori YJIT, ndĂ«rsa ZJIT Ă«shtĂ« pĂ«rfshirĂ« si mundĂ«si (aktivizohet me flagun "—zjit"). Si YJIT, JIT-kompilatori i ri Ă«shtĂ« shkruar nĂ« gjuhĂ«n Rust nga ekipi i zhvilluesve tĂ« kompanisĂ« Shopify nĂ« kuadĂ«r tĂ« iniciativĂ«s pĂ«r rritjen e performancĂ«s sĂ« aplikacioneve Ruby qĂ« pĂ«rdorin kuadrin Rails dhe thĂ«rrasin shumĂ« metoda. NĂ« kĂ«tĂ« fazĂ« tĂ« zhvillimit, ZJIT Ă«shtĂ« mĂ« i shpejtĂ« se interpretuarori, por akoma mbetet pas YJIT nĂ« performancĂ« (pritet qĂ« nĂ« Ruby 4.1, ZJIT tĂ« stabilizohet dhe tĂ« kalojĂ« YJIT nĂ« performancĂ«).

    NĂ« krahasim me YJIT, compilatori i ri JIT pĂ«rkthe bytecode-n e makinĂ«s virtuale YARV jo nĂ« njĂ« pĂ«rfaqĂ«sim tĂ« ulĂ«t tĂ« nivelit tĂ« ndĂ«rmjetĂ«m tĂ« ngjashĂ«m me kodin makinĂ«, por nĂ« njĂ« pĂ«rfaqĂ«sim tĂ« lartĂ« tĂ« ndĂ«rmjetĂ«m SSA (Static Single Assignment), i cili lejon tĂ« kryhen faza tĂ« tjera optimizimi dhe tĂ« optimizohen blloqe tĂ« mĂ«dha kodi, jo vetĂ«m operacionet aktuale. PĂ«r tĂ« tĂ«rhequr pjesĂ«marrĂ«s tĂ« rinj, ZJIT realizon arkitekturĂ«n klasike JIT, qĂ« pĂ«rdor tĂ« dhĂ«na historike tĂ« akumuluara nga interpretuese pĂ«r tipat, nĂ« vend tĂ« teknikĂ«s sĂ« komplikuar tĂ« versioneve tĂ« blloqeve bazĂ« (LBBV — Lazy Basic Block Versioning) tĂ« aplikuar nĂ« YJIT.

  • Shtuar njĂ« klasĂ« eksperimentale Ruby::Box me realizimin e mekanizmit tĂ« izolimit, i cili lejon ndarjen e ekzekutimit nĂ« njĂ« proces tĂ« klasave, moduleve dhe monkey-patches (metoda dhe atribute tĂ« klasave tĂ« zĂ«vendĂ«suara). Me anĂ« tĂ« Ruby::Box gjithashtu mund tĂ« ndahen ekzekutimet e kodit tĂ« aplikacioneve nga bibliotekat Ruby, tĂ« sigurohet izolimi i testeve dhe tĂ« organizohet ekzekutimi paralel i web-handler-ve nĂ« njĂ« proces. serverit aplikacione (pĂ«r shembull, pĂ«r ndĂ«rrimin e gradualshĂ«m tĂ« njĂ« versioni tĂ« kodit me njĂ« tjetĂ«r ose pĂ«r pĂ«rditĂ«simin e varĂ«sive). PĂ«r tĂ« aktivizuar Ruby::Box, duhet tĂ« vendosni variablĂ«n e ambientit "RUBY_BOX=1". # foo.rb class String def self.foo = "foo" end # main.rb box = Ruby::Box.new box.require('foo')
  • Implementimi i modelit tĂ« aktorĂ«ve Ractor Ă«shtĂ« modernizuar, duke ofruar njĂ« abstrahim nĂ« stilin "aktorĂ«ve" (ruby actor) pĂ«r tĂ« siguruar ekzekutimin e sigurt nĂ« shumĂ« thjeshtĂ«sira me ndĂ«rveprime midisçșżçš‹é€šèż‡æ¶ˆæŻäŒ é€’. Klas Ractor::Port Ă«shtĂ« shtuar, i cili zgjidh problemet qĂ« lidhen me dĂ«rgimin dhe marrjen e mesazheve. Metoda Ractor.shareable_proc Ă«shtĂ« shtuar pĂ«r tĂ« thjeshtĂ«suar aksesin e pĂ«rbashkĂ«t nĂ« objektet Proc nga aktorĂ« tĂ« ndryshĂ«m. JanĂ« optimizuar strukturat e tĂ« dhĂ«nave, me qĂ«llim tĂ« reduktimit tĂ« konflikteve gjatĂ« vendosjes sĂ« bllokimeve globale dhe pĂ«rmirĂ«simin e pĂ«rdorimit tĂ« caches CPU. NĂ« vitin e ardhshĂ«m, Ractor pritet tĂ« kalojĂ« nĂ« statusin e mundĂ«sive tĂ« qĂ«ndishme. port1 = Ractor::Port.new port2 = Ractor::Port.new Ractor.new port1, port2 do |port1, port2| port1 << 1 port2 << 11 port1 << 2 port2 < 1, 2 2 herĂ«{ p port2.receive } #=> 11, 12
  • Operatori «*nil» tani kthen menjĂ«herĂ« njĂ« array bosh («[]») pa e thirrur metodĂ«n «nil.to_a», nĂ« ngjashmĂ«ri me mĂ«nyrĂ«n se si «**nil» kthen menjĂ«herĂ« njĂ« hash bosh, pa thirrur «nil.to_hash».
  • Lejohet ndarja e rreshtave me operatorĂ«t logjikĂ« «||», «&&», «and» dhe «or» nĂ« atĂ« mĂ«nyrĂ« qĂ« rreshti i ardhshĂ«m fillon me operatorin. if condition1 && condition2 
 end
  • JanĂ« shtuar metodat Array#find dhe «Array#rfind» pĂ«r kĂ«rkimin mĂ« efektiv tĂ« elementeve nĂ« array, duke funksionuar mĂ« shpejt se «array.reverse_each.find» dhe «Enumerable#find».
  • Klasa Set dhe Pathname janĂ« pĂ«rfshirĂ« nĂ« klasat e integruara.
  • JanĂ« zgjeruar mundĂ«sitĂ« e shumĂ« klasave bazĂ«, si Binding, Enumerator, ErrorHighlight, Fiber, File, IO, Kernel, Math, Proc, Range, Socket, String, Thread.
  • Versionet e moduleve tĂ« integruar dhe atyre qĂ« pĂ«rfshihen nĂ« bibliotekĂ«n standarde janĂ« pĂ«rditĂ«suar.

Burimi: opennet.ru

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster