Ngaleupaskeun basa programming Ruby 3.1

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

  • Kompiler JIT dina prosés ékspérimén anyar, YJIT, parantos ditambah, didamel ku pamekar platform e-commerce Shopify salaku bagian tina inisiatif pikeun ningkatkeun kinerja program Ruby anu nganggo kerangka Rails sareng nyauran seueur metode. 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. Nalika nganggo YJIT, paningkatan 22% dina pagelaran kacatet nalika ngajalankeun tés railsbench, sareng paningkatan 39% dina tés render cair. YJIT ayeuna dugi ka ngadukung OS sapertos unix dina sistem sareng arsitéktur x86-64 sareng ditumpurkeun sacara standar (pikeun ngaktipkeun, tangtukeun bendera "--yjit" dina garis paréntah).
  • Ningkatkeun kinerja kompiler MJIT JIT heubeul. Pikeun proyék-proyék anu nganggo Rails, ukuran cache maksimum standar (--jit-max-cache) parantos ningkat tina 100 dugi ka 10000 paréntah. Dieureunkeun maké JIT pikeun métode kalawan leuwih ti 1000 parentah. Pikeun ngadukung Zeitwerk of Rails, kode JIT henteu deui dipiceun nalika TracePoint diaktipkeun pikeun acara kelas.
  • Ieu ngawengku hiji lengkep ditulis ulang debug.gem debugger, nu ngarojong jauh debugging, teu ngalambatkeun turun aplikasi debugged, ngarojong integrasi jeung interfaces debugging canggih (VSCode na Chrome), bisa dipaké pikeun debugging aplikasi multi-threaded sarta multi-prosés, nyadiakeun panganteur palaksanaan kode REPL, nawarkeun kamampuhan tracing canggih, bisa ngarekam jeung replay snippét kode. Debugger lib/debug.rb anu ditawarkeun saméméhna parantos dipiceun tina distribusi dasar.
    Ngaleupaskeun basa programming Ruby 3.1
  • Dilaksanakeun panyorot visual kasalahan dina laporan renik panggero deui. Kasalahan flagging disayogikeun nganggo pakét permata anu diwangun sareng diaktipkeun standar error_highlight. Pikeun nganonaktipkeun flagging kasalahan, anjeun tiasa nganggo setélan "--disable-error_highlight". $ ruby ​​​​test.rb test.rb:1:in" ": undefined method "time" pikeun 1: Integer (NoMethodError) 1.time {} ^^^^^ Dupi anjeun hartosna? kali
  • Cangkang tina itungan interaktif IRB (REPL, Read-Eval-Print-Loop) implements otomatis parantosan kode diasupkeun (sawaktos Anjeun ngetik, dipintonkeun hint kalawan pilihan pikeun nuluykeun input, antara nu bisa mindahkeun jeung Tab atawa Shift + Konci tab). Saatos milih pilihan tuluyan, kotak dialog ditingalikeun caket dieu anu ningalikeun dokuméntasi anu aya hubunganana sareng barang anu dipilih. Potong kompas keyboard Alt+d tiasa dianggo pikeun ngaksés dokuméntasi lengkep.
    Ngaleupaskeun basa programming Ruby 3.1
  • Sintaksis basa ayeuna ngamungkinkeun nilai-nilai dina literal hash sareng argumen kecap konci dilewatan nalika nelepon fungsi. Contona, tinimbang éksprési "{x: x, y: y}" anjeun ayeuna bisa nangtukeun "{x:, y:}", sarta tinimbang "foo (x: x, y: y)" - foo( x:, y:).
  • Rojongan anu stabil pikeun patandingan pola garis tunggal (ary => [x, y, z]), anu henteu deui ditandaan salaku ékspérimén.
  • Operator "^" dina patandingan pola ayeuna tiasa ngandung ekspresi sawenang-wenang, contona: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Dina patandingan pola garis tunggal, anjeun tiasa ngaleungitkeun kurung: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Basa annotation tipe RBS, nu ngidinan Anjeun pikeun nangtukeun struktur program jeung jenis dipaké, geus ditambahkeun rojongan pikeun nangtukeun wates luhur parameter tipe ngagunakeun simbol "<", ditambahkeun rojongan pikeun aliases tipe generik, rojongan dilaksanakeun pikeun kumpulan pikeun ngatur gems, ningkat kinerja sarta dilaksanakeun loba tanda tangan anyar pikeun diwangun-di na perpustakaan baku.
  • Pangrojong ékspérimén pikeun lingkungan pamekaran terpadu geus ditambahkeun kana TypePro tipe statik analyzer, nu dibangkitkeun RBS annotations dumasar kana analisis kode tanpa informasi tipe eksplisit (contona, hiji add-on geus disiapkeun pikeun ngahijikeun TypePro jeung VSCode redaktur).
  • Urutan ngolah sababaraha tugas parantos dirobih. Contona, saméméhna komponén tina éksprési "foo [0], bar [0] = baz, qux" diolah dina urutan baz, qux, foo, bar, tapi ayeuna foo, bar, baz, qux.
  • Ditambahkeun dukungan ékspérimén pikeun alokasi mémori pikeun senar nganggo mékanisme VWA (Variable Width Allocation).
  • Vérsi diropéa tina modul gem diwangun-di jeung nu kaasup dina perpustakaan baku. Paket net-ftp, net-imap, net-pop, net-smtp, matrix, prime sareng debug diwangun.

sumber: opennet.ru

Tambahkeun komentar