Rilis bahasa pemrograman Ruby 3.2

Ruby 3.2.0 telah dirilis, bahasa pemrograman berorientasi objek dinamis yang sangat efisien dalam pengembangan program dan menggabungkan fitur terbaik dari Perl, Java, Python, Smalltalk, Eiffel, Ada dan Lisp. Kode proyek didistribusikan di bawah lisensi BSD ("2-clause BSDL") dan "Ruby", yang mengacu pada versi terbaru lisensi GPL dan sepenuhnya kompatibel dengan GPLv3.

Perbaikan utama:

  • Menambahkan port awal penerjemah CRuby yang dikompilasi ke kode perantara WebAssembly untuk dijalankan di browser web atau di bawah runtime mandiri seperti wasmtime. Untuk interaksi langsung dengan sistem operasi saat dijalankan secara terpisah, digunakan API WASI (WebAssembly System Interface). Antara lain, disediakan pengikatan VFS di atas WASI, yang memungkinkan Anda mengemas seluruh aplikasi dalam bahasa Ruby ke dalam tampilan dalam bentuk file wasm tunggal. Berjalan di browser dapat digunakan untuk membuat layanan web tutorial dan demo seperti TryRuby. Pada tahap pengembangan saat ini, port berhasil melewati rangkaian pengujian dasar dan bootstrap, yang tidak menggunakan API Thread. Port tersebut juga tidak mendukung Fiber, Exceptions, atau Garbage Collection.
  • Kompiler JIT dalam proses YJIT, yang dibuat oleh pengembang platform e-commerce Shopify sebagai bagian dari inisiatif untuk meningkatkan kinerja program Ruby yang menggunakan kerangka Rails dan memanggil banyak metode, telah dinyatakan stabil dan siap untuk digunakan. penggunaan produksi. Perbedaan utama dari kompiler MJIT JIT yang digunakan sebelumnya, yang didasarkan pada pemrosesan metode dan menggunakan kompiler C eksternal, adalah YJIT menggunakan Lazy Basic Block Versioning (LBBV) dan berisi kompiler JIT terintegrasi. Berkat LBBV, JIT hanya mengkompilasi awal metode pada awalnya, dan mengkompilasi sisanya setelah beberapa waktu, setelah jenis variabel dan argumen yang digunakan ditentukan selama eksekusi. YJIT tersedia untuk arsitektur x86-64 dan arm64/aarch64 di Linux, MacOS, BSD, dan platform UNIX lainnya.

    Tidak seperti CRuby, kode YJIT ditulis dalam Rust dan memerlukan kompiler Rustc 1.58.0+ untuk dikompilasi, sehingga kompilasi YJIT dinonaktifkan secara default dan bersifat opsional. Saat menggunakan YJIT, peningkatan kinerja sebesar 41% tercatat saat menjalankan tes yjit-bench dibandingkan dengan menggunakan interpretasi.

    Rilis bahasa pemrograman Ruby 3.2

  • Menambahkan perlindungan tambahan terhadap serangan yang menyebabkan penolakan layanan saat memproses data eksternal dalam ekspresi reguler (ReDoS) yang tidak efisien dan berjalan lama. Algoritme pencocokan yang ditingkatkan secara signifikan, yang menggunakan teknik menghafal. Misalnya, waktu eksekusi ekspresi '/^a*b?a*$/ =~ "a" * 50000 + "x"' telah dikurangi dari 10 menjadi 0.003 detik. Harga optimasi adalah peningkatan konsumsi memori, yang konsumsinya sekitar 10 kali lebih tinggi dari ukuran data masukan. Ukuran keamanan kedua adalah kemampuan untuk menentukan batas waktu (misalnya, "Regexp.timeout = 1.0"), yang ekspresi regulernya harus memiliki waktu untuk diproses.
  • Mode sintaks_suggest disertakan untuk membantu mendiagnosis penyebab kesalahan yang terkait dengan pernyataan penutup "akhir" yang hilang atau berlebihan. `end' tidak cocok, kata kunci tidak ada (`do', `def`, `if`, dll.)? 1 kelas Anjing > 2 defbark > 3 ujung 4 ujung
  • Menambahkan kemampuan untuk menandai argumen jika terjadi kesalahan terkait tipe dan argumen ke mode lokasi kesalahan, misalnya: test.rb:2:in `+': nil tidak dapat dipaksa menjadi Integer (TypeError) sum = ary[ 0] + ary [1] ^^^^^^
  • Menambahkan sintaksis baru untuk mengalihkan ke metode kumpulan argumen lainnya: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler diusulkan - varian dari kompiler MJIT JIT lama, ditulis ulang dalam bahasa Ruby. Memastikan eksekusi MJIT dalam proses terpisah, bukan eksekusi di thread pekerja MJIT.
  • Di Bundler 2.4, penanganan ketergantungan menggunakan pencari versi PubGrub, yang juga digunakan oleh manajer paket pub untuk Dart. Algoritma Molinillo yang sebelumnya digunakan terus digunakan di RubyGems, namun juga akan digantikan oleh PubGrub di masa mendatang.
  • Versi terbaru dari modul permata perpustakaan bawaan dan standar.

Sumber: opennet.ru

Tambah komentar