Ngaleupaskeun basa programming Ruby 3.2

Ruby 3.2.0 dirilis, basa programming obyék-berorientasi dinamis anu kacida efisien dina ngembangkeun program sarta incorporates fitur pangalusna tina Perl, Java, Python, Smalltalk, Eiffel, Ada na Lisp. Kodeu proyék disebarkeun dina BSD ("2-klausa BSDL") sareng lisensi "Ruby", anu nujul kana versi panganyarna tina lisénsi GPL sareng sapinuhna cocog sareng GPLv3.

Perbaikan utama:

  • Nambahkeun port awal tina juru CRuby, nu compiles kana kode panganteur WebAssembly pikeun ngajalankeun dina web browser atawa dina runtimes mandiri kayaning wasmtime. Pikeun interaksi langsung jeung sistem operasi nalika ngajalankeun misah, WASI (WebAssembly System Interface) API dipaké. Diantara hal séjén, hiji wrapper VFS disadiakeun dina luhureun WASI, nu ngidinan Anjeun pikeun ngarangkep sakabéh aplikasi Ruby kana presentasi dina bentuk file wasm tunggal. Ngajalankeun dina browser tiasa dianggo pikeun ngadamel pelatihan sareng jasa wéb demo sapertos TryRuby. Dina tahap pangwangunan ayeuna, port éta suksés ngalangkungan suite tés dasar sareng bootstrap, anu henteu nganggo API Thread. Port ogé henteu ngadukung Serat, pengecualian, atanapi ngumpulkeun sampah.
  • Kompiler JIT dina prosés YJIT, diciptakeun ku pamekar platform e-commerce Shopify salaku bagian tina inisiatif pikeun ningkatkeun kinerja program Ruby anu nganggo kerangka Rails sareng nyauran seueur metode, parantos dinyatakeun stabil sareng siap pikeun pamakéan produksi. Beda konci ti compiler MJIT JIT saméméhna dipaké, nu dumasar kana ngolah sakabéh métode jeung ngagunakeun hiji kompiler éksternal dina basa C, éta YJIT ngagunakeun Puguh Dasar Blok Versioning (LBBV) sarta ngandung hiji kompiler JIT terpadu. Kalawan LBBV, JIT mimitina compiles ngan awal metoda, sarta compiles sésana sababaraha waktu engké, sanggeus jenis variabel jeung argumen dipaké ditangtukeun salila palaksanaan. YJIT sayogi pikeun x86-64 sareng arm64 / aarch64 arsitéktur dina Linux, MacOS, BSD sareng platform UNIX anu sanés.

    Teu kawas Ruby, kode YJIT ditulis dina basa Rust sarta merlukeun rustc 1.58.0+ kompiler pikeun kompilasi, jadi YJIT ngawangun ditumpurkeun sacara standar sarta pilihan. Nalika nganggo YJIT, paningkatan 41% dina pagelaran kacatet nalika ngajalankeun tés yjit-bench dibandingkeun sareng interpretasi.

    Ngaleupaskeun basa programming Ruby 3.2

  • Ditambahkeun panyalindungan tambahan ngalawan panolakan serangan jasa nalika ngolah data éksternal dina ekspresi biasa (ReDoS) anu teu episién sareng nyéépkeun waktos. Algoritma anu cocog, anu ngagunakeun téknik memorization, parantos ningkat sacara signifikan. Contona, waktu palaksanaan ekspresi '/^a*b?a*$/ =~ "a" * 50000 + "x"' dikirangan ti 10 jadi 0.003 detik. Biaya optimasi mangrupikeun kanaékan konsumsi mémori, anu konsumsina kirang langkung 10 kali langkung luhur tibatan ukuran data input. Ukuran kaamanan kadua nyaéta kamampuhan pikeun nangtukeun waktu béak (contona, "Regexp.timeout = 1.0") salila ekspresi biasa kudu diolah.
  • Mode syntax_suggest kaasup, nu mantuan nangtukeun jenis panyakitna ngabalukarkeun kasalahan pakait sareng leungit atawa tambahan nutup "tungtung" éksprési. Teu cocog `tungtung', leungit keyword (`do', `def`, `lamun`, jsb) ? 1 kelas Anjing> 2 defbark> 3 tungtung 4 tungtung
  • Kamampuhan pikeun nandaan argumen pikeun kasalahan anu aya hubunganana sareng jinis sareng argumen parantos ditambah kana mode tampilan lokasi kasalahan, contona: test.rb:2: dina `+': nihil teu tiasa dipaksa kana Integer (TypeError) sum = ary [0] + jeung [1] ^^^^^^
  • Nambahkeun sintaksis anyar pikeun alihan sét argumen ka métode séjén: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler diusulkeun - varian tina kompiler MJIT JIT heubeul, ditulis ulang dina basa Ruby. Mastikeun yén MJIT dijalankeun dina prosés anu misah tibatan dijalankeun dina benang padamel MJIT.
  • Dina Bundler 2.4, ngolah kagumantungan ngagunakeun detektor versi PubGrub, ogé dianggo dina manajer pakét pub pikeun basa Dart. Algoritma Molinillo anu sateuacana dianggo terus dianggo dina RubyGems, tapi ogé bakal diganti ku PubGrub di hareup.
  • Vérsi diropéa tina modul gem diwangun-di jeung nu kaasup dina perpustakaan baku.

sumber: opennet.ru

Tambahkeun komentar