Ditulis oleh naruse tanggal 2021-12-25
Diterjemahkan oleh meisyal
Kami dengan senang hati mengumumkan rilis dari Ruby 3.1.0. Ruby 3.1 menjaga kompatibilitas dengan Ruby 3.0 dan menambahkan banyak fitur.
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 Unix-like platform dengan
arsitektur x86-64 saat ini.
- https://bugs.ruby-lang.org/issues/18229
- https://shopify.engineering/yjit-just-in-time-compiler-cruby
- https://www.youtube.com/watch?v=PBVLf3yfMs8
debug gem: Sebuah debugger baru
Sebuah debugger yang telah ditulis ulang dengan lengkap debug.gem di-bundle dengan Ruby. debug.gem memiliki fitur-fitur berikut:
- Meningkatkan kinerja debugging (ini tidak memperlambat aplikasi meskipun dengan debugger).
- Mendukung remote debugging.
- Mendukung rich debugging frontend (VS Code dan Chrome browser yang didukung saat ini).
- Mendukung multi-process/multi-thread debugging.
- Colorful REPL.
- dan fitur bermanfaat lainnya, seperti record & replay, tracing, dan sebagainya.
Ruby telah mem-bundle lib/debug.rb, tetapi pustaka ini tidak dipelihara dengan baik karena memiliki masalah kinerja dan fitur. debug.gem menggantikan lib/debug.rb secara keseluruhan.
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
Saat ini, hanya NameError
yang didukung.
Gem ini diaktifkan secara default. Anda dapat menonaktikannya dengan
menggunakan opsi command-line --disable-error_highlight
.
Lihat repositori untuk detail.
IRB Autocomplete dan Documentation Display
IRB sekarang memiliki sebuah fitur autocomplete di mana Anda dapat mengetik kode dan dialog kandidat autocomplete akan muncul. Anda bisa menggunakan Tab dan Shift+Tab untuk memilih kandidat ke atas dan ke bawah.
Jika dokumentasi terpasang ketika Anda memilih sebuah kandidat autocomplete, sebuah dialog akan muncul disamping dialog kandidat autocomplete, menampilkan bagian dari dokumentasi. Anda dapat membaca dokumentasi sepenuhnya dengan menekan Alt+d.
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 darifoo(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]]
-
Tanda kurung dapat diabaikan pada one-line pattern matching. [Feature #16182]
[0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
RBS
RBS adalah sebuah bahasa untuk mendeskripsikan struktur dari program Ruby. Lihat repositori untuk detail.
Perubahan sejak Ruby 3.0.0:
- Parameter generic type dapat dibatasi. (PR)
- Alias pada generic type telah didukung. (PR)
rbs collection
diperkenalkan untuk mengatur gem dari RBS. (doc)- Banyak signature pada pustaka built-in dan standar ditambahkan/diperbarui.
- Selain itu, memuat banyak perbaikan bug dan peningkatan kinerja.
Lihat RBS changelog untuk lebih detail.
TypeProf
TypeProf adalah sebuah static type analyzer untuk Ruby. TypeProf menghasilkan sebuah prototipe RBS dari kode Ruby yang non-type-annotated. Lihat dokumentasi untuk detail.
Perubahan utama sejak Ruby 3.0.0 adalah sebuah dukungan IDE eksperimental yang dikenal dengan “TypeProf for IDE”.
VS Code extension menampilkan sebuah perkiraan (atau secara langsung tertulis pada sebuah berkas RBS) method signature di atas setiap definisi method, menggarisbawahi kode yang mungkin menyebabkan name error atau type error dengan garis merah, dan melengkapi nama method (seperti menampilkan kandidat method). Lihat dokumentasi untuk detail.
Rilis ini juga berisi banyak perbaikan bug dan peningkatan kinerja.
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.
- Untuk beban kerja seperti Rails, default
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 urutanbaz
,qux
,foo
, dan kemudianbar
pada Ruby 3.0. Pada Ruby 3.1, ini diproses dengan urutanfoo
,bar
,baz
, dan kemudianqux
.
-
Variable Width Allocation: Strings (eksperimental) [Bug #18239]
- Psych 4.0 mengubah
Psych.load
untuk menggunakansafe_load
secara default. Anda mungkin perlu menggunakan Psynch 3.3.2 untuk menggunakan fitur ini. [Bug #17866]
Pembaruan pustaka standar
- Default gem berikut telah diperbarui.
- RubyGems 3.3.3
- base64 0.1.1
- benchmark 0.2.0
- bigdecimal 3.1.1
- bundler 2.3.3
- cgi 0.3.1
- csv 3.2.2
- date 3.2.2
- did_you_mean 1.6.1
- digest 3.1.0
- drb 2.1.0
- erb 2.2.3
- error_highlight 0.3.0
- etc 1.3.0
- fcntl 1.0.1
- fiddle 1.1.0
- fileutils 1.6.0
- find 0.1.1
- io-console 0.5.10
- io-wait 0.2.1
- ipaddr 1.2.3
- irb 1.4.1
- json 2.6.1
- logger 1.5.0
- net-http 0.2.0
- net-protocol 0.1.2
- nkf 0.1.1
- open-uri 0.2.0
- openssl 3.0.0
- optparse 0.2.0
- ostruct 0.5.2
- pathname 0.2.0
- pp 0.3.0
- prettyprint 0.1.1
- psych 4.0.3
- racc 1.6.0
- rdoc 6.4.0
- readline 0.0.3
- readline-ext 0.1.4
- reline 0.3.0
- resolv 0.2.1
- rinda 0.1.1
- ruby2_keywords 0.0.5
- securerandom 0.1.1
- set 1.0.2
- stringio 3.0.1
- strscan 3.0.1
- tempfile 0.1.2
- time 0.2.0
- timeout 0.2.0
- tmpdir 0.1.2
- un 0.2.0
- uri 0.11.0
- yaml 0.2.0
- zlib 2.1.1
- Bundled gem berikut telah diperbarui.
- minitest 5.15.0
- power_assert 2.0.1
- rake 13.0.6
- test-unit 3.5.3
- rexml 3.2.5
- rbs 2.0.0
- typeprof 0.21.1
- Default gem berikut sekarang adalah bundled gem. Anda perlu menambahkan
pustaka berikut pada
Gemfile
yang terdapat pada bundler environment.- net-ftp 0.1.3
- net-imap 0.2.2
- net-pop 0.1.1
- net-smtp 0.3.1
- matrix 0.4.2
- prime 0.1.2
- debug 1.4.0
Lihat NEWS atau commit logs untuk lebih detail.
Dengan perubahan tersebut, 3124 berkas berubah, 551760 sisipan(+), 99167 terhapus(-) sejak Ruby 3.0.0!
Selamat natal, selamat berlibur, dan nikmati memprogram dengan Ruby 3.1!
Unduh
-
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.tar.gz
SIZE: 20103517 SHA1: e4e8c20dd2a1fdef4d3e5bd5a3461000dd17f226 SHA256: 50a0504c6edcb4d61ce6b8cfdbddaa95707195fab0ecd7b5e92654b2a9412854 SHA512: 76009d325e961e601d9a287e36490cbc1f3b5dbf4878fa6eab2c4daa5ff2fed78cbc7525cd87b09828f97cbe2beb30f528928bcc5647af745d03dffe7c5baaa9
-
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.tar.xz
SIZE: 14709096 SHA1: 92b603c2a69fb25d66c337a63e94280984edea11 SHA256: 1a0e0b69b9b062b6299ff1f6c6d77b66aff3995f63d1d8b8771e7a113ec472e2 SHA512: a2bb6b5e62d5fa06dd9c30cf84ddcb2c27cb87fbaaffd2309a44391a6b110e1dde6b7b0d8c659b56387ee3c9b4264003f3532d5a374123a7c187ebba9293f320
-
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.zip
SIZE: 24388179 SHA1: e37435956d6f840a0e8758d7374bc7e0e346105f SHA256: a3bfcd486d09c065d46421da0ff3d430ce4423fefd80cea63c6595d83ae4af0e SHA512: 67db71144e06da2c1c25eaf413d1417c99a4b18738a573f9e3371c11ea242eee9dcbdc3de17336f25ab5060039fe034e57298943d344be9cd9eb33bb56e2e1c6
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.