Rilis basa pamrograman Ruby 3.2

Ruby 3.2.0 dirilis, basa pemrograman berorientasi obyek dinamis sing efisien banget ing pangembangan program lan nggabungake fitur paling apik saka Perl, Java, Python, Smalltalk, Eiffel, Ada lan Lisp. Kode proyek disebarake miturut lisensi BSD ("2 klausa BSDL") lan "Ruby", sing nuduhake versi paling anyar saka lisensi GPL lan kompatibel karo GPLv3.

dandan utama:

  • Nambahake port awal interpreter CRuby, sing dikompilasi dadi kode perantara WebAssembly kanggo mlaku ing browser web utawa ing runtime mandiri kayata wasmtime. Kanggo interaksi langsung karo sistem operasi nalika mlaku kanthi kapisah, WASI (WebAssembly System Interface) API digunakake. Antarane liyane, pambungkus VFS kasedhiya ing ndhuwur WASI, sing ngijini sampeyan kanggo paket kabeh aplikasi Ruby menyang presentation ing wangun file wasm siji. Mlaku ing browser bisa digunakake kanggo nggawe layanan web latihan lan demo kayata TryRuby. Ing tahap pangembangan saiki, port kasebut kasil ngliwati suite tes dhasar lan bootstrap, sing ora nggunakake API Utas. Port kasebut uga ora ndhukung Serat, pengecualian, utawa koleksi sampah.
  • Kompiler JIT ing proses YJIT, digawe dening pangembang platform e-commerce Shopify minangka bagean saka inisiatif kanggo nambah kinerja program Ruby sing nggunakake kerangka Rails lan nelpon akeh metode, wis diumumake stabil lan siap kanggo panggunaan produksi. Bentenane utama saka kompiler MJIT JIT sing sadurunge digunakake, sing adhedhasar ngolah kabeh metode lan nggunakake kompiler eksternal ing basa C, yaiku YJIT nggunakake Lazy Basic Block Versioning (LBBV) lan ngemot kompiler JIT terpadu. Kanthi LBBV, JIT mung nglumpukake wiwitan metode kasebut, lan ngumpulake liyane sawetara wektu mengko, sawise jinis variabel lan argumen sing digunakake ditemtokake sajrone eksekusi. YJIT kasedhiya kanggo arsitektur x86-64 lan arm64/aarch64 ing Linux, MacOS, BSD lan platform UNIX liyane.

    Boten kados Ruby, kode YJIT ditulis ing basa Rust lan mbutuhake rustc 1.58.0+ compiler kanggo kompilasi, supaya YJIT mbangun dipatèni minangka standar lan opsional. Nalika nggunakake YJIT, paningkatan 41% ing kinerja dicathet nalika nglakokake tes yjit-bench dibandhingake nggunakake interpretasi.

    Rilis basa pamrograman Ruby 3.2

  • Nambahake pangayoman tambahan marang serangan penolakan layanan nalika ngolah data eksternal kanthi ekspresi reguler (ReDoS) sing ora efisien lan akeh wektu. Algoritma sing cocog, sing nggunakake teknik memorization, wis apik banget. Contone, wektu eksekusi ekspresi '/^a*b?a*$/ =~ "a" * 50000 + "x"' dikurangi saka 10 dadi 0.003 detik. Biaya optimasi minangka paningkatan konsumsi memori, konsumsi sing kira-kira 10 kaping luwih dhuwur tinimbang ukuran data input. Ukuran keamanan kapindho yaiku kemampuan kanggo nemtokake wektu entek (contone, "Regexp.timeout = 1.0") sajrone ekspresi reguler kudu diproses.
  • Mode syntax_suggest kalebu, sing mbantu diagnosa panyebab kesalahan sing ana gandhengane karo ekspresi "mburi" tutup sing ilang utawa ekstra. Ora cocog `pungkasan', ilang tembung kunci (`do', `def`, `if`, etc.) ? 1 kelas Dog> 2 defbark> 3 pungkasan 4 pungkasan
  • Kemampuan kanggo menehi tandha argumen kanggo kesalahan sing ana gandhengane karo jinis lan argumen wis ditambahake menyang mode tampilan lokasi kesalahan, contone: test.rb:2: ing `+': nil ora bisa dipeksa dadi Integer (TypeError) sum = ary [0] + lan [1] ^^^^^^
  • Nambahake sintaks anyar kanggo ngarahake set argumen menyang metode liyane: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler diusulake - varian saka kompiler MJIT JIT lawas, ditulis maneh ing basa Ruby. Mesthekake yen MJIT mlaku ing proses sing kapisah tinimbang mlaku ing benang pekerja MJIT.
  • Ing Bundler 2.4, pangolahan dependensi nggunakake detektor versi PubGrub, uga digunakake ing manajer paket pub kanggo basa Dart. Algoritma Molinillo sing sadurunge digunakake terus digunakake ing RubyGems, nanging uga bakal diganti dening PubGrub ing mangsa ngarep.
  • Dianyari versi modul permata dibangun ing lan sing klebu ing perpustakaan standar.

Source: opennet.ru

Add a comment