InfoQ

Interview

Recorded at:
Recorded at

Ruby Creator Yukihiro "Matz" about Ruby, Functional Programming and Programming Languages Design

Interview with Yukihiro Matsumoto by Sadek Drobi on Jan 25, 2010     Download: MP3

Community
Architecture,
Ruby
Topics
Language Design
Tags
Haskell ,
Functional Programming ,
QCon ,
Clojure ,
QCon San Francisco 2009 ,
Actors
Summary
In this interview, Yukihiro Matsumoto talks about programming languages design and decisions he had to take while designing Ruby. He also discusses other programming languages including Haskell, Scala, Python and Clojure. While talking about Ruby language and functional programming, Matz explores opportunities of integrating some of FP into Ruby and imagines a purer IO approach for it.

Bio
Yukihiro Matsumoto ("Matz") best known as the chief designer of Ruby, is a software engineer and open source evangelist in Japan. He has worked on several open source products, including cmail, the emacs-based mail user agent, written in emacs lisp.

About the conference
QCon is a conference that is organized by the community, for the community.The result is a high quality conference experience where a tremendous amount of attention and investment has gone into having the best content on the most important topics presented by the leaders in our community. QCon is designed with the technical depth and enterprise focus of interest to technical team leads, architects, and project managers.
I'm Sadek Drobi, I'm here at QCon with Matsumoto Yukihiro. Matz, can you tell us what you've been up to lately?
In your talk today, you mentioned that if you recreate Ruby, you'll include more functions and laziness into the language. Can you talk more about this?
Can you tell us a bit about that part of this lazy evaluation that looks interesting for you for introducing for example in Ruby, if you want to rewrite it?
You are talking about lazy lists, the yield keyword of other languages. Languages like to mix object orientation with functional programming, for example, Scala. There is, at some point, a clash between the 2 paradigms. Sometimes they don't mix really well. What do you think about this? Do they mix well, like treating functions as first class citizens in that language that is object oriented?
In Erlang, all imperative programming is in actors; that's the kind of thing you are talking about, right?
What are the other programming features that you are really interested in. After you designed Ruby, you thought "Oh, that's pretty cool!"
Do you think Actors and STM is a way to go for concurrency in Ruby? Would it be easy actually to introduce them?
Would you be able to introduce it as a library or do you need to have features (syntax)?
Is it a product that is going on now or you didn't start such a project?
Several times you mentioned Haskell and you seem to be interested by Haskell. Haskell, as we know, is a statically typed language, one of the most statically typed languages. What do you think of types?
So, it's not as flexible as dynamic typing?
Don't you think that type inference can add a bit of flexibility?
You still have the compiler error problem messages. It's quite interesting. Have you programmed before in Haskell? Have you done any programming in Haskell?
Is there anything than laziness that you would like to incorporate in Ruby?
Even Haskellers, they tell about laziness that, when you try to optimize performance, you need to be careful about it. When you design a language, you come out with some features - with a language as the way you imagine it and people try to use it and sometimes use it not exactly in the way you imagine it. Sometimes, it gets some good or bad surprises about the language. Did you have any kind of such things with Ruby after you released it?
Does it surprise you the way people use Ruby?
This is a surprising use of Ruby. Ruby is mainly about object orientation and now we mentioned Actors model that could be also a part of Ruby, which is a different paradigm than objects, we talked about functional that could be another paradigm. Do you see other paradigms that you like about programming other than object orientation, functional and actors?
Which is an old one, as well.
The language you mentioned you feel interesting was Haskell. What other languages that you see interesting? You mentioned system transactional memory, what do you think of Clojure, for example?
Lisp purists don't like Clojure because it has much more syntax than Lisp. What do you think of these debates of purity and all this crazy stuff that we hear from communities?
In the same way we can talk about Smalltalk. Smalltalk has a lot of dialects and some people like to say that Ruby is almost the dialect of Smalltalk. Do you agree with that?
What do you think that is success factor of Ruby, if we compare it to Smalltalk? What is the feature that you really think it gives importance to Ruby?
Earlier, you mentioned the actor's model could be added to Ruby. Do you think that it will make people use Ruby even more when they have a predefined model for concurrency and imperative programming?
The problem with the programming language is it starts somehow simple and then you start adding features and the problem is that you cannot delete features. Are you having this problem yet on Ruby or for now everything is under control?
Do you mean accidental complexity?
You are not for functionalities that mix?
It's very hard to figure out to add only functionalities that don't mix, right?
Today, there are several implementations of Ruby - on .NET, on Java and even others. Are you satisfied with these implementations?
Do you see some things that added by other implementations, you would like to put in your own implementation?
Are there any ideas in that you took?
What about the J Ruby and Iron Ruby? Did you see anything interesting in the implementation of these?
Sometimes designing for performance gets against usability sometimes. Did you have this kind of issues "I should go rather performance than usability"?
With Ruby being integrated with other platforms, on the JVM or on .NET, people tend to use things from these platforms, which makes the program not very portable, right? What do you think of that? It gets you really specific to some VM, which means you can't use any of the implementations.
What was the hardest feature to implement in your Ruby?
Ruby is a dynamic language and there are a lot of dynamic languages out there like PHP, Python, JavaScript. What do you think about these other dynamic languages?
It's a matter of identity, like where you find yourself best.
When you design a language, you have this line, where on the right you get add in syntax and on the left everything is libraries. Ruby is somewhere in the middle. When you make decisions about what to put in a library and what to put in a syntax, how do you reason about them?
Just enough to make the syntax familiar or the program familiar for everyone. I will ask you the last question, which is what's your favorite programming book? Or your favorite book.
show all  show all
  • This article is part of a featured topic series on QCon
