Keluaran bahasa pengaturcaraan Ruby 3.2

Ruby 3.2.0 telah dikeluarkan, bahasa pengaturcaraan berorientasikan objek dinamik yang sangat cekap dalam pembangunan program dan menggabungkan ciri terbaik Perl, Java, Python, Smalltalk, Eiffel, Ada dan Lisp. Kod projek diedarkan di bawah lesen BSD (β€œ2-klausa BSDL”) dan β€œRuby”, yang merujuk kepada versi terkini lesen GPL dan serasi sepenuhnya dengan GPLv3.

Penambahbaikan utama:

  • Menambahkan port awal penterjemah CRuby, yang menyusun ke dalam kod perantaraan WebAssembly untuk dijalankan dalam penyemak imbas web atau di bawah masa jalan kendiri seperti wasmtime. Untuk interaksi langsung dengan sistem pengendalian apabila berjalan secara berasingan, API WASI (WebAssembly System Interface) digunakan. Antara lain, pembungkus VFS disediakan di atas WASI, yang membolehkan anda membungkus keseluruhan aplikasi Ruby ke dalam pembentangan dalam bentuk fail wasm tunggal. Berjalan dalam penyemak imbas boleh digunakan untuk membuat latihan dan perkhidmatan web demo seperti TryRuby. Pada peringkat pembangunan semasa, port berjaya melepasi set ujian asas dan bootstrap, yang tidak menggunakan API Thread. Port juga tidak menyokong Fibers, pengecualian atau pengumpulan sampah.
  • Pengkompil JIT dalam proses YJIT, yang dicipta oleh pembangun platform e-dagang Shopify sebagai sebahagian daripada inisiatif untuk meningkatkan prestasi program Ruby yang menggunakan rangka kerja Rails dan memanggil banyak kaedah, telah diisytiharkan stabil dan bersedia untuk kegunaan pengeluaran. Perbezaan utama daripada pengkompil MJIT JIT yang digunakan sebelum ini, yang berdasarkan pemprosesan keseluruhan kaedah dan menggunakan pengkompil luaran dalam bahasa C, ialah YJIT menggunakan Lazy Basic Block Versioning (LBBV) dan mengandungi pengkompil JIT bersepadu. Dengan LBBV, JIT mula-mula menyusun hanya permulaan kaedah, dan menyusun selebihnya beberapa lama kemudian, selepas jenis pembolehubah dan hujah yang digunakan ditentukan semasa pelaksanaan. YJIT tersedia untuk seni bina x86-64 dan arm64/aarch64 pada Linux, MacOS, BSD dan platform UNIX yang lain.

    Tidak seperti Ruby, kod YJIT ditulis dalam bahasa Rust dan memerlukan pengkompil rustc 1.58.0+ untuk penyusunan, jadi binaan YJIT dilumpuhkan secara lalai dan adalah pilihan. Apabila menggunakan YJIT, peningkatan 41% dalam prestasi direkodkan semasa menjalankan ujian yjit-bench berbanding menggunakan tafsiran.

    Keluaran bahasa pengaturcaraan Ruby 3.2

  • Menambah perlindungan tambahan terhadap serangan penafian perkhidmatan apabila memproses data luaran dalam ungkapan biasa (ReDoS) yang tidak cekap dan memakan masa. Algoritma padanan, yang menggunakan teknik hafalan, telah dipertingkatkan dengan ketara. Sebagai contoh, masa pelaksanaan ungkapan '/^a*b?a*$/ =~ "a" * 50000 + "x"' telah dikurangkan daripada 10 kepada 0.003 saat. Kos pengoptimuman adalah peningkatan dalam penggunaan memori, penggunaannya adalah lebih kurang 10 kali lebih tinggi daripada saiz data input. Langkah keselamatan kedua ialah keupayaan untuk menentukan tamat masa (contohnya, "Regexp.timeout = 1.0") di mana ungkapan biasa mesti diproses.
  • Mod syntax_suggest disertakan, yang membantu mendiagnosis punca ralat yang dikaitkan dengan ungkapan "tamat" penutup yang hilang atau tambahan. `Tamat' tidak sepadan, tiada kata kunci (`do', `def`, `if`, dsb.) ? 1 kelas Anjing > 2 defbark > 3 hujung 4 hujung
  • Keupayaan untuk menandakan argumen untuk ralat yang berkaitan dengan jenis dan argumen telah ditambahkan pada mod paparan lokasi ralat, contohnya: test.rb:2:in `+': nil tidak boleh dipaksa menjadi Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Menambahkan sintaks baharu untuk mengubah hala set argumen ke kaedah lain: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler dicadangkan - varian pengkompil MJIT JIT lama, ditulis semula dalam bahasa Ruby. Memastikan bahawa MJIT berjalan dalam proses yang berasingan dan bukannya berjalan dalam urutan pekerja MJIT.
  • Dalam Bundler 2.4, pemprosesan kebergantungan menggunakan pengesan versi PubGrub, juga digunakan dalam pengurus pakej pub untuk bahasa Dart. Algoritma Molinillo yang digunakan sebelum ini terus digunakan dalam RubyGems, tetapi juga akan digantikan oleh PubGrub pada masa hadapan.
  • Versi modul permata terbina dalam yang dikemas kini dan yang disertakan dalam pustaka standard.

Sumber: opennet.ru

Tambah komen