

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](https://rubykaigi.org/2023/presentations/k0kubun.html#day3).

## Menggunakan Lrama ketimbang Bison

* Mengganti Bison dengan [Lrama LALR parser generator](https://github.com/yui-knk/lrama) [Feature #19637](https://bugs.ruby-lang.org/issues/19637)
  * Jika Anda tertarik, silakan lihat [The future vision of Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html)

## 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](https://github.com/ruby/irb#debugging-with-irb)).
- 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](https://github.com/ruby/logger/releases)
atau *changelog* untuk detail dari *default gem* atau *bundled gem*.

Lihat [NEWS](https://github.com/ruby/ruby/blob/v3_3_0_preview2/NEWS.md)
atau [commit logs](https://github.com/ruby/ruby/compare/v3_2_0...v3_3_0_preview2)
untuk lebih detail.

Dengan perubahan tersebut, [4970 berkas berubah, 239635 sisipan(+), 165275 terhapus(-)](https://github.com/ruby/ruby/compare/v3_2_0...v3_3_0_preview2#file_bucket)
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*.