Link for the book "The Beautiful Call" mentioned by Touko Vainio-Kaila Posted Jan 26, 2010 12:41 AM
Re: Link for the book by Sadek Drobi Posted Jan 26, 2010 2:04 AM
STM? by Laser Lu Posted Jan 27, 2010 2:05 AM
Re: STM? by Andrey Melnik Posted Jan 27, 2010 3:30 AM
Mistranscription? by David Ongaro Posted Jan 31, 2010 8:06 AM
  1. Back to top

    Link for the book "The Beautiful Call" mentioned

    Jan 26, 2010 12:41 AM by Touko Vainio-Kaila

    Yukihiro Matsumoto mentions "The Beautiful Call" to be a great programming book. Unfortunately I couldn't find links to the book with a brief googling or searching at Amazon. Can anybody provide a link?

  2. Back to top

    Re: Link for the book

    Jan 26, 2010 2:04 AM by Sadek Drobi

  3. Back to top

    STM?

    Jan 27, 2010 2:05 AM by Laser Lu

    What does STM stands for here? Can anybody help? Thanks;-)

  4. Back to top

    Re: STM?

    Jan 27, 2010 3:30 AM by Andrey Melnik

  5. Back to top

    Mistranscription?

    Jan 31, 2010 8:06 AM by David Ongaro

    "Clojure does not provide a lot of new things, it just came in the specs and the behavior and it was quite a good language, though."

    Doesn't he said "I just skimmed the specs and the behavior"?

Educational Content

Rails in the Large: How Agility Allows Us to Build One Of the World's Biggest Rails Apps

Neal Ford shows what ThoughtWorks learned from scaling Rails development: infrastructure, testing, messaging, optimization, performance.

Stuart Halloway on Clojure and Functional Programming

Stuart Halloway discusses Clojure and functional programing on the JVM in depth, and touches on the uses of a number of other modern JVM languages including JRuby, Groovy, Scala and Haskell.

Orion Henry and Blake Mizerany on Heroku

Orion Henry and Blake Mizerany talk about the technology behind Heroku and the benefits of the new add-on system.

Security for the Services World

Chris Riley presents security issues threatening service based systems, examining security threats, presenting measures to reduce the risks, and mentioning available security frameworks.

Navigating The Rapids:Real-World Lessons in Adopting Agile

This talk investigates technical issues encountered when moving to an Agile process.

Codename "M": Language, Data, and Modeling, Oh My!

Don Box and Amanda Laucher present “M”, a declarative language for building data models, domain models or external DSLs. Don Box's demos show some of M’s features and latest changes of the language.

SOA Manifesto - 4 Months After

It is four months since the SOA manifesto was announced; InfoQ interviewed the original author’s to get insight into the motivations and the process behind the initiative.

Memory Barriers and JVM Concurrency

This article explains the impact memory barriers, or fences, have on the determinism of multi-threaded programs.