Ruby 3.1.0 Preview 1 Dirilis

Kami dengan senang hati mengumumkan rilis dari Ruby 3.1.0-preview1.

YJIT: Compiler JIT eksperimental baru

Ruby 3.1 menggabungkan YJIT, sebuah compiler JIT baru yang dikembangkan oleh Shopify.

Sejak Ruby 2.6 mengenalkan MJIT pada 2018, kinerjanya sangat meningkat dan akhirnya kami mecapai Ruby3x3 tahun lalu. Meskipun Optcarrot telah menunjukkan peningkatan luar biasa, JIT belum memberikan manfaat untuk aplikasi dunia nyata.

Baru-baru ini Shopify berkontribusi banyak memperbaiki Ruby dengan meningkatkan kinerja aplikasi Rails mereka. YJIT adalah sebuah kontribusi penting dan bertujuan untuk memperbaiki kinerja dari aplikasi Rails.

Walaupun MJIT adalah sebuah method-based compiler JIT dan menggunakan sebuah compiler C eksternal, YJIT menggunakan Basic Block Versioning dan memasukkan compiler JIT ke dalamnya. Dengan Lazy Basic Block Versioning (LBBV), pertama ini akan meng-compile awal dari sebuah method dan secara bertahap meng-compile sisanya ketika argument types dan variabel ditentukan secara dinamis. Lihat YJIT: a basic block versioning JIT compiler for CRuby untuk pengenalan.

Dengan teknologi ini, YJIT meraih waktu warmup cepat dan peningkatan kinerja pada kebanyakan aplikasi dunia nyata hingga 22% pada railsbench dan 39% pada liquid-render.

YJIT merupakan sebuah fitur yang masih eksperimental dan dinonaktifkan secara default. Jika Anda ingin menggunakannya, tetapkan --yjit pada opsi command-line. Fitur ini terbatas pada macOS & Linux dengan arsitektur x86-64 saat ini.

debug gem: Sebuah debugger baru

Sebuah debugger baru debug.gem di-bundle dalam Ruby. debug.gem adalah implementasi debugger cepat dan menyediakan banyak fitur, seperti remote debugging, colorful REPL, dan integrasi IDE (VSCode). Gem ini menggantikan pustaka standar lib/debug.rb.

error_highlight: Lokasi fine-grained error pada backtrace

Sebuah built-in gem, error_highlight, diperkenalkan. Gem ini memberikan lokasi fine-grained error pada backtrace:

$ ruby test.rb
test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError)

1.time {}
 ^^^^^
Did you mean?  times

Gem ini diaktifkan secara default. Anda dapat menonaktikannya dengan menggunakan opsi command-line --disable-error_highlight. Lihat repositori untuk detail.

Perbaikan Irb

Akan dijelaskan pada preview berikutnya.

Fitur penting lainnya

