Ruby 3

Q&A with Matz

Q&A with Matz

by Evan Phoenix and Yukihiro "Matz" Matsumoto

The video titled "Q&A with Matz" features a session with Yukihiro "Matz" Matsumoto, the creator of Ruby, during RubyConf 2019, moderated by Evan Phoenix. The session is a traditional Q&A format which allowed for questions from both online submissions and the live audience.

Key points discussed include:

  • Overall Conference Reception: Matz expressed his gratitude for attendance and acknowledged having missed some sessions but looks forward to the recorded materials.

  • Pride in Language Features: Matz highlighted the significance of blocks in Ruby, noting how they enhance code readability. He also praised the creation of RubyGems, reflecting on its origins with David and Chad.

  • Syntax Origins: A discussion on the syntax for blocks revealed that brackets were introduced before the 'do...end' syntax, which followed due to community feedback.

  • Future Ruby Versions: Looking toward Ruby 3, Matz elaborated on planned removals of certain trivial features and emphasized the importance of compatibility to prevent a migration issue similar to that seen between Ruby versions 1.8 and 1.9.

  • Potential Language Changes: Matz was queried about macros and confirmed that although he hasn’t changed his position, there’s a possibility of building macros through the Abstract Syntax Tree (AST) introduced in Ruby 2.6.

  • Pipeline Operator Discussion: The pipeline operator, initially presented at RubyKaigi, faced controversy regarding its functionality compared to Elixir’s operator, leading to a lack of consensus on its implementation.

  • Exploration of Functional Programming: The conversation touched on functional programming concepts like pattern matching and immutable structures, with Matz encouraging proposals from the community.

  • Design Philosophy of Ruby: Matz discussed the love for readability and consistency over adding arbitrary operators, mentioning the potential exploration of Unicode operators. He shared insights into the design aspect of programming languages and the need to translate his book on language design into English.

  • Personal Anecdote: Matz concluded on a lighter note by sharing a recent experience about his dog going missing but thankfully being found after 48 hours.

The session offered valuable insights into the evolution of Ruby, Matz's philosophical approach toward programming language design, and encouraged community engagement in the language's future development.

