Posted by naruse on 3 Apr 2022
We’re happy to announce the discharge of Ruby 3.2.0-preview1. Ruby 3.2 provides many options and efficiency enhancements.
WASI primarily based WebAssembly help
That is an preliminary port of WASI primarily based WebAssembly help. This permits a CRuby binary to be out there on Internet browser, Serverless Edge setting, and different WebAssembly/WASI embedders. At the moment this port passes fundamental and bootstrap check suites not utilizing Thread API.
Background
WebAssembly (WASM) is initially launched to run packages safely and quick in internet browsers. However its goal – working packages effectively with safety on numerous setting – is lengthy needed not solely by internet but additionally by common purposes.
WASI (The WebAssembly System Interface) is designed for such use instances. Although such purposes want to speak with working programs, WebAssembly runs on a digital machine which didn’t have a system interface. WASI standardizes it.
WebAssembly/WASI Help in Ruby intends to leverage these initiatives. It allows Ruby builders to jot down purposes which runs on such promised platform.
Use case
This help allows builders to make the most of CRuby in a WebAssembly setting. An instance use case is TryRuby playground’s CRuby help. Now you possibly can strive unique CRuby in your internet browser.
Technical factors
At this time’s WASI and WebAssembly itself has some lacking options to implement Fiber, exception, and GC as a result of it’s nonetheless evolving and likewise for safety causes. So CRuby fills the hole through the use of Asyncify, which is a binary transformation method to regulate execution in userland.
As well as, we constructed a VFS on prime of WASI in order that we are able to simply pack Ruby apps right into a single .wasm file. This makes distribution of Ruby apps a bit simpler.
Associated hyperlinks
Regexp timeout
A timeout function for Regexp matching is launched.
Regexp.timeout = 1.0
/^a*b?a*$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError is raised in a single second
It’s recognized that Regexp matching might take unexpectedly lengthy. In case your code makes an attempt to match an presumably inefficient Regexp in opposition to an untrusted enter, an attacker might exploit it for environment friendly Denial of Service (so-called Common expression DoS, or ReDoS).
The chance of DoS may be prevented or considerably mitigated by configuring Regexp.timeout
in line with the necessities of your Ruby software. Please strive it out in your software and welcome your suggestions.
Notice that Regexp.timeout
is a worldwide configuration. If you wish to use totally different timeout settings for some particular Regexps, it’s possible you’ll wish to use timeout
key phrase for Regexp.new
.
Regexp.timeout = 1.0
# This regexp has no timeout
long_time_re = Regexp.new("^a*b?a*$", timeout: nil)
long_time_re =~ "a" * 50000 + "x" # by no means interrupted
The unique proposal is https://bugs.ruby-lang.org/points/17837
Different Notable New Options
Now not bundle third occasion sources
Language
- Discover sample is now not experimental.
Efficiency enhancements
Different notable modifications since 3.1
- Hash
- Hash#shift now all the time returns nil if the hash is
empty, as an alternative of returning the default worth or
calling the default proc. [[Bug #16908]]
- Hash#shift now all the time returns nil if the hash is
- MatchData
- MatchData#byteoffset has been added. [[Feature #13110]]
- Module
- Module.used_refinements has been added. [[Feature #14332]]
- Module#refinements has been added. [[Feature #12737]]
- Module#const_added has been added. [[Feature #17881]]
- Proc
- Proc#dup returns an occasion of subclass. [[Bug #17545]]
- Proc#parameters now accepts lambda key phrase. [[Feature #15357]]
- Refinement
- Refinement#refined_class has been added. [[Feature #12737]]
- Set
- Set is now out there as a builtin class with out the necessity for
require "set"
. [[Feature #16989]]
It’s presently autoloaded through theSet
fixed or a name toEnumerable#to_set
.
- Set is now out there as a builtin class with out the necessity for
- String
- String#byteindex and String#byterindex have been added. [[Feature #13110]]
- Replace Unicode to Model 14.0.0 and Emoji Model 14.0. [[Feature #18037]]
(additionally applies to Regexp) - String#bytesplice has been added. [[Feature #18598]]
- Struct
- A Struct class will also be initialized with key phrase arguments
with outkeyword_init: true
onStruct.new
[[Feature #16806]]
- A Struct class will also be initialized with key phrase arguments
Normal libraries updates
-
The next default gem are up to date.
-
The next bundled gems are up to date.
-
The next default gems are actually bundled gems. You want to add the next libraries to
Gemfile
below the bundler setting.
See NEWS
or commit logs
for extra particulars.
With these modifications, 1058 recordsdata modified, 34946 insertions(+), 29962 deletions(-)
since Ruby 3.1.0!
Obtain
-
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0-preview1.tar.gz
SIZE: 20728782 SHA1: 7c4197e67f230b0c5d011f4efb9b9158743a61c8 SHA256: 6946b966c561d5dfc2a662b88e8211be30bfffc7bb2f37ce3cc62d6c46a0b818 SHA512: d24e77161996c2085f613a86d1ed5ef5c5bf0e18eb459f6a93a0014a5d2ce41079283b4283d24cb96448a0986c8c6c52a04584abd4e73911ea59cefeb786836e
-
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0-preview1.tar.xz
SIZE: 15011400 SHA1: 6bcc30ac670ab391997e0d68ba97b451db078934 SHA256: 6d28477f7fa626b63bf139afd37bcfeb28fce6847b203fa10f37cb3615d0c35d SHA512: 0eca2c346b995d265df2659b4215ff96e515c29926c2a6256caad99db9c4c51fec1a2d899ca63a00010d4111060dc0fdd4f591be84c0a2c43b6303879de3c5de
-
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0-preview1.zip
SIZE: 25370458 SHA1: 3c93c2e775366eec6e93cf670fc8677934cb4e48 SHA256: 24f8ae73d56366453defb0654de624bd1c063921a1d7ac780e4da56bb8fbf7e4 SHA512: 9754f11aa167df167d1b336e5c660aab1bd9e12421c093e0fe96e9a2da4ffb9859b7ea5263473bbc7b57ac8b5568cf7ac3116c0abdc647e1ff97a8d060ff7eae
What’s Ruby
Ruby was first developed by Matz (Yukihiro Matsumoto) in 1993,
and is now developed as Open Supply. It runs on a number of platforms
and is used all around the world particularly for internet improvement.