Phát hành Ruby 2.6.0-rc2
Đăng bởi naruse vào 15 Dec 2018
Chúng tôi vui mừng thông báo phát hành Ruby 2.6.0-rc2.
Ruby 2.6.0-rc2 là release candidate thứ hai của Ruby 2.6.0. RC2 được phát hành để thử nghiệm Bundler 1.17 đi kèm thay vì 2.0. Nó giới thiệu một số tính năng mới và cải thiện hiệu suất, ví dụ:
JIT
Ruby 2.6 giới thiệu bản triển khai ban đầu của trình biên dịch JIT (Just-in-time).
Trình biên dịch JIT nhằm cải thiện hiệu suất thực thi của bất kỳ chương trình Ruby nào. Không giống các trình biên dịch JIT thông thường cho các ngôn ngữ khác, trình biên dịch JIT của Ruby thực hiện biên dịch JIT theo cách độc đáo, viết mã C ra đĩa và tạo tiến trình trình biên dịch C thông thường để sinh mã native. Xem thêm: Tổ chức MJIT (bởi Vladimir Makarov).
Cách sử dụng: Chỉ cần chỉ định --jit trong dòng lệnh hoặc biến môi trường $RUBYOPT.
Chỉ định --jit-verbose=1 cho phép in thông tin cơ bản về quá trình biên dịch JIT đang diễn ra. Xem ruby --help để biết các tùy chọn khác.
Mục đích chính của bản phát hành JIT này là cung cấp cơ hội để kiểm tra xem nó có hoạt động trên nền tảng của bạn không và tìm ra các rủi ro bảo mật trước bản phát hành 2.6. Trình biên dịch JIT được hỗ trợ khi Ruby được biên dịch bằng GCC, Clang, hoặc Microsoft VC++, cần có sẵn tại thời điểm chạy. Nếu không, bạn chưa thể sử dụng nó.
Tính đến Ruby 2.6.0-rc2, chúng tôi đã đạt được hiệu suất nhanh hơn 1.7 lần so với Ruby 2.5 trên benchmark khối lượng công việc nặng CPU không trivial có tên Optcarrot https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208. Chúng tôi cũng sẽ cải thiện hiệu suất trên khối lượng công việc nặng bộ nhớ như ứng dụng Rails.
Hãy đón chờ kỷ nguyên mới về hiệu suất của Ruby.
RubyVM::AbstractSyntaxTree [Thử nghiệm]
Ruby 2.6 giới thiệu module RubyVM::AbstractSyntaxTree.
Module này có phương thức parse phân tích mã Ruby từ chuỗi cho trước và trả về các nút AST (Abstract Syntax Tree), và phương thức parse_file phân tích mã Ruby từ tệp cho trước và trả về các nút AST.
Lớp RubyVM::AbstractSyntaxTree::Node cũng được giới thiệu. Bạn có thể lấy thông tin vị trí và các nút con từ các đối tượng Node. Tính năng này là thử nghiệm. Tính tương thích của cấu trúc các nút AST không được đảm bảo.
Tính năng mới
-
Thêm bí danh mới
thenchoKernel#yield_self. [Feature #14594] -
elsekhông córescuegiờ sẽ gây ra lỗi cú pháp. [THỬ NGHIỆM][Feature #14606] -
Tên hằng số có thể bắt đầu bằng chữ cái viết hoa không phải ASCII. [Feature #13770]
-
Giới thiệu dãy vô tận. [Feature #12912]
Dãy vô tận
(1..)được giới thiệu. Nó hoạt động như thể không có điểm kết thúc. Dưới đây là các trường hợp sử dụng tiêu biểu:ary[1..] # tương đương ary[1..-1] không cần số -1 đặc biệt (1..).each {|index| block } # vòng lặp vô hạn từ chỉ số 1 ary.zip(1..) {|elem, index| block } # ary.each.with_index(1) { } -
Thêm
Binding#source_location. [Feature #14230]Phương thức này trả về vị trí nguồn của binding, một mảng 2 phần tử gồm
__FILE__và__LINE__. Theo truyền thống, cùng thông tin có thể được lấy bằngeval("[__FILE__, __LINE__]", binding), nhưng chúng tôi đang lên kế hoạch thay đổi hành vi này đểKernel#evalbỏ qua vị trí nguồn của binding [Bug #4352]. Vì vậy, người dùng nên sử dụng phương thức mới được giới thiệu này thay vìKernel#eval. -
Thêm tùy chọn
:exceptionđểKernel#systemném ngoại lệ khi thất bại thay vì trả vềfalse. [Feature #14386] -
Thêm chế độ oneshot cho
Coverage. [Feature#15022]- Chế độ này kiểm tra “liệu mỗi dòng đã được thực thi ít nhất một lần hay chưa”, thay vì “mỗi dòng đã được thực thi bao nhiêu lần”. Hook cho mỗi dòng được kích hoạt nhiều nhất một lần, và sau khi kích hoạt, cờ hook sẽ bị xóa, tức là chạy với chi phí bằng không.
- Thêm tham số từ khóa
:oneshot_linescho Coverage.start. - Thêm tham số từ khóa
:stopvà:clearcho Coverage.result. Nếuclearlà true, nó xóa bộ đếm về không. Nếustoplà true, nó tắt đo coverage. - Coverage.line_stub, một hàm helper đơn giản tạo “stub” của line coverage từ mã nguồn cho trước.
-
Thêm
FileUtils#cp_lr. [Feature #4189]
Cải thiện hiệu suất
-
Tăng tốc
Proc#callvì không còn cần quan tâm đến$SAFEnữa. [Feature #14318]Với benchmark
lc_fizzbuzzsử dụngProc#callnhiều lần, chúng tôi có thể đo được cải thiện x1.4. [Bug #10212]. -
Tăng tốc
block.callkhiblocklà tham số block được truyền vào. [Feature #14330]Ruby 2.5 cải thiện hiệu suất truyền block. [Feature #14045]
Thêm vào đó, Ruby 2.6 cải thiện hiệu suất gọi block được truyền. Với benchmark vi mô, chúng tôi có thể quan sát cải thiện x2.6.
-
Transient Heap (theap) được giới thiệu. [Bug #14858] [Feature #14989]
theap là heap được quản lý cho các đối tượng bộ nhớ ngắn hạn được trỏ bởi các lớp cụ thể (Array, Hash, Object, và Struct). Ví dụ, tạo đối tượng Hash nhỏ và ngắn hạn nhanh hơn x2. Với benchmark rdoc, chúng tôi quan sát được cải thiện hiệu suất 6-7%.
Các thay đổi đáng chú ý khác kể từ 2.5
-
$SAFEgiờ là trạng thái toàn cục của tiến trình và có thể đặt lại thành0. [Feature #14250] -
Truyền
safe_levelchoERB.newđã bị deprecated. Các tham sốtrim_modevàeoutvarđược chuyển thành tham số từ khóa. [Feature #14256] -
Phiên bản Unicode được hỗ trợ đã cập nhật lên 11. Dự kiến sẽ cập nhật lên 12 và 12.1 trong các bản phát hành TEENY tương lai của Ruby 2.6.
-
Tích hợp RubyGems 3.0.0.beta3. Các tùy chọn
--rivà--rdocđã bị xóa. Vui lòng sử dụng các tùy chọn--documentvà--no-documentthay thế. -
Tích hợp Bundler làm gem mặc định.
Xem NEWS hoặc nhật ký commit để biết chi tiết.
Với các thay đổi đó, 6411 tệp thay đổi, 228864 thêm(+), 97600 xóa(-) kể từ Ruby 2.5.0!
Hãy tận hưởng lập trình với Ruby 2.6.0-rc2!
Tải về
-
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.gz
SIZE: 16723556 bytes SHA1: a4d7f8c8c3584a60fe1a57d03d80162361fe3c78 SHA256: 9c0245e96379246040f1fd0978f8e447e7f47cdccbdaffdb83302a995276b62b SHA512: 789f608f93db6e12835911f3105d9abe2fabb67cd22dc3bafdff38716ac56974925738e7f7788ebef5bdf67b6fd91f84a4ee78a3e5d072cfc8ee0972de737b08 -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.zip
SIZE: 20643747 bytes SHA1: c1a2898949d929dd952880f1c1c2bac2ef2609b4 SHA256: e8a446cf1f2ffc14483604de0a5e12c2578dd2f672ae87798ca2bbb9b7b73899 SHA512: 2d06feae13f485f5da59574672b14d03881ed532d652648f94e2435f5d81df623b5ef532b8ba8e0b9bc4ee6baf7c0328a5610eab753a9020a0fea2673254c76c -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.bz2
SIZE: 14581998 bytes SHA1: 94bbee97de4955e67effb7f512c58300617a3a09 SHA256: b3d03e471e3136f43bb948013d4f4974abb63d478e8ff7ec2741b22750a3ec50 SHA512: 9bfbe83fd3699b71bae2350801d8c967eb128e79b62a9d36fc0f011b83c53cab28a280939f4cc9f0a28f9bf02dce8eea30866ca4d06480dc44289400abf580ba -
https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0-rc2.tar.xz
SIZE: 11908088 bytes SHA1: 13a7f06d832dc28989e3e4321490a6ba528ed023 SHA256: d620b3d87b3190867304067f3ce77f5305f7ec1b2e73b09c17710c97c028986d SHA512: a3dc43c0bc70dfdb9ff0d18b5b9797bbf332524f5d3bbb7940cf4e32286ca715808acfd11ebf3cdbe358a2466b7c6b5be3a7a784af7eb95c071fe1f8b4ab1261
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