Phát hành Ruby 3.1.0 Preview 1

Đăng bởi naruse vào 9 Nov 2021

Chúng tôi vui mừng thông báo phát hành Ruby 3.1.0-preview1.

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ù 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 macOS & Linux trên x86-64.

debug gem: Trình gỡ lỗi mới

Một trình gỡ lỗi mới debug.gem được đi kèm. debug.gem là triển khai trình gỡ lỗi nhanh và cung cấp nhiều tính năng như gỡ lỗi từ xa, REPL đầy màu sắc, tích hợp IDE (VSCode) và hơn thế nữa. Nó thay thế thư viện chuẩ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

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ữ để biết chi tiết.

Cải tiến IRB

Sẽ được mô tả trong bản preview tiếp theo.

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ủa foo(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]]

RBS

RBS là một ngôn ngữ để mô tả cấu trúc chương trình Ruby. Xem kho lưu trữ để biết chi tiết.

Cập nhật kể từ Ruby 3.0.0:

  • 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 CHANGELOG.md để 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 kể từ Ruby 3.0.0:

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.

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ồi bar trong Ruby 3.0. Trong Ruby 3.1, được đánh giá theo thứ tự foo, bar, baz, rồi qux.
  • Variable Width Allocation: Strings (thử nghiệm) [Bug #18239]

Cập nhật thư viện chuẩn

  • Một số thư viện chuẩn đã được cập nhật.
    • 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
  • Các bundled gem sau đã được cập nhật.
    • 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
  • Các default gem sau giờ là bundled gem.
    • net-ftp
    • net-imap
    • net-pop
    • net-smtp
    • matrix
    • prime

Xem NEWS hoặc nhật ký commit để biết thêm chi tiết.

Với những thay đổi đó, 2963 tệp đã thay đổi, 529321 thêm vào(+), 92305 xóa bỏ(-) kể từ Ruby 3.0.0!

Tải về

  • 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
    

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 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

Thêm Tin...