Ruby 3.3.0-preview2 Dirilis

Kami dengan senang hati mengumumkan rilis dari Ruby 3.3.0-preview2. Ruby 3.3 menambahkan sebuah pure-Ruby JIT compiler baru yang bernama RJIT, menggunakan Lrama sebagai parser generator, dan memperbaiki performa khususnya YJIT.

RJIT

  • Memperkenalkan sebuah pure-Ruby JIT compiler dan menggantikan MJIT.
    • RJIT hanya mendukung arsitektur x86_64 pada platform Unix.
    • Berbeda dengan MJIT, RJIT tidak membutuhkan sebuah C compiler saat runtime.
  • RJIT ada untuk tujuan eksperimen.
    • Anda harus tetap menggunakan YJIT pada production.
  • Jika Anda tertarik untuk mengembangkan JIT pada Ruby, mohon cek k0kubun’s presentation on Day 3 of RubyKaigi.

Menggunakan Lrama ketimbang Bison

YJIT

  • Peningkatan performa yang signifikan dibanding Ruby 3.2
    • Dukungan splat dan rest argument telah ditingkatkan.
    • Register dialokasikan untuk operasi stack dari virtual machine.
    • Pemanggilan dengan optional argument dikompilasi.
    • Exception handler juga dikompilasi.
    • Instant variable tidak lagi keluar ke intepreter dengan Object Shapes yang sangat besar.
    • Call type yang tidak didukung tidak lagi keluar ke interpreter.
    • Integer#!=, String#!=, Kernel#block_given?, Kernel#is_a?, Kernel#instance_of?, Module#=== dioptimisasi.
    • Sekarang 3x lebih cepat dibanding interpreter pada optcarrot!
  • Metadata dari kode yang dikompilasi menggunakan memory lebih sedikit.
  • Peningkatan code generation pada ARM64
  • Opsi untuk menjalankan YJIT pada paused mode dan mengaktifkan kembali secara manual
    • --yjit-pause dan RubyVM::YJIT.resume
    • Ini dapat digunakan untuk mengaktifkan YJIT ketika aplikasi Anda selesai booting
  • ratio_in_yjit yang dihasilkan oleh --yjit-stats sekarang tersedia pada rilis build, data khusus atau dev build tidak lagi diperlukan.
  • Opsi exit tracing sekarang mendukung sampling
    • --trace-exits-sample-rate=N
  • Pengujian lebih saksama dan perbaikan beberapa bug

Fitur Penting Lainnya

Bahasa

Perbaikan performa

  • defined?(@ivar) dioptimisasi dengan Object Shapes.

Perubahan penting lainnya sejak 3.2

IRB

IRB mendapatkan beberapa peningkatan berikut, namun tidak terbatas pada:

  • Integrasi irb:rdbg yang menyediakan pengalaman deugging setara dengan pry-byebug (doc).
  • Dukungan pager untuk perintah, seperti ls dan show_cmds.
  • Menyediakan informasi yang lebih akurat dan membantu dengan perintah ls dan show_source.

Sebagai tambahan, IRB telah menjalani refactoring yang ekstensif dan menerima perbaikan bug untuk memfasilitasi peningkatan ke depan dengan lebih mudah.

Isu kompatibilitas

Catatan: Tidak termasuk perbaikan bug dari fitur.

Constant terhapus

Berikut ini adalah constant yang telah dihapus.

Method terhapus

Berikut ini adalah method yang telah dihapus.

Isu kompatibilitas Stdlib

ext/readline dipensiunkan

  • Kami memiliki reline yang merupakan implementasi Ruby murni dan kompatibel dengan ext/readline API. Kami bergantung pada reline di masa depan. Jika Anda perlu untuk menggunakan ext/readline, Anda dapat memasang ext/readline melalui rubygems.org dengan gem install readline-ext.
  • Kami tidak lagi memasang pustaka, seperti libreadline atau libedit.

Pembaruan C API

C API diperbarui

Berikut adalah API yang telah diperbarui.

C API terhapus

Berikut adalah API yang telah dihapus.

Pembaruan pustaka standar

RubyGems dan Bundler memperingatkan jika pengguna membutuhkan gem yang dijadwalkan akan menjadi bundled gem pada Ruby versi berikutnya.

Berikut adalah default gem yang telah diperbarui.

  • RubyGems 3.5.0.dev
  • bigdecimal 3.1.4
  • bundler 2.5.0.dev
  • csv 3.2.8
  • erb 4.0.3
  • fiddle 1.1.2
  • fileutils 1.7.1
  • irb 1.7.4
  • nkf 0.1.3
  • optparse 0.4.0.pre.1
  • psych 5.1.0
  • reline 0.3.8
  • stringio 3.0.9
  • strscan 3.0.7
  • syntax_suggest 1.1.0
  • time 0.2.2
  • timeout 0.4.0
  • uri 0.12.2
  • yarp 0.9.0

Berikut adalah bundled gem yang telah diperbarui.

  • minitest 5.19.0
  • test-unit 3.6.1
  • rexml 3.2.6
  • rss 0.3.0
  • net-imap 0.3.7
  • rbs 3.2.1
  • typeprof 0.21.8
  • debug 1.8.0

Berikut adalah default gem yang sekarang menjadi bundled gem.

  • racc 1.7.1

Lihat rilis GitHub, seperti Logger atau changelog untuk detail dari default gem atau bundled gem.

Lihat NEWS atau commit logs untuk lebih detail.

Dengan perubahan tersebut, 4970 berkas berubah, 239635 sisipan(+), 165275 terhapus(-) sejak Ruby 3.2.0!

Unduh

  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview2.tar.gz

    SIZE: 21074209
    SHA1: cf7329019235dc36b8e3f382a8b8b744922b1163
    SHA256: 30ce8b0fe11b37b5ac088f5a5765744b935eac45bb89a9e381731533144f5991
    SHA512: 1c5a13e519e8487fd40d932b96d14fa729521925c288e7841ab5eada628e506ceca2605bae36eea1aa505d9253383d53cd933b7a4bff96e6de5b1130c7c558e6
    
  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview2.tar.xz

    SIZE: 15600992
    SHA1: 606d6423137a24eef4f6b07d167596b63c7aaa17
    SHA256: 62b1c4f586c70bf1cb58f2d909d0d824506315782e835f9dd3fcc0b659a70fc1
    SHA512: 5ff609a66b7359006df0d87477cf70e6e26c5f40ced81b8254f8154f4fc82c77fed297471b55706c1a4466f2a4257999e933b2ed085f695ace265757ab9500a2
    
  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview2.zip

    SIZE: 26095651
    SHA1: 4441cd0db23d133e6e2f7dea28f931a68dac6ca5
    SHA256: c9771d24c9b1eab532c04ed076087285601693e4d1c63f131fd078c47c5c0cea
    SHA512: bfeed21d011f891fe22510fe7242992c98f7fd2ce863d8be5740f56a34b726134cb3f5304e8b2dcd468fbc939648f10aae482eee15c1bf6c64b705484ed9e197
    

Apa itu Ruby

Ruby pertama kali dikembangkan oleh Matz (Yukihiro Matsumoto) pada 1993 dan sekarang dikembangkan sebagai Open Source. Ruby berjalan pada berbagai platform dan digunakan di seluruh dunia, khususnya pengembangan web.