Phát hành Ruby 3.1.0
Đăng bởi naruse vào 25 Dec 2021
Chúng tôi vui mừng thông báo phát hành Ruby 3.1.0. Ruby 3.1 giữ tính tương thích với Ruby 3.0 và cũng bổ sung nhiều tính năng mới.
YJIT: Trình biên dịch JIT trong tiến trình thử nghiệm mới
Ruby 3.1 tích hợp YJIT, một trình biên dịch JIT trong tiến trình mới được phát triển bởi Shopify.
Kể từ khi Ruby 2.6 giới thiệu MJIT vào năm 2018, hiệu năng đã được cải thiện đáng kể, và cuối cùng chúng tôi đã đạt được Ruby3x3 vào năm ngoái. Nhưng mặc dù benchmark Optcarrot đã cho thấy tốc độ cải thiện ấn tượng, JIT chưa mang lại lợi ích cho các ứng dụng kinh doanh thực tế.
Gần đây Shopify đã đóng góp nhiều cải tiến Ruby để tăng tốc ứng dụng Rails của họ. YJIT là một đóng góp quan trọng, nhằm cải thiện hiệu năng của các ứng dụng Rails.
Trong khi MJIT là trình biên dịch JIT dựa trên phương thức và sử dụng trình biên dịch C bên ngoài, YJIT sử dụng Basic Block Versioning và bao gồm trình biên dịch JIT bên trong. Với Lazy Basic Block Versioning (LBBV), nó đầu tiên biên dịch phần đầu của phương thức, và biên dịch dần phần còn lại khi kiểu của tham số và biến được xác định động. Xem YJIT: a basic block versioning JIT compiler for CRuby để có giới thiệu chi tiết.
Với công nghệ này, YJIT đạt được cả thời gian khởi động nhanh và cải thiện hiệu năng trên hầu hết phần mềm thực tế, lên đến 22% trên railsbench, 39% trên liquid-render.
YJIT vẫn là tính năng thử nghiệm, và do đó, nó bị tắt mặc định. Nếu bạn muốn sử dụng, hãy chỉ định tùy chọn dòng lệnh --yjit để bật YJIT. Hiện tại nó cũng chỉ giới hạn cho các nền tảng Unix-like x86-64.
- 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: Trình gỡ lỗi mới
Một trình gỡ lỗi được viết lại hoàn toàn debug.gem được đi kèm. debug.gem có các tính năng sau:
- Cải thiện hiệu suất gỡ lỗi (không làm chậm ứng dụng ngay cả khi có trình gỡ lỗi).
- Hỗ trợ gỡ lỗi từ xa.
- Hỗ trợ giao diện gỡ lỗi phong phú (hiện hỗ trợ VS Code và trình duyệt Chrome).
- Hỗ trợ gỡ lỗi đa tiến trình/đa luồng.
- REPL đầy màu sắc.
- Và các tính năng hữu ích khác như tính năng ghi lại & phát lại, tính năng theo dõi, v.v.
Ruby trước đó đi kèm lib/debug.rb, nhưng nó không được bảo trì tốt và có vấn đề về hiệu năng và tính năng. debug.gem thay thế hoàn toàn lib/debug.rb.
error_highlight: Vị trí lỗi chi tiết trong backtrace
Một gem tích hợp, error_highlight, đã được giới thiệu. Nó bao gồm vị trí lỗi chi tiết trong backtrace:
$ ruby test.rb
test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError)
1.time {}
^^^^^
Did you mean? times
Hiện tại chỉ có NameError được hỗ trợ.
Gem này được bật mặc định. Bạn có thể tắt nó bằng tùy chọn dòng lệnh --disable-error_highlight. Xem kho lưu trữ error_highlight để biết chi tiết.
Tự động hoàn thành và hiển thị tài liệu trong IRB
IRB giờ đã có tính năng tự động hoàn thành, bạn chỉ cần nhập mã và hộp thoại ứng viên hoàn thành sẽ xuất hiện. Bạn có thể sử dụng Tab và Shift+Tab để di chuyển lên xuống.
Nếu tài liệu đã được cài đặt, khi bạn chọn một ứng viên hoàn thành, hộp thoại tài liệu sẽ xuất hiện bên cạnh hộp thoại ứng viên hoàn thành, hiển thị một phần nội dung. Bạn có thể đọc toàn bộ tài liệu bằng cách nhấn Alt+d.
Các tính năng mới đáng chú ý khác
Ngôn ngữ
- Các giá trị trong Hash literal và tham số từ khóa có thể được bỏ qua. [Feature #14579]
{x:, y:}là cú pháp rút gọn của{x: x, y: y}.foo(x:, y:)là cú pháp rút gọn củafoo(x: x, y: y).
-
Toán tử pin (
^) trong khớp mẫu giờ nhận một biểu thức. [Feature #17411]Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #=> [[3, 5], [5, 7], [11, 13]] -
Có thể bỏ dấu ngoặc đơn trong khớp mẫu một dòng. [Feature #16182]
[0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
RBS
RBS là một ngôn ngữ để mô tả cấu trúc chương trình Ruby. Xem kho lưu trữ RBS để biết chi tiết.
Cập nhật kể từ Ruby 3.0.0:
- Tham số kiểu generic có thể bị ràng buộc. (PR)
- Bí danh kiểu generic được hỗ trợ. (PR)
rbs collectionđã được giới thiệu để quản lý RBS của các gem. (doc)- Nhiều chữ ký cho thư viện tích hợp và thư viện chuẩn đã được thêm/cập nhật.
- Cũng bao gồm nhiều bản sửa lỗi và cải thiện hiệu năng.
Xem nhật ký thay đổi RBS để biết thêm thông tin.
TypeProf
TypeProf là một công cụ phân tích kiểu tĩnh cho Ruby. Nó tạo ra bản mẫu RBS từ mã Ruby không có chú thích kiểu. Xem tài liệu để biết chi tiết.
Cập nhật chính kể từ Ruby 3.0.0 là hỗ trợ IDE thử nghiệm có tên “TypeProf for IDE”.

Phần mở rộng VS Code hiển thị chữ ký phương thức được suy luận (hoặc viết rõ ràng trong tệp RBS) phía trên mỗi định nghĩa phương thức, vẽ gạch chân đỏ dưới mã có thể gây lỗi tên hoặc lỗi kiểu, và hoàn thành tên phương thức (tức là hiển thị danh sách ứng viên phương thức). Xem tài liệu để biết chi tiết.
Ngoài ra, bản phát hành bao gồm nhiều bản sửa lỗi và cải thiện hiệu năng.
Cải thiện hiệu năng
- MJIT
- Cho các khối lượng công việc như Rails, giá trị mặc định
--jit-max-cacheđược thay đổi từ 100 thành 10000. Trình biên dịch JIT không còn bỏ qua biên dịch các phương thức dài hơn 1000 instruction. - Để hỗ trợ Zeitwerk của Rails, mã JIT-ed không còn bị hủy bỏ khi TracePoint cho sự kiện class được bật.
- Cho các khối lượng công việc như Rails, giá trị mặc định
Các thay đổi đáng chú ý khác kể từ 3.0
- Khớp mẫu một dòng, ví dụ
ary => [x, y, z], không còn là thử nghiệm. - Thứ tự đánh giá phép gán đa biến đã được thay đổi một chút. [Bug #4443]
foo[0], bar[0] = baz, quxđược đánh giá theo thứ tựbaz,qux,foo, rồibartrong Ruby 3.0. Trong Ruby 3.1, được đánh giá theo thứ tựfoo,bar,baz, rồiqux.
-
Variable Width Allocation: Strings (thử nghiệm). [Bug #18239]
- Psych 4.0 thay đổi
Psych.loadđể sử dụngsafe_loadmặc định. Bạn có thể cần sử dụng Psych 3.3.2 để chuyển đổi sang hành vi này. [Bug #17866]
Cập nhật thư viện chuẩn
- Các default gem sau đã được cập nhật.
- 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
- Các bundled gem sau đã được cập nhật.
- 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
- Các default gem sau giờ là bundled gem. Bạn cần thêm các thư viện sau vào
Gemfilekhi sử dụng trong môi trường bundler.- 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
Xem NEWS hoặc nhật ký commit để biết thêm chi tiết.
Với những thay đổi đó, 3124 tệp đã thay đổi, 551760 thêm vào(+), 99167 xóa bỏ(-) kể từ Ruby 3.0.0!
Chúc Giáng sinh vui vẻ, Kỳ nghỉ hạnh phúc, và hãy tận hưởng lập trình với Ruby 3.1!
Tải về
-
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
Ruby là gì
Ruby được phát triển lần đầu bởi Matz (Yukihiro Matsumoto) vào năm 1993, và hiện được phát triển dưới dạng Mã nguồn Mở. Nó chạy trên nhiều nền tảng và được sử dụng trên toàn thế giới, đặc biệt cho phát triển web.
Tin mới nhất
Phát hành Ruby 3.2.10
Ruby 3.2.10 đã được phát hành.
Đăng bởi hsbt vào 14 Jan 2026
Phát hành Ruby 4.0.1
Ruby 4.0.1 đã được phát hành.
Đăng bởi k0kubun vào 13 Jan 2026
Phát hành Ruby 4.0.0
Chúng tôi vui mừng thông báo phát hành Ruby 4.0.0. Ruby 4.0 giới thiệu “Ruby Box” và “ZJIT”, cùng nhiều cải tiến khác.
Đăng bởi naruse vào 25 Dec 2025
Diện mạo mới cho tài liệu Ruby
Tiếp theo việc thiết kế lại ruby-lang.org, chúng tôi có thêm tin vui để kỷ niệm 30 năm Ruby: docs.ruby-lang.org có diện mạo hoàn toàn...
Đăng bởi Stan Lo vào 23 Dec 2025