00:00:11.710
Matz normally doesn't take questions during the Q&A. Years ago, at the keynote, we usually covered the idea that people often have lots of questions.
00:00:18.260
Anything someone asked him in the hallway is probably something that other people would be interested in hearing as well. That’s why we've always organized this time at the end of RubyConf to ask Matz questions.
00:00:30.890
I have questions from my own interests that we can use to get started, but I expect you to run this for the most part. I'll help moderate.
00:00:37.640
There are microphones over there and over here. I would ask you to line up, and I will call on you as you get up.
00:00:44.750
With that, let's go ahead and get started. So, how's Ruby been for you this year?
00:00:50.300
Yeah, I met so many first-timers this year. At the same time, I met very familiar faces like Chad. It's odd; it's like a yo-yo.
00:01:07.310
We have as many new people, but we still have that old base. I was curious earlier, how many Ruby conferences, or I guess conferences in general, do you attend a year?
00:01:15.409
Outside of Japan, I attended five conferences this year.
00:01:30.350
Is that a lot? Is that an average for you?
00:01:36.859
Mostly it averages to about five conferences a year. Do you go to other kinds of conferences as well?
00:01:42.829
No, only Ruby conferences.
00:01:59.270
No questions yet? You guys have nothing? Oh, look, we were waiting— I just had to poke and prod it.
00:02:07.459
It's always like that; once it gets going, there will be lots of talk about.
00:02:14.150
We are still hearing a lot about type-checking and all those kinds of ideas in Ruby. Have you thought any more about whether it's a serious thing that you think Ruby will get in the unknown amount of time?
00:02:26.970
Or is it still a sort of wait-and-see situation for many of those experimental ideas?
00:02:33.409
Yeah, it's still an experimental idea.
00:02:38.849
People like Sootoro, who gave the type-checking session in this conference, are working on some kinds of relatively useful type-checking tools.
00:02:46.470
Also, someone from JetBrains is working on generating runtime type information from test execution.
00:02:52.680
The goal is to generate prototype or return type information from actual runtime type information. Therefore, by combining these technologies, we can have something closer to TypeScript's definition files.
00:03:07.590
So they'll be gradually introduced, partially just statically typed.
00:03:14.400
You're thinking about it in terms of using these tools to validate our code base, like checking if our code is doing what it's supposed to do. But maybe we won’t bother to do all that type checking once we get into production because it might slow things down and isn't necessary.
00:03:36.030
Okay, we’ll start over here.
00:03:41.699
Yes, about how much time do you spend coding versus project management, conferences, and things like that? Do you feel like it’s a good combination, or do you miss being less responsible for all the things that go along with Ruby?
00:03:59.069
The ratio I try for is half programmer and half designer, but the actual ratio is more like 20% programming, 20% design, and 60% doing something else.
00:04:12.989
This includes reading, writing emails, Twitter, or something like that. So, yes, I should have been more productive.
00:04:28.849
I know the feeling. I think another good follow-up question is about the core team. Since we have a lot of new people— could you give an idea of what the core team looks like right now?
00:04:42.449
I know a lot of new people see many contributors doing various things, and I know that back in the 1.8 days, that wasn't true.
00:04:53.339
So, who’s on the core team now, and who do you feel is doing a lot of the work these days?
00:05:02.759
We don’t have the same kind of related membership on the core team that other projects do. We granted some contributors commit privileges; we call them committees.
00:05:39.419
So we have nearly a hundred committees for Ruby. Many of them have some role in the community— like maintaining documentation or improving reference documentation.
00:05:45.900
We do have a very active group of contributors working on the core language itself, as well as the implementation of the virtual machine. There are less than 20 active contributors directly involved with that.
00:06:11.370
Once a month, we have a Ruby work meeting in Tokyo, and we usually have about ten or so people attending.
00:06:43.569
Hi Matz, it appears that you’ve become a podium and you’re looking well. So, on the design side, what other language designers do you find interesting right now and what's interesting about the work they're doing?
00:07:05.110
Yes, Elixir and TypeScript are interesting. TypeScript has static typing for dynamic languages, like Java, while Elixir focuses on distributed and concurrent programming.
00:07:12.639
I can ask a question about concurrency and actors. Yes, I can. I didn't talk about that this year, but we have three major challenges for Ruby 3.
00:07:36.009
The first one is performance, which is essential. The second is concurrency. Back when I started Ruby over 25 years ago, we only had one CPU per computer, so concurrency was all about context switching— it wasn’t for performance reasons.
00:08:15.669
These days, multi-threading is common for performance, but this creates more challenges like deadlocks and race conditions because we have multiple cores. We need more modern models for concurrent programming.
00:08:54.899
Koichi Sasada is working on something called fibers, isolated execution bodies over the threads.
00:09:01.920
You can create new fibers, which are separated objects that can only communicate with each other through channels. You can send objects between different fibers, but only immutable objects can be passed between them.
00:09:40.199
So, Quincy is working on that, but I'm not sure about the latest state of its development.
00:10:10.559
If you had total access to break everyone's code, what's one thing in Ruby you wish you could change? And what's the one thing in Ruby that you're most proud of?
00:10:25.380
As for pride, I am proud of the invention of blocks, which is a vital concept in programming. I regret many things, but one of the biggest regrets is the threading model.
00:10:46.720
Although it seemed interesting at the time, it hasn’t proven to be the ideal concurrency model. In the beginning, I borrowed too many ideas from existing languages like Perl, which resulted in many odd variables.
00:11:31.010
Threads were introduced in version 1.0, and I think it was a significant addition.
00:12:02.970
So, what’s your motivation for deciding which features to ship for the next Ruby version? Is it still just that Christmas is coming?
00:12:56.090
Well, time frame is one motivation. I feel like Ruby is one of my children. As a parent, it’s natural to nurture them, so I’ve been nurturing Ruby for the last 25 years.
00:13:31.669
The ongoing conversation is whether I want to continue this forever. Yes!
00:14:11.810
One of the languages you mentioned for inspiration is Elixir. What version of Ruby are we going to introduce macros? Erin has asked this question every RubyConf for five years.
00:14:45.540
The first answer is never; the second answer is that we have a library, a creeper, which can generate an abstract syntax tree from Ruby or other languages.
00:15:07.350
With the code-generating library from the AST, we can separate the AST from the code generator so that you can create AST from your favorite language.
00:15:22.860
Then, the code generator will use Ruby as the backend. In that sense, you can utilize your version of Ruby or even add macros to your own language. That’s my big idea, but I don’t know if that’s feasible.
00:15:53.580
People have talked a lot about static types in recent years. What do you think about interfaces? Like, being able to say this method must take an object that responds to these methods?
00:16:04.830
We are going to add static type checking that behaves like structural typing, rather than nominal types. Such static type checks will function as interfaces like those in Go and Swift.
00:16:36.429
We won’t have nominal checks like: this method takes a string, indicating it can only accept strings.
00:17:02.970
It’s heartening to see many Japanese Rubyists here.
00:17:09.689
Thank you to everyone who came such a long way. I often see Japanese Rubyists separated from other Rubyists, and I wish we could interact more.
00:17:24.130
Learning Japanese comes to mind as a first step, but what can we do to better understand the Japanese Ruby community?
00:17:47.509
Would you like to be an ambassador for the Japanese Ruby community, or do you think someone else should take that role?
00:18:18.180
I think Nobu would be a better ambassador; he loves to talk.
00:18:35.030
Akira has been a good ambassador for several years. It would be nice to find ways to bring Rubyists together in these conferences.
00:18:58.810
The community spirit among programmers is similar worldwide.
00:19:04.740
However, one point to note is that Japanese people tend to struggle with English, creating a language barrier.
00:19:36.740
But we all speak Ruby!
00:19:51.009
Several years ago, Hidetoshi gave a presentation, and during the Q&A, questions were asked in Ruby. A person stood up to ask a question in English, but Hidetoshi didn’t understand.
00:20:23.440
So they translated the question into Ruby. At least we have Ruby in common!
00:20:53.311
Do you consider yourself a C programmer who writes Ruby?
00:21:09.670
Definitely! But I enjoy creating and improving Ruby.
00:21:27.240
My C code relies on the Ruby runtime and garbage collector.
00:22:05.210
Last year, Shopify decided to implement mRuby in their site, allowing execution of untrusted code.
00:22:21.200
They created an environment where hackers could submit bug reports, and I fixed hundreds of issues—this made mRuby much more stable.
00:22:53.840
We’re planning to change the virtual machine's structure and binary format to reduce memory consumption.
00:23:13.050
Some embedded systems have very little memory, like 100KB, where the memory footprint for Ruby is still too large.
00:23:33.067
Therefore, we want to optimize memory so we can broaden the range of devices that can run Ruby.
00:23:47.630
How does the core team onboard new members? What does it take to be a core team member?
00:24:04.540
To get commit access, you should submit a few bug reports or fix existing issues multiple times. If you can prove you’re an excellent contributor, I will grant you commit privileges.
00:24:24.031
We don’t have strict membership criteria; your relationship with other committee members will help you out.
00:24:50.750
I have a follow-up on the main trunk of Ruby. Will it stick with Subversion, or is there talk of moving to Git?
00:25:14.550
As of now, we still use Subversion, which feels ancient. But we rely on existing hooks.
00:25:39.659
Most core developers use Git on their side. They download everything using git and manage branches in their local environments.
00:26:05.420
They’ve been pushing changes to Subversion while keeping their local repositories updated. It’s a way to avoid pressure about moving to any system.
00:26:35.580
We also have mirrors of the Ruby repository on GitHub, so contributors can check out the Git repository there.
00:27:00.170
However, we won’t use GitHub’s issue tracker for integration into our mailing list.
00:27:18.740
Earlier this week, you discussed Ruby's nice philosophy. Do you have any particular advice or requests for individuals that might help reflect that philosophy?
00:28:09.990
While I’m not perfect or nice every day, I suggest that as members of the Ruby community, you should try to embody that nicer attitude.
00:28:21.210
A little faking it can lead to actually being nicer!
00:28:43.080
When transitioning from Ruby 1.8 to 2.0, we had a long release candidate, and there were breaking changes.
00:29:11.000
As Ruby 3 nears release, will there be a similar leaning towards buggy release candidates, or will you change that methodology?
00:29:36.450
There isn’t a concrete plan yet, but the idea of having a 2.9 as a test phase before Rio 3 might be worth considering, learning from the inputs to fine-tune our approach.
00:30:24.950
We strive to introduce new features while keeping compatibility with previous versions as much as possible, although small breaking changes may still occur.
00:30:45.190
Key arguments are a potential area for changes, as we want to improve usability while reducing the impact on the user experience.
00:31:02.400
When you're home and not at conferences, do you attend Ruby meetups?
00:31:33.000
I seldom attend the meetups as I'm not a very social person, but I do enjoy talking with others for the inspiration it brings.
00:32:07.010
I’ve been recognized on the street a few rare times, usually the last any of them were during conferences or bookstores.
00:32:23.310
Surprisingly, it’s never happened many times; maybe about four instances altogether, with inquiring minds wanting to learn programming.
00:33:06.890
I appreciate those moments, answering people who have an interest in Ruby!
00:33:20.468
Thank you for joining us today. Let’s give a round of applause for his insights!