ËshtĂ« publikuar gjuha e programimit Ruby 3.4.0

Ka kishte një lëshim të Ruby 3.4.0, një gjuhë programimi dinamike orientuar në objekte, e fokusuar në efikasitetin e lartë të zhvillimit të software-it dhe që kombinon karakteristikat më të mira të Perl, Java, Python, Smalltalk, Eiffel, Ada dhe Lisp. Kodi i projektit shpërndahet nën licencat BSD ("2-clause BSDL") dhe "Ruby", e cila referon versionin më të fundit të licencës GPL dhe është e përputhshme me GPLv3.

Përmirësimet kryesore:

  • Shtuar njĂ« identifikues tĂ« ri "it", i lidhur me parametrin e paemĂ«ruar qĂ« jepet nĂ« bllokun e paracaktuar. Identifikuesi i ri Ă«shtĂ« i ngjashĂ«m me ndryshoren e paranojĂ«s "_1" nĂ« rastin e kalimit tĂ« njĂ« parametri nĂ« bllok. Prezantimi i identifikuesit tĂ« ri shpjegohet me dĂ«shirĂ«n pĂ«r tĂ« eliminuar konfuzionin tĂ« shkaktuar nga mundĂ«sia e kalimit tĂ« disa parametrave nĂ« bllok ("it" nĂ«nkupton se gjithmonĂ« ka vetĂ«m njĂ« argument, ndĂ«rsa me shenjimin "_1", nuk Ă«shtĂ« e qartĂ« nĂ«se ekziston parametri "_2"). [1, 2, 3].each { puts _1 } [1, 2, 3].each { puts it } ary = ["foo", "bar", "baz"] p ary.map { it.upcase } #=> ["FOO", "BAR", "BAZ"]
  • Nga e drejta, pĂ«rdoret parser-i Prism, i cili Ă«shtĂ« mĂ« i transportueshĂ«m, i lehtĂ« pĂ«r tu mirĂ«mbajtur dhe lejon trajtimin e gabimeve nĂ« kod. Metodat e Prism pĂ«r analizimin e kodit Ruby nĂ« programet e tij janĂ« duke pĂ«rdorur Prism.parse(source) pĂ«r tĂ« marrĂ« pĂ«rfaqĂ«simin e AST tĂ« kodit, Prism.parse_comments(source) pĂ«r tĂ« nxjerrĂ« komentet nga kodi dhe Prism.parse_success?(source) pĂ«r tĂ« kontrolluar nĂ«se ka gabime nĂ« kod. PĂ«r tĂ« kthyer parser-in e mĂ«parshĂ«m "parse.y", mund tĂ« pĂ«rdoret opsioni "--parser=parse.y".
  • NĂ« bibliotekĂ«n "socket" Ă«shtĂ« implementuar dhe pĂ«rfshirĂ« si parazgjedhje mbĂ«shtetje pĂ«r algoritmin Happy Eyeballs (RFC 8305) pĂ«r zgjedhjen e protokollit optimal kur lidhet me host-et, tĂ« cilat janĂ« nĂ« dispozicion nĂ« adresat IPv4 dhe IPv6. PĂ«rdorimi i algoritmit Happy Eyeball lejon klientin tĂ« rezolvojĂ« menjĂ«herĂ« adresat IPv4 dhe IPv6 pĂ«r host-in dhe dĂ«rgon kĂ«rkesĂ«n pĂ«r lidhje pĂ«rmes IPv6, pastaj me njĂ« vonesĂ« prej 250 ms pĂ«rpiqet tĂ« lidhĂ« paralelisht me adresat e tjera tĂ« lidhura me host-in, pa pritur rezultatet nga pĂ«rpjekjet e mĂ«parshme tĂ« lidhjes. Lidhja qĂ« Ă«shtĂ« krijuar e para mbetet aktive, ndĂ«rsa tĂ« tjerat mbyllen. Deri mĂ« tani, thirrja e metodave TCPSocket.new dhe Socket.tcp nĂ« programet Ruby ka çuar nĂ« pĂ«rpjekje tĂ« gjithanshme pĂ«r tĂ« rezolvuar adresat IPv4/IPv6 dhe pĂ«r tĂ« lidhur, qĂ« ka rezultuar nĂ« vonesa, pĂ«r shembull, kur pĂ«rpjekja e parĂ« ishte pĂ«r lidhje pĂ«rmes IPv6, por sistemi nuk e mbante IPv6. PĂ«r tĂ« kthyer sjelljen e vjetĂ«r, mund tĂ« pĂ«rdoret variabla e mjedisit "RUBY_TCP_NO_FAST_FALLBACK=1", konfigurimi "Socket.tcp_fast_fallback=false" ose argumenti "fast_fallback: false" nĂ« thirrje.
  • JanĂ« vazhduar optimizimet e performancĂ«s sĂ« JIT-kompilatorit YJIT, i zhvilluar nga programuesit e platformĂ«s sĂ« tregtisĂ« elektronike Shopify pĂ«r iniciativĂ«n e rritjes sĂ« performancĂ«s sĂ« aplikacioneve Ruby qĂ« pĂ«rdorin framework-un Rails dhe qĂ« bĂ«jnĂ« shumĂ« thirrje metodash. Ndryshe nga JIT-kompilatori MJIT, YJIT i ri aplikon versionimin e blloqeve bazĂ« (LBBV - Lazy Basic Block Versioning) nĂ« vend tĂ« pĂ«rpunimit tĂ« metodave nĂ« tĂ«rĂ«si dhe Ă«shtĂ« realizuar si njĂ« JIT-kompilator i integruar, i shkruar nĂ« gjuhĂ«n Rust. FalĂ« LBBV, JIT nĂ« fillim kompilon vetĂ«m fillimin e metodĂ«s, ndĂ«rsa pjesa e mbetur kompilon nĂ« njĂ« kohĂ« mĂ« vonĂ«, pasi gjatĂ« ekzekutimit tĂ« pĂ«rcaktohen llojet e variablave dhe argumenteve qĂ« pĂ«rdoren.

    Në versionin e ri, në shumicën e testeve në sistemet x86_64 dhe ARM64 është arritur një rritje e performancës YJIT. Janë shtuar optimizime të reja: përdorimi i regjistrave për variablat lokalë dhe argumentet e metodave; angazhimi i realizimeve Ruby të Array#each, Array#select dhe Array#map; shpërndarja në linjë e metodave të zbrazëta dhe metodave që kthejnë konstantet, instancat e tyre ose argumentet hyrëse; gjeneratorët e veçantë të kodit për metoda të caktuara; optimizimi i punës me vargjet (String#getbyte, String#setbyte); përshpejtimi i operacioneve bitore.

    Konsumimi i memories është reduktuar falë kompresimit të metadatat dhe implementimit të një sistemi të unifikuar të kufizimeve. Shtuar opsioni "--yjit-mem-size", i vendosur parazgjedhur në vlerën 128MiB dhe që ndikon në konsumimin total të memories. Shtuar opsioni "--yjit-log" për të aktivizuar ndihmësin e ndjekjes, për çfarë kodi kompilohen.

  • PĂ«r sa i pĂ«rket, Ă«shtĂ« dhĂ«nĂ« mundĂ«sia e ngarkimit dinamik tĂ« mbledhĂ«sve alternativĂ« tĂ« mbeturinave, tĂ« ndĂ«rtuara nĂ« formĂ«n e bibliotekave tĂ« ndara. PĂ«r tĂ« specifikuar bibliotekĂ«n me mbledhĂ«sin e nevojshĂ«m tĂ« mbeturinave, duhet tĂ« pĂ«rdoret variabla e mjedisit RUBY_GC_LIBRARY. MbledhĂ«si i mbeturinave i integruar, i angazhuar parazgjedhur, tani mund tĂ« ndĂ«rtohet si njĂ« bibliotekĂ« e veçantĂ«. Si alternativĂ«, Ă«shtĂ« shtuar njĂ« mbledhĂ«s mbeturinash i bazuar nĂ« frameworkun MMTk, i shkruar nĂ« gjuhĂ«n Rust.
  • Transmetimi nĂ« metodat e argumenteve tĂ« emĂ«ruara me vlerĂ« nil Ă«shtĂ« e lejuar. Argumentet me vlerĂ«n «**nil» tani pĂ«rpunohen si njĂ« hesh «**{}» pa kaluar argumente tĂ« emĂ«ruara nĂ« metodĂ«.
  • NĂ« indekset, ndalohet kalimi i bllokuesve dhe pĂ«rcaktimi i argumenteve tĂ« emĂ«ruara, pĂ«r shembull, «a[&b]=c» dhe «o[1, a: 1]».
  • Metoda JSON.parse Ă«shtĂ« optimizuar, tani funksionon njĂ« herĂ« e gjysmĂ« mĂ« shpejt se paketa json 2.7.

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