00:00:12 Where were we? Nashville, oh thank you, yes.
00:00:18 It's been a long couple of days now, so thank you for coming.
00:00:24 This is our traditional Q&A session. The way that we'll do this is that we solicited some questions online.
00:00:30 I will also sprinkle in some of my own questions, and we have microphones set up for you to ask your own questions.
00:00:36 If you have a question, you don't have to wait for me to finish; you can go ahead and line up.
00:00:42 I'll call on you at the mic and we'll have a conversation to see where it takes us.
00:00:48 So, how was the conference?
00:00:53 Oh, it was a great conference, thank you. I was a bit tired this year and know that I missed many of the sessions.
00:01:06 Still, I'm looking forward to watching the recordings.
00:01:12 The questions we received online are really good.
00:01:18 I think we'll probably do this more in the future as well, allowing people to expand on their questions in written form.
00:01:29 Looking back at Ruby's history, some of these questions will sound familiar, but I think people like asking you the same questions year after year to see if they get a new answer.
00:01:42 As a core team, is there a language feature that you are especially proud of? Something that has stood the test of time?
00:01:54 Conversely, has there been anything in the Ruby community that has impressed you, like a library or a product?
00:02:11 Yes, the invention of blocks in Ruby is remarkable for me. It is a very small change, but it makes the code readable and is quite extensive.
00:02:25 As for libraries, the creation of RubyGems is very impressive. The very first version of RubyGems was written by David and Chad when they discovered it.
00:02:37 I was in that room at the time.
00:02:43 My follow-up question relates to the two syntaxes for blocks.
00:02:50 Which syntax came first? Did 'do...end' come first or did the braces?
00:02:58 The braces came first.
00:03:07 Then I thought another way of doing this might be nice.
00:03:13 Interestingly, before the first release of version 0.5.995, I released that.
00:03:19 My close friend, who is a Ruby godfather, claimed that mixing 'end' and the brace was kind of confusing.
00:03:29 So I enhanced the syntax for the 'do' format.
00:03:43 As we look towards Ruby 3, there are a couple of questions about things you might consider removing.
00:03:52 You've discussed the big major version upgrades in other languages. Are you considering a significant transition with Ruby 3?
00:04:06 Between versions 1.8 and 1.9, we had a huge jump in compatibility.
00:04:13 This was necessary, but it required the community to migrate to version 1.9.
00:04:22 Many stayed on version 1.8 for a long time.
00:04:27 I don't want to see a similar tragedy with Ruby, and I feel the same about the Python community.
00:04:39 Are there things you’re thinking of removing in Ruby 3?
00:04:58 We are going to remove several trivial features, such as safe variables or certain dollar variables.
00:05:09 It took us several years to remove these features, and once they’re flagged, you will receive warnings before they are entirely removed.
00:05:30 Are we looking at Ruby 2.7 this year? Are we planning Ruby 2.8 or Ruby 2.9?
00:06:00 As I mentioned in the keynote, there will be releases up to Ruby 3.0 next year.
00:06:11 Someone asked if you've changed your mind about macros in Ruby. Have you?
00:06:36 No, I haven't changed my mind, but we exposed the AST in version 2.6.
00:06:43 So you can build an AST from Ruby programs and generate bytecode from it, which means you can create some kind of macros.
00:07:02 So you're saying there’s a chance?
00:07:09 Yes, there’s a chance.
00:07:10 There may also be pre-processing hooks before parsing.
00:07:14 Some people have mentioned the idea of a Ruby transpiler.
00:07:22 This could allow for experimenting with new language features.
00:07:38 Feel free to come up to the mics if you have questions.
00:07:48 Is the pipeline operator going to come back?
00:07:55 I wouldn’t say there’s a strong chance.
00:08:05 This could provide an interesting view into how Ruby core decides on experiments.
00:08:26 I introduced the idea of the pipeline operator at RubyKaigi this year.
00:08:41 We implemented it experimentally and had several discussions.
00:08:51 People expected the pipeline operator to behave like Elixir's operator.
00:09:06 This was surprising and led to a lack of consensus on its behavior.
00:09:18 Another question revolves around functional programming and the design considerations that led to certain Ruby features.
00:09:31 What prompts a feature like the pipeline operator? Was it an observation of Elixir or other languages?
00:09:39 Yes, we considered adopting functional programming features, including pattern matching.
00:10:03 We have also discussed immutable structures.
00:10:13 If you have any proposals, feel free to submit them on the issue tracker.
00:10:40 It helps if you can describe the basic idea clearly to aid discussion among core developers.
00:11:00 Thank you for bringing pattern matching into Ruby. I'm curious if there are plans for pattern matching at the function level.
00:11:15 Currently, Ruby does not support defining multiple versions of a function like Elixir does.
00:11:34 This would require significant changes since Ruby already has optional arguments.
00:11:50 You mentioned that Perl 6 uses emojis for some operators. Would you consider adding emoji operators in Ruby?
00:12:22 We can expand into Unicode operators, but we will have to consider their usability.
00:12:36 Ruby has a fixed set of operators. Did you ever consider allowing arbitrary operators?
00:12:51 In some languages, you can add arbitrary operators, but I believe that can make programs more cryptic.
00:13:00 Maintaining readability and consistency is critical to Ruby’s design philosophy.
00:13:20 For those interested in creating their own programming languages, several good books exist, but they generally focus on implementation.
00:13:39 There is not enough focus on the design aspect of programming languages.
00:13:49 I did write a book about language design, but it’s currently only available in Japanese and translated to Korean and Chinese.
00:14:10 We should definitely consider translating my book into English.
00:14:25 As a final bonus question, someone asked about the future potential of combining M Ruby and Ruby. Are they going to remain separate?
00:14:45 I believe they will always stay separate, targeting different domains.
00:15:07 Every implementation has different priorities and focuses.
00:15:21 Someone enquired about your dog. How's he?
00:15:45 Two months ago, my dog went missing for 48 hours but I’m happy to report that we found him!
00:15:57 Thank you, everyone.