Ruby 3.3 basa programming diterbitkeun

Ruby 3.3.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:

  • Struktur utama ngawengku parser Prisma, dilaksanakeun dina bentuk perpustakaan libprism C, dipaké dina juru CRuby, sarta pakét gem dina basa Ruby, nu nyadiakeun API umum pikeun luhur-handap recursive parsing kode dina basa Ruby. , cocog pikeun pamakéan dina proyék produksi tinimbang parser Ripper. Kaunggulan tina Prisma kaasup portability alus sarta penanganan kasalahan fléksibel dina kode. Pikeun ngaktifkeun parser anyar, anjeun tiasa nganggo pilihan "Ruby -parser = prisma" atanapi variabel lingkungan RUBYOPT = "-parser = prisma". Pikeun parse kodeu dina program anjeun, métode Prism.parse (sumber) sadia pikeun ménta representasi AST kode, Prism.parse_comments (sumber) pikeun nimba komentar tina kode, sarta Prism.parse_success? (sumber) pikeun pariksa. pikeun kasalahan dina kode.
  • Gantina pakét Bison éksternal, proyék Lrama dipaké pikeun ngahasilkeun parsers, nu nyadiakeun Ruby palaksanaan algoritma LALR, ngarojong harti grammar Bison-cocog (parse.y) dipaké dina CRuby, sarta implements fitur canggih kayaning penanganan kasalahan jeung aturan parameterized (?, *, +).
  • Optimasi kinerja anu penting parantos dilakukeun pikeun kompiler YJIT JIT, anu dikembangkeun ku pamekar platform e-commerce Shopify salaku bagian tina inisiatif pikeun ningkatkeun kinerja program Ruby anu nganggo kerangka Rails sareng nyauran seueur metode. Beda sareng kompiler JIT MJIT anu saacanna dianggo, YJIT énggal nganggo Lazy Basic Block Versioning (LBBV) tibatan ngolah sadayana metode sareng dilaksanakeun dina bentuk kompiler JIT terpadu anu ditulis dina basa Rust. Kalawan LBBV, JIT mimitina compiles ngan awal metoda, sarta compiles sésana sababaraha waktu engké, sanggeus jenis variabel jeung argumen dipaké ditangtukeun salila palaksanaan.

    Nalika nguji palaksanaan émulator Optcarrot, kinerja ngagunakeun YJIT leuwih ti tilu kali leuwih luhur ti ngajalankeun maké juru. Versi anyar nyadiakeun alokasi register pikeun operasi tumpukan mesin virtual, expands rentang telepon disusun kalawan argumen pilihan, implements deployment inline sahiji metodeu dasar sarta husus, sarta nambahkeun optimizations misah pikeun operasi "Integer#*", "Integer#!=" , “String#” !=", "String#getbyte", "Kernel#block_given?", "Kernel#is_a?", "Kernel#instance_of?" jeung "Modul# ===". Nyata ngaronjat speed kompilasi.

    Konsumsi mémori pikeun neundeun metadata parantos dikirangan sacara signifikan sareng generasi kode anu langkung kompak pikeun arsitektur ARM64 parantos dipastikeun. Sacara standar, Code collector sampah (“-yjit-code-gc”) ditumpurkeun, nu dinamis ngaluarkeun kode mesin dihasilkeun henteu kapake, tapi ngabalukarkeun degradasi kinerja salila ngumpulkeun sampah. Ditambahkeun RubyVM :: YJIT.enable metoda pikeun ngadalikeun naha YJIT diaktipkeun dina runtime, tanpa kudu ngajalankeun kalawan pilihan garis paréntah husus atawa variabel lingkungan. Statistik anu ditampilkeun nalika netepkeun pilihan "--yjit-stats" parantos dilegakeun. Ditambahkeun profil kinerja (--yjit-perf) sareng modeu ngalacak (--yjit-trace-kaluar).

  • A kompiler JIT anyar RJIT diusulkeun, ditulis sagemblengna dina basa Ruby tur ngaganti MJIT, tapi teu saperti dimungkinkeun, teu merlukeun hiji kompiler C lamun dipaké. RJIT ngan ukur ngadukung arsitektur x86-64 sareng platform sapertos Unix.
  • Ditambahkeun M: N thread scheduler, nu ngidinan Anjeun pikeun ngagunakeun jumlah kawates threads sistem operasi pikeun ngolah threads dina kode Ruby pikeun ngurangan overhead nyieun tur ngatur threads. Sacara standar, 8 benang OS dipaké (bisa dirobah via variabel lingkungan RUBY_MAX_CPU). Ngagunakeun M: N scheduler bisa ngabalukarkeun masalah kasaluyuan jeung ekstensi C, ku kituna ditumpurkeun sacara standar pikeun kelas Ractor utama, tapi diaktipkeun pikeun non-utama. Pikeun maksakeun ngaktifkeun "M: N" scheduler, setel variabel lingkungan RUBY_MN_THREADS=1.
  • Kamampuhan tina cangkang komputasi interaktif IRB (REPL, Read-Eval-Print-Loop) geus dimekarkeun. Ditambahkeun irb: rdbg mode debugging, anu sarimbag dina kamampuanna sareng pry-byebug debugger. Ditambahkeun rojongan pikeun multi-kaca nempoan kaluaran ls, show_source na show_cmds Paréntah. Pangrojong ékspérimén pikeun parantosan input otomatis parantos dilaksanakeun, kalayan ngitung jinis data. Paréntah disayogikeun pikeun ngarobih warna sareng gaya font.
  • Nelepon metoda "eta" kalawan euweuh argumen dina blok parameterless geus deprecated (contona, "[1, 2, 3].masing-masing {nempatkeun eta}").
  • RubyGems sareng Bundler ayeuna kalebet kaluaran peringatan upami bungkusan permata abbrev, base64, bigdecimal, csv, drb, getoptlong, mutex_m, nkf, observer, racc, resolv-replace, rinda sareng syslog dieusian dina "merlukeun" upami henteu ditambahkeun. mun Gemfile atanapi gemspec. Dina versi kahareup Ruby, gems ieu bakal diwangun kana pakét inti.
  • Vérsi diropéa tina modul gem diwangun-di jeung nu kaasup dina perpustakaan baku.

sumber: opennet.ru

Mésér hosting anu dipercaya pikeun situs anu gaduh panyalindungan DDoS, server VPS VDS 🔥 Meser hosting situs wéb anu tiasa dipercaya nganggo panyalindungan DDoS, server VPS VDS | ProHoster