Last week I attended RubyKaigi, the most prestigious Ruby conference in the world. Held in Japan 10 times since 2006, it boasts an opening keynote by Matz and attendance by nearly every core committer.
Hosted in Kyoto for the first time ever, it was also my first time attending. The organizers were able to book the Kyoto International Conference Center. It’s a stunning venue that hosted the 1992 United Nations convention where the Kyoto Protocol was drafted. Originally built in the 60’s, after 50 years it still manages to look futuristic without appearing out of place amid the beautiful landscape.
The presentations at RubyKaigi are a mix of English and Japanese. Surprisingly, Japanese is the second class citizen. The majority of slides were in English even if the presentation wasn’t. Those that were in Japanese all had translations on the slides. Headsets were provided for live translations of the talks. The conference organizers even remarked that if all the talks were in English next year they could save money on translation.
The translators did a great job. Given the highly technical nature of these talks they handled it incredibly well. Even so there is something lost. The translations tended be to monotone. Halfway through a 40 minute technical talk with a monotone translation and I was struggling to stay focused.
The conference drew a good crowd from the US, Europe, Australia, and of course eastern Asia. Talking with Rubyist from all over was fun but sometimes difficult. English was prevalent but not universal. When mingling between sessions or at after parties it was difficult to know who you could successfully chat with.
As expected, the conference came with some big announcements. The first of which was Matz’s keynote on Ruby 3 typing. He shied away from optional types. He expressed concerns about jumping on the typing bandwagon simply because it’s popular and questioned whether adding types violated the DRY principle in some ways. Matz then gave an overview of what he called “soft typing”. His plan is to make Ruby better at understanding the interface being used in a method. It’ll check that interface against the provided arguments. Ruby remains dynamic and duck typed but gains improved introspection for what went wrong. In theory, this would provide better error messages and improved IDE support.
The other big announcement came from Koichi Sasada. He proposed “guilds” as a means of adding concurrency to Ruby. Code that uses a shared mutable state would all be contained within a single guild. The code running within that guild uses a GGL (Giant Guild Lock) to mimic the current behavior of the GVL (Global VM Lock). Since the lock is now per guild instead of global, the guilds can run in parallel. It’s important to remember that a proposal is just that. There’s no guarantee that’ll be the future of concurrent Ruby. Still, it was an exciting glimpse of what the future may hold.
Justin Searls kicked off day 2 with a keynote on refactoring Ruby. He discussed business and technical difficulties around refactoring before introducing Suture. I recommend watching the talk when it’s made available and taking a look at the gem.
There were quite a few talks around working with data. Talks covered exploring Ruby gems download data, using daru, and machine learning. SciRuby appears to be advancing at a solid pace and really wants to compete with what Python has to offer.
First there was a Q&A session with Matz and the other core committers. There’s clearly a large desire to learn from Python and be careful not to create the kind of split seen between Python 2 and 3. Part of that means freezing strings by default probably won’t make it into Ruby 3.
Another talk by Chris Arcand explored programmatic ways to find code to remove and then covered debride. It’s a gem that analyzes code and looks for unused methods.
The conference had lots of good talks that I didn’t specifically point out. There were several on mruby and a couple around the intersection of Ruby and gaming.
Concurrency and maturity were regularly repeated themes. There was a general feeling that Ruby is showing its age. The greenfield apps we all started with are now mature and need tending. Other languages like Elixir have compelling concurrency stories and Ruby needs a solution. We’ll see in time if those needs are met.
If you’ve never been to RubyKaigi I would recommend the trip. Japan is amazing, the conference is fun, and you might get to meet Matz.