Phát hành Ruby 3.4.0 rc1
Đăng bởi naruse vào 12 Dec 2024
Chúng tôi vui mừng thông báo phát hành Ruby 3.4.0-rc1.
Prism
Chuyển trình phân tích mặc định từ parse.y sang Prism. [Feature #20564]
GC Mô-đun
-
Các triển khai bộ thu gom rác (GC) thay thế có thể được tải động thông qua tính năng bộ thu gom rác mô-đun. Để bật tính năng này, cấu hình Ruby với
--with-modular-gckhi build. Các thư viện GC có thể được tải tại thời điểm chạy bằng biến môi trườngRUBY_GC_LIBRARY. [Feature #20351] -
Bộ thu gom rác tích hợp của Ruby đã được tách ra thành một tập tin riêng tại
gc/default/default.cvà tương tác với Ruby thông qua API được định nghĩa tronggc/gc_impl.h. Bộ thu gom rác tích hợp giờ đây cũng có thể được build dưới dạng thư viện bằngmake modular-gc MODULAR_GC=defaultvà được bật bằng biến môi trườngRUBY_GC_LIBRARY=default. [Feature #20470] -
Một thư viện GC thử nghiệm được cung cấp dựa trên MMTk. Thư viện GC này có thể được build bằng
make modular-gc MODULAR_GC=mmtkvà được bật bằng biến môi trườngRUBY_GC_LIBRARY=mmtk. Điều này yêu cầu bộ công cụ Rust trên máy build. [Feature #20860]
Thay đổi ngôn ngữ
-
Các chuỗi ký tự trong các tập tin không có comment
frozen_string_literalgiờ đây phát ra cảnh báo deprecation khi chúng bị thay đổi. Các cảnh báo này có thể được bật với-W:deprecatedhoặc bằng cách đặtWarning[:deprecated] = true. Để tắt thay đổi này, bạn có thể chạy Ruby với tham số dòng lệnh--disable-frozen-string-literal. [Feature #20205] -
itđược thêm để tham chiếu đến tham số block. [Feature #18980] -
Giờ đây hỗ trợ keyword splatting
nilkhi gọi phương thức.**nilđược xử lý tương tự như**{}, không truyền keyword nào, và không gọi bất kỳ phương thức chuyển đổi nào. [Bug #20064] -
Không còn cho phép truyền block trong index. [Bug #19918]
-
Không còn cho phép keyword arguments trong index. [Bug #20218]
YJIT
TL;DR:
- Hiệu suất tốt hơn trên hầu hết các benchmark trên cả nền tảng x86-64 và arm64.
- Giảm sử dụng bộ nhớ cho metadata biên dịch
- Nhiều bản sửa lỗi. YJIT giờ đây ổn định hơn và được kiểm tra kỹ hơn.
Tính năng mới:
- Thêm giới hạn bộ nhớ thống nhất qua tùy chọn dòng lệnh
--yjit-mem-size(mặc định 128MiB) theo dõi tổng sử dụng bộ nhớ YJIT và trực quan hơn so với tùy chọn cũ--yjit-exec-mem-size. - Thêm nhiều thống kê luôn có sẵn qua
RubyVM::YJIT.runtime_stats - Thêm nhật ký biên dịch để theo dõi những gì được biên dịch qua
--yjit-log- Phần cuối nhật ký cũng có sẵn tại thời điểm chạy qua
RubyVM::YJIT.log
- Phần cuối nhật ký cũng có sẵn tại thời điểm chạy qua
- Thêm hỗ trợ cho hằng số chia sẻ trong chế độ multi-ractor
- Giờ đây có thể theo dõi các lần thoát được đếm với
--yjit-trace-exits=COUNTER
Tối ưu hóa mới:
- Context nén giảm bộ nhớ cần thiết để lưu trữ metadata YJIT
- Cải thiện bộ cấp phát với khả năng cấp phát thanh ghi cho biến cục bộ
- Khi YJIT được bật, sử dụng nhiều nguyên thủy Core hơn được viết bằng Ruby:
Array#each,Array#select,Array#mapđược viết lại bằng Ruby để có hiệu suất tốt hơn [Feature #20182].
- Khả năng inline các phương thức nhỏ/đơn giản như:
- Phương thức rỗng
- Phương thức trả về hằng số
- Phương thức trả về
self - Phương thức trực tiếp trả về một tham số
- Codegen chuyên biệt cho nhiều phương thức runtime hơn
- Tối ưu hóa
String#getbyte,String#setbytevà các phương thức chuỗi khác - Tối ưu hóa các phép toán bitwise để tăng tốc thao tác bit/byte cấp thấp
- Nhiều tối ưu hóa gia tăng khác
Cập nhật các lớp lõi
Lưu ý: Chúng tôi chỉ liệt kê các cập nhật lớp nổi bật.
-
Exception
Exception#set_backtracegiờ đây chấp nhận mảngThread::Backtrace::Location.Kernel#raise,Thread#raisevàFiber#raisecũng chấp nhận định dạng mới này. [Feature #13557]
-
Range
Range#sizegiờ đây némTypeErrornếu range không thể lặp. [Misc #18984]
Vấn đề tương thích
Lưu ý: Không bao gồm các bản sửa lỗi tính năng.
- Thông báo lỗi và hiển thị backtrace đã được thay đổi.
- Sử dụng dấu nháy đơn thay vì dấu backtick làm dấu mở ngoặc. [Feature #16495]
- Hiển thị tên lớp trước tên phương thức (chỉ khi lớp có tên cố định). [Feature #19117]
Kernel#caller, các phương thức củaThread::Backtrace::Location, v.v. cũng được thay đổi tương ứng.
Old: test.rb:1:in `foo': undefined method `time' for an instance of Integer from test.rb:2:in `<main>' New: test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer from test.rb:2:in '<main>'
Cập nhật C API
rb_newobjvàrb_newobj_of(và các macro tương ứngRB_NEWOBJ,RB_NEWOBJ_OF,NEWOBJ,NEWOBJ_OF) đã được loại bỏ. [Feature #20265]- Loại bỏ hàm deprecated
rb_gc_force_recycle. [Feature #18290]
Thay đổi khác
-
Truyền block cho một phương thức không sử dụng block đã truyền sẽ hiển thị cảnh báo ở chế độ verbose (
-w). [Feature #15554] -
Định nghĩa lại một số phương thức lõi được tối ưu hóa đặc biệt bởi trình thông dịch và JIT như
String.freezehoặcInteger#+giờ đây sẽ phát ra cảnh báo hiệu suất (-W:performancehoặcWarning[:performance] = true). [Feature #20429]
Xem các bản phát hành trên GitHub như Logger hoặc changelog để biết chi tiết về các gem mặc định hoặc gem đi kèm.
Xem NEWS hoặc nhật ký commit để biết thêm chi tiết.
Với những thay đổi đó, 4820 tập tin thay đổi, 196907 thêm vào(+), 253488 xóa đi(-) kể từ Ruby 3.3.0!
Tải về
-
https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0-rc1.tar.gz
SIZE: 23055998 SHA1: 216e3085ab8b886b9f74943ee5b62bd2e3d86671 SHA256: 1f3187d3366e90af6d760994f8bfe1fe8999a8ba3553ea4dcfae63e548236e2a SHA512: 0b0420a39c0bf3b38600d4e28805a581c4b5a6cf2abe41be8c8164276a8044a19e676de74eea5dd5b4d7d667d821a6144119795fea510fd4ba6e34865a2ae172 -
https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0-rc1.tar.xz
SIZE: 17116016 SHA1: 1424671cdc9c4bfe3778ac159d917c8bfe6107bd SHA256: 9c54225747f7a786727aa6213503083d5d8ff7097505d4b7456ff60880ee4a17 SHA512: 5b92a2b5829ab23735617945839e45df984b319b8932e790a8e0c6f681b9bd74249511a76345516cc216c002ed7887bdd27151501491d5ecedc20acd3fb57cc5 -
https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0-rc1.zip
SIZE: 28323595 SHA1: 4ae8ce4b15ccc3f0c6f42e408c44aa287a1ccc14 SHA256: 653162a2db627e8e5feee22a00b20acf215509d88b06ffb281bc8788ed12c74c SHA512: c6c6b9a0e61308e3f3303cd148613feabb2ee12d8e2fefc1f4aa1403237310f7c9be5e2031248ea89ff01cdc0bca1a66ff60f9f1f19ed9c9fccef3d7a3bbebb8
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