Izdanje programskog jezika Ruby 3.2

Objavljen je Ruby 3.2.0, dinamički objektno orijentirani programski jezik koji je vrlo učinkovit u razvoju programa i uključuje najbolje značajke Perla, Jave, Pythona, Smalltalka, Eiffela, Ade i Lispa. Kôd projekta distribuira se pod licencama BSD ("2-clause BSDL") i "Ruby", što se odnosi na najnoviju verziju GPL licence i potpuno je kompatibilno s GPLv3.

Glavna poboljšanja:

  • Dodan je početni priključak CRuby tumača, koji se kompilira u međukod WebAssembly za rad u web pregledniku ili pod samostalnim runtimeima kao što je wasmtime. Za izravnu interakciju s operativnim sustavom kada se izvodi odvojeno, koristi se WASI (WebAssembly System Interface) API. Između ostalog, VFS omotač je osiguran na vrhu WASI-ja, što vam omogućuje pakiranje cijele Ruby aplikacije u prezentaciju u obliku jedne wasm datoteke. Pokretanje u pregledniku može se koristiti za stvaranje treninga i demo web usluga kao što je TryRuby. U trenutnoj fazi razvoja, port uspješno prolazi osnovne i bootstrap testove koji ne koriste Thread API. Priključak također ne podržava vlakna, iznimke ili sakupljanje smeća.
  • YJIT in-process JIT kompajler, kreiran od strane programera Shopify e-commerce platforme kao dio inicijative za povećanje performansi Ruby programa koji koriste Rails okvir i pozivaju puno metoda, proglašen je stabilnim i spremnim za proizvodna uporaba. Ključna razlika u odnosu na prethodno korišteni MJIT JIT prevodilac, koji se temelji na obradi cijelih metoda i koristi vanjski prevodilac u jeziku C, je ta što YJIT koristi Lazy Basic Block Versioning (LBBV) i sadrži integrirani JIT prevodilac. Uz LBBV, JIT prvo kompajlira samo početak metode, a ostatak kompajlira nešto kasnije, nakon što se tipovi varijabli i argumenata koji se koriste utvrde tijekom izvođenja. YJIT je dostupan za x86-64 i arm64/aarch64 arhitekture na Linux, MacOS, BSD i drugim UNIX platformama.

    Za razliku od Rubyja, YJIT kod je napisan u Rust jeziku i zahtijeva rustc 1.58.0+ kompajler za kompilaciju, tako da je YJIT build prema zadanim postavkama onemogućen i nije obavezan. Pri korištenju YJIT-a zabilježeno je povećanje performansi od 41% pri izvođenju yjit-bench testa u usporedbi s korištenjem tumačenja.

    Izdanje programskog jezika Ruby 3.2

  • Dodana dodatna zaštita od napada uskraćivanjem usluge prilikom obrade vanjskih podataka u neučinkovitim i dugotrajnim regularnim izrazima (ReDoS). Algoritam sparivanja, koji koristi tehniku ​​memoriranja, značajno je poboljšan. Na primjer, vrijeme izvršenja izraza '/^a*b?a*$/ =~ "a" * 50000 + "x"' smanjeno je s 10 na 0.003 sekunde. Trošak optimizacije je povećanje potrošnje memorije, čija je potrošnja približno 10 puta veća od veličine ulaznih podataka. Druga sigurnosna mjera je mogućnost definiranja vremenskog ograničenja (na primjer, “Regexp.timeout = 1.0”) tijekom kojeg se regularni izraz mora obraditi.
  • Uključen je način syntax_suggest koji pomaže u dijagnosticiranju uzroka pogrešaka povezanih s nedostajućim ili dodatnim završnim izrazom "end". Nepodudarni `end', nedostaje ključna riječ (`do', `def`, `if`, itd.)? 1 klasa Pas > 2 deflajanje > 3 kraj 4 kraj
  • Mogućnost označavanja argumenata za pogreške koje se odnose na tipove i argumente dodana je načinu prikaza lokacije pogreške, na primjer: test.rb:2:in `+': nula se ne može prisiliti u Integer (TypeError) sum = ary [0] + ari [1] ^^^^^^
  • Dodana je nova sintaksa za preusmjeravanje skupova argumenata na druge metode: def foo(*) bar(*) end def baz(**) quux(**) end
  • Predložen je Ruby_vm/mjit/compiler - varijanta starog MJIT JIT prevoditelja, ponovno napisanog u Ruby jeziku. Osigurano da se MJIT izvodi u zasebnom procesu umjesto da se izvodi u MJIT radničkoj niti.
  • U Bundleru 2.4 obrada ovisnosti koristi detektor verzije PubGrub, koji se također koristi u pub upravitelju paketa za jezik Dart. Prethodno korišteni algoritam Molinillo i dalje se koristi u RubyGemsu, ali će ga u budućnosti također zamijeniti PubGrub.
  • Ažurirane verzije ugrađenih gem modula i onih uključenih u standardnu ​​biblioteku.

Izvor: opennet.ru

Dodajte komentar