Phát hành ngôn ngữ lập trình Ruby 3.2

Ruby 3.2.0 đã được phát hành, một ngôn ngữ lập trình hướng đối tượng năng động, hiệu quả cao trong phát triển chương trình và kết hợp các tính năng tốt nhất của Perl, Java, Python, Smalltalk, Eiffel, Ada và Lisp. Mã dự án được phân phối theo giấy phép BSD ("BSDL 2 điều khoản") và "Ruby", đề cập đến phiên bản mới nhất của giấy phép GPL và hoàn toàn tương thích với GPLv3.

Cải tiến chính:

  • Đã thêm cổng ban đầu của trình thông dịch CRuby biên dịch thành mã trung gian WebAssembly để chạy trong trình duyệt web hoặc trong thời gian chạy độc lập như wasmtime. Để tương tác trực tiếp với hệ điều hành khi chạy riêng, API WASI (Giao diện hệ thống WebAssugging) được sử dụng. Trong số những thứ khác, một liên kết VFS trên WASI được cung cấp, cho phép bạn đóng gói toàn bộ ứng dụng bằng ngôn ngữ Ruby vào một chế độ xem dưới dạng một tệp wasm. Chạy trong trình duyệt có thể được sử dụng để tạo các dịch vụ web hướng dẫn và demo như TryRuby. Ở giai đoạn phát triển hiện tại, cổng đã vượt qua thành công bộ thử nghiệm cơ bản và bootstrap, không sử dụng API luồng. Cổng này cũng không hỗ trợ Fiber, Exceptions hoặc Garbage Collection.
  • Trình biên dịch JIT đang xử lý YJIT, được tạo bởi các nhà phát triển của nền tảng thương mại điện tử Shopify như một phần của sáng kiến ​​nhằm tăng hiệu suất của các chương trình Ruby sử dụng khung Rails và gọi nhiều phương thức, đã được tuyên bố là ổn định và sẵn sàng cho sử dụng sản xuất. Sự khác biệt chính so với trình biên dịch MJIT JIT được sử dụng trước đây, dựa trên xử lý phương thức và sử dụng trình biên dịch C bên ngoài, là YJIT sử dụng Phiên bản khối cơ bản lười biếng (LBBV) và chứa trình biên dịch JIT tích hợp. Nhờ có LBBV, ban đầu JIT chỉ biên dịch phần đầu của phương thức và biên dịch phần còn lại sau một thời gian, sau khi các loại biến và đối số được sử dụng được xác định trong quá trình thực thi. YJIT có sẵn cho kiến ​​trúc x86-64 và arm64/aarch64 trên Linux, MacOS, BSD và các nền tảng UNIX khác.

    Không giống như CRuby, mã YJIT được viết bằng Rust và yêu cầu trình biên dịch Rustc 1.58.0+ để biên dịch, do đó, quá trình biên dịch YJIT bị tắt theo mặc định và là tùy chọn. Khi sử dụng YJIT, hiệu suất tăng 41% được ghi nhận khi chạy thử nghiệm yjit-bench so với sử dụng diễn giải.

    Phát hành ngôn ngữ lập trình Ruby 3.2

  • Đã thêm tính năng bảo vệ bổ sung chống lại các cuộc tấn công gây ra tình trạng từ chối dịch vụ khi xử lý dữ liệu bên ngoài trong các biểu thức chính quy (ReDoS) không hiệu quả và kéo dài. Cải thiện đáng kể thuật toán khớp, sử dụng kỹ thuật ghi nhớ. Ví dụ: thời gian thực hiện của biểu thức '/^a*b?a*$/ =~ "a" * 50000 + "x"' đã giảm từ 10 xuống 0.003 giây. Cái giá của việc tối ưu hóa là tăng mức tiêu thụ bộ nhớ, mức tiêu thụ cao hơn khoảng 10 lần so với kích thước của dữ liệu đầu vào. Biện pháp bảo mật thứ hai là khả năng xác định thời gian chờ (ví dụ: "Regexp.timeout = 1.0"), mà biểu thức chính quy phải có thời gian để xử lý.
  • Chế độ 'syntax_suggest' được bao gồm để giúp chẩn đoán nguyên nhân gây ra lỗi liên quan đến câu lệnh đóng "kết thúc" bị thiếu hoặc thừa. `end' chưa khớp, thiếu từ khóa (`do', `def`, `if`, v.v.)? 1 lớp Chó > 2 con defbark > 3 đầu 4 đầu
  • Đã thêm khả năng đánh dấu đối số trong trường hợp có lỗi liên quan đến loại và đối số vào chế độ vị trí lỗi, ví dụ: test.rb:2:in `+': nil can't be forceced into Integer (TypeError) sum = ary[ 0] + ary [1] ^^^^^^
  • Đã thêm cú pháp mới để chuyển hướng đến các phương thức thiết lập đối số khác: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler được đề xuất - một biến thể của trình biên dịch MJIT JIT cũ, được viết lại bằng ngôn ngữ Ruby. Đảm bảo thực thi MJIT trong một quy trình riêng biệt, thay vì thực thi trong MJIT worker thread.
  • Trong Bundler 2.4, việc xử lý phụ thuộc sử dụng công cụ tìm phiên bản PubGrub, cũng được sử dụng bởi trình quản lý gói pub cho Dart. Thuật toán Molinillo được sử dụng trước đây tiếp tục được sử dụng trong RubyGems, nhưng cũng sẽ được thay thế bằng PubGrub trong tương lai.
  • Các phiên bản cập nhật của mô-đun đá quý thư viện tiêu chuẩn và tích hợp sẵn.

Nguồn: opennet.ru

Thêm một lời nhận xét