The infamous randomness issue (“fix the linux manpage first”) is finally fixed!
But now they’re using arc4random without thinking about thread- and fork-safety. I guess the Global Interpreter Lock takes care of thread safety, but I’d add fork handling like LibreSSL does on non-OpenBSD platforms.
Note: the change to arc4random_buf is a 2.4.0 change (May 5th, 2016).
arc4random is explicitely documented and recommended as thread safe on net- and openbsd, and seems to be on darwin (I found positive reports, but not in the docs). FreeBSD and Linux don’t properly document, but I can’t find opposing reports.
As to fork safety: libressl doesn’t do that in all cases and - for example - considers the missing fork safety of arc4random a bug in FreeBSD:
That might or might not be a case for handling forks in Ruby, just a clarification that the situation around arc4random is a little bit annoying due to docs.
I see a situation arising if you have a linux with libbsd installed and it is used (libbsd arc4random not being fork safe to my quick reading).
In any case, it’s christmas, I may or may not read some more code later and assess that a little more.
Looks like a nice set of improvements! Glad to see Ruby still moving forward even though it isn’t the coolest kid on the block anymore.
The thing I like about MRI/CRuby has been on the constant road of improvement since years. They’ve got a fixed release cycle (December 25th for a full and February 24th for a patch release) and are very disciplined about this.
I have yet to remember a Ruby release that was not strictly better then the last one (I’ll include 1.9.3 in that list, as it was the better Ruby then 1.8.7, even if porting to it was painful. At some point, you have to break.)
Notably missing: Bundler in the standard library.
ooh, autorequiring pp and the case equality for any etc. in particular are really great examples of small features that will add up to a lot of developer pleasantness over time.