Bahasa

  • Nilai pada literal Hash dan keyword argument dapat diabaikan. [Feature #14579]
    • {x:, y:} adalah sebuah syntax sugar dari {x: x, y: y}.
    • foo(x:, y:) adalah sebuah syntax sugar dari foo(x: x, y: y).
  • Pin operator pada pattern matching sekarang mengambil sebuah expression. [Feature #17411]
Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a
#=> [[3, 5], [5, 7], [11, 13]]

RBS

RBS adalah sebuah bahasa untuk mendeskripsikan struktur dari program Ruby. Lihat repositori untuk detail.

Perubahan sejak Ruby 3.0.0:

  • rbs collection diperkenalkan untuk mengatur gem dari RBS. dokumen
  • Banyak signature pada pustaka built-in dan standar ditambahkan/diperbarui.
  • Selain itu, memuat banyak perbaikan bug dan peningkatan kinerja.

Lihat CHANGELOG.md untuk informasi lebih lanjut.

TypeProf

TypeProf adalah sebuah static type analyzer untuk Ruby. TypeProf menghasilkan sebuah prototipe RBS dari kode Ruby yang non-type-annotated. Lihat dokumen untuk detail.

Perubahan sejak Ruby 3.0.0:

Peningkatan kinerja

  • MJIT
    • Untuk beban kerja seperti Rails, default --jit-max-cache diubah dari 100 menjadi 10000. Compiler JIT tidak lagi mengabaikan compilation dari method yang memiliki panjang lebih dari 1000 instruksi.
    • Untuk mendukung Zeitwerk dari Rails, JIT-ed code tidak lagi dibatalkan ketika sebuah TracePoint untuk class event diaktifkan.

Perubahan penting lainnya sejak 3.0

  • One-line pattern matching, seperti ary => [x, y, z] tidak lagi eksperimental.
  • Multiple assignment evaluation order telah diubah sedikit. [Bug #4443]
    • foo[0], bar[0] = baz, qux sebelumnya diproses dengan urutan baz, qux foo, dan kemudian bar pada Ruby 3.0. Pada Ruby 3.1, ini diproses dengan urutan foo, bar, baz, dan kemudian qux.
  • Variable Width Allocation: Strings (eksperimental) [Bug #18239]

Pembaruan pustaka standar

  • Beberapa pustaka standar diperbarui.
    • RubyGems
    • Bundler
    • RDoc 6.4.0
    • ReLine
    • JSON 2.6.0
    • Psych 4.0.2
    • FileUtils 1.6.0
    • Fiddle
    • StringIO 3.0.1
    • IO::Console 0.5.9
    • IO::Wait 0.2.0
    • CSV
    • Etc 1.3.0
    • Date 3.2.0
    • Zlib 2.1.1
    • StringScanner
    • IpAddr
    • Logger 1.4.4
    • OStruct 0.5.0
    • Irb
    • Racc 1.6.0
    • Delegate 0.2.0
    • Benchmark 0.2.0
    • CGI 0.3.0
    • Readline(C-ext) 0.1.3
    • Timeout 0.2.0
    • YAML 0.2.0
    • URI 0.11.0
    • OpenSSL
    • DidYouMean
    • Weakref 0.1.1
    • Tempfile 0.1.2
    • TmpDir 0.1.2
    • English 0.7.1
    • Net::Protocol 0.1.2
    • Net::Http 0.2.0
    • BigDecimal
    • OptionParser 0.2.0
    • Set
    • Find 0.1.1
    • Rinda 0.1.1
    • Erb
    • NKF 0.1.1
    • Base64 0.1.1
    • OpenUri 0.2.0
    • SecureRandom 0.1.1
    • Resolv 0.2.1
    • Resolv::Replace 0.1.0
    • Time 0.2.0
    • PP 0.2.1
    • Prettyprint 0.1.1
    • Drb 2.1.0
    • Pathname 0.2.0
    • Digest 3.1.0.pre2
    • Un 0.2.0
  • Bundled gem berikut diperbarui.
    • minitest 5.14.4
    • power_assert 2.0.1
    • rake 13.0.6
    • test-unit 3.5.0
    • rbs 1.6.2
    • typeprof 0.20.0
  • Default gem berikut sekarang adalah bundled gem.
    • net-ftp
    • net-imap
    • net-pop
    • net-smtp
    • matrix
    • prime

Lihat NEWS atau commit logs untuk lebih detail.

Unduh

  • https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.tar.gz

    SIZE: 20821221
    SHA1: 40dfd3db076a49fab9a0eee51e89d9b3d16a4e23
    SHA256: 540f49f4c3aceb1a5d7fb0b8522a04dd96bc4a22f9660a6b59629886c8e010d4
    SHA512: 63f528f20905827d03649ed9804e4a4e5c15078f9c6c8efcfb306baa7baafa17a406eb09a2c08b42e151e14af33b1aadbd9fb1cc84f9353d070b54bbf1ff950d
    
  • https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.tar.xz

    SIZE: 15742844
    SHA1: 22aa861b17031cd1b163b7443f5f2f5897c5895e
    SHA256: 86a836ad42f6a7a469fce71ffec48fd3184af55bf79e488b568a4f64adee551d
    SHA512: bdbd7c624197ca478658280d84123a8c12ae72425bc566dcc75989c5b5ef114dd57e64efc09e2413ed615d9b47621a70ace0f3612e8ca7ba853822ad9e88c0b0
    
  • https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.zip

    SIZE: 25019629
    SHA1: ef5fa22890e55935db4b96b3089a8aea1335bd85
    SHA256: 4e8d118b2365164873148ac545a8fa36c098b846a9b19ebb9037f8ee9adb4414
    SHA512: 917803aac0848e00871614a09740b5c9cca26f200d68580dde61666633f1b7fee506e25ea4ed0c38eb20149417bf9f1ed449a4d2aec5b726de670e7177e5c07a
    

Apa itu Ruby

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