 Our next speaker, while he gets set up, I will introduce him. His name is Matsumoto. He is the creator of Ruby. He has not spoken at as many conferences as Nathaniel, but he's spoken now at nine of them, I guess. We heard him this year at Ruby Kaigi, which was an excellent good time. I'm hoping that some of the things he talked about there he will also talk about now, but you never know with Mats. So welcome, Mats! Can you hear me? Can you hear me? Yesterday we had a great keynote from Dave Thomas, and we had the keynote speech from DHH himself. So I think you guys get sick of keynotes. So I'm going to finish it very soon. Anyway, I believe I had some kind of responsibility to give you something. So anyway, I'm going to give you a small keynote. So acknowledgement. So last year we lost Gideku and White Lucky Steve, but we love them. And why? I believe he's alive. He's alive. So I really want him to come back again, but anyway, why if you listen, please come back. And I love him. We love him. You know, how many times we mentioned him in the presentations in the conference? Yes, we love him. So today's menu, and we are going to... This is a 10th annual international Ruby conference, so it's a special conference. I'm going to tell you about something about history and the future and the diversity. So this is 10th. The Ruby conference was started on... Starting on 2001, which is right after the 9-11. At that time, the anthrax was very popular. At the state of the Florida, the first conference was held in Tampa. So everyone around me in Japan told me, you are not going to there, so you will die. I was very excited about the first international Ruby conference. So I took risk and went there. And since then, in every Ruby conference, but one, I gave a keynote. And the first conference was, as I said, held in Tampa, Florida. And the subject of the keynote was the human-oriented programming language. So at that time, virtually no one knows about Ruby. And the conference was, I don't know, 30-something people, very small, very small people. And I give you what? And I must have his very small person, anyway. So I gave a presentation about the being human-oriented programming language. And, well, in a sense of the tooling complete, every language can emulate other languages. So in future-wise, every language could be equivalent. But there should be a difference between languages. So what is that? So the policy and philosophy and design is focused on human or machines. Those are the teams for the 2001. In 2002, the conference was held in Seattle. And the team was the B-minor, B-cool. And at that time, the Ruby was very minor. And we were very minority. But the cool things happen from a very small community or from the minority. So even we were small in numbers. But we can be cool. And we try to be cool since then. And next year, we had a conference in Austin. And I had a keynote for the Visions for the Future. And how Ruby sucks. I know Ruby is not perfect language. So I tried to fix the defect of the language for years and years. So I give you the ideas. I gave a presentation about the ideas to improve Ruby here and there. And next year, we had a conference in China to Virginia. And I missed the conference. I'm sorry. And Brad Cox, who originally designed Object C, gave a presentation at the conference. And I've heard that he didn't tell anything about Object C, but Java and education. But they told me that that was a very good keynote there. And at that year, I had a baby. So that was the reason. Thank you. Yeah, six years ago. Next year, we had a conference in San Diego. And I give you similar things and visions for the future. And the wild and weird ideas, basically similar things. Fixing bugs and fixing defects of the language and trying to improve the language even better. In Denver, Colorado, I talk about the bike shed. You know, designing the language is a very interesting thing. I just attended the session about the rail. And he said the designing compiler or implementing a compiler in the language is not that difficult, but very interesting. And I wholeheartedly agreed with it. So in this talk, I try to encourage you to have an aspect of the language designer. The next year, I'm going to talk about the language model. The programming language is very important in the programming field. And in Orlando, I explained about the reason behind Ruby. The basically similar thing to the DHS gave you this morning, but in a poorly organized way. Last year in San Francisco, I talked about the 0.82 language. No language can fit every situation. So no language can fit all the situation. But there could be some language that can fit, that can fill 80% of the situation from the Pareto principle. So the Ruby trying to be that 0.82 language. And this year, New Orleans, I'm going to talk about the future and diversity. Future and diversity. So first, I'm going to talk about the future, which is Ruby 2.0. And I talked about Ruby 2.0 again and again and again. So maybe you're sick of it, but I have to. So please stand. So Ruby 2.0, we just started the work on Ruby 2.0 finally, after releasing Ruby 2.192. So this is a little bit more concrete than previous ones. We are going to have the trace and the method combination and the keyword arguments and namespaces and a few other new features in Ruby 2.0, which comes sometime in the future. A trait is a collection of methods used as a simple conceptual model for structuring object-oriented programs from Wikipedia. What's wrong with modules? We already have modules, so what's wrong for them? So it doesn't have conflict detection and conflict resolution, and it is weak for tree modification, and they don't have any method combination. So name conflict, if a class and included module has a method of same names, so it is conflict, but that could be intentional or accidental. So it is difficult to tell the difference. It is intentional or it is accidental. So a little bit, yeah, don't read, feel. If you have the module, two modules, which has the same attribute address, and in a class, we include two modules. So if you call that address, if you access the address attribute, which is effective. So the inheritance precedence is the Japanese, which one is the Japanese-American? The Japanese-American comes this way. The Japanese-American, Japanese-American object kernel. So the address defined in Japanese has a precedence, but it's kind of confusing. So we will introduce the method named mix instead of include. So mix can detect and resolve conflict. So mix injects the current snapshot into the other class and module so that it raises error when named conflict. So unless you resolve it explicitly, that I mean the two module, American and Japanese, has the same attribute named address. So if you include them in a single class, so the address attribute defined in Japanese module has a precedence. But if you use mix, the mix detects the attribute conflict and raises the error. And if you can resolve the conflict by explicitly renaming it. And the modules are very weak to the modification afterwards. So in that case, the module M1 has included in class C1 and defined module M2. And then include M2 into M1. So even though the M1 has an ancestor, the M1 includes M2, the C1 doesn't include any M2 just because at the time of inclusion, the included hierarchy does not include M1, M2, I mean. So this is kind of inconsistent, but it's kind of implementation reason. So the mix copies attribute, so tree modification afterwards does not affect any time. So officially does not affect. So it's not useful though, but it's consistent at least. And to implement some kind of method combination, the rails provide the alias method chain, but it's kind of ugly and fragile to multiple wrapping and we want to wrap method. So we discussed with some other guys and we decided to introduce the prepend method. The prepend put the module before the client class. So method defined in the class will wrap method of the same names. So if you define the module full that has the method full and the class bar, which has method full, then prepend full module before the class bar. So calling the full method, the full defined in module full, then full defined in bar. You know what I mean? So the first full method wraps the other. So you can override, override the method afterwards. And we will finally have the keyword arguments called like this, one to step by two to 20 or something like that. And define any method definition we can write like this, then step by there, goes like this. It's mere expanded hash argument at the end. This is not special. 1.9 has this syntax for a long time. So it's just the automatic composition like this. And namespaces. In the previous session, the Shugo Maeda, which is from Japan, presented by the class box session. And which is kind of encapsulation of monkey patching. Monkey patching or freedom patching is global modification. It's useful and it's powerful and at the same time it's dangerous. And if we can restrict the effect of the modification in certain namespace or some certain package, so we can enjoy freedom without the risk of breaking other programs. So it embodies freedom, but not dangerous. So there are some features in other languages like name the class box, second name space, or refinement or whatever. The concept is like this. Ruby has open class, so you can modify the method afterwards. In this example, we define the slash to make it 1 divided by 2 makes it rational. But with a new refinement feature, so you can define a module as a namespace. So refine integer to define redefine a slash method. So in that namespace, which is from module to end, the division operation gives the rationale. But out of scope, the 1 divided by 2 is integer division so that it returns 0. And using refinement, you can use the using method to declare the use of the namespace. So in that module, the division is redefined. And yeah, this is too complex, but it's just a concept. You can provide the real private method of refinement. So the frequently asked question for, yeah, I prepare the questions for you. Yeah, FAQ for the future is when will they be available? This is a very great question and Ruby 2.0. When will Ruby 2.0 be? Christmas. Let's talk about diversity. I love the diversity. As Dave Thomas said, diversity is very important things. We need diversity to keep going. Steve Jobs criticized Android that it's not free, but segmented or fragmented or whatever. And then iPhone, yeah, iOS or the system provided the Apple is integrated. Yeah, great word. But still we need diversity. But at the same time, I very sympathize with Steve. You know, having diversity has cost. We divide effort, so we have a lot of implementation so that we can... Our resource, our human resource is divided into MRI and Rubenius and JRuby or the Macruby or something. So I have kind of mixed feeling about diversity, but I'm truly involved with diversity, so I'm not going to reduce them. So even though it requires cost. And then Ruby language has a specification and implementation. And then we try to make up a specification in human readable way and the machine readable way. So RubySpec defines the basic behavior of the Ruby language among the implementation so that Rubenius, MRI, JRuby all try to conform to the RubySpec. And at the same time, we try to define the human readable definition of the language and we are going to submit it to ISO. Yeah, can you believe that? My hobby language, after 17 years finally submit to the ISO. And for implementation, we have a lot of implementation like the CRuby, JRuby, Rubenius, Maclab, IonRuby or Macruby, Ruboto. Well, we have so many implementations. Yeah, a few years back, the Python people criticized us. Ruby is very complex language so that there could be no other alternative implementation. And they had the C Python and the Ion Python, they had two. And we have so many. Yeah, I love diversity. And I wanted to fill the niche like a JRuby for Java environment and a Macruby for Mac environment, Maclab for Jamstone and Ruboto for Android or something like that. So if there is a niche, so we are trying to grow to fill in. So just because I really, really love diversity, I try to add one more to embedding. Can you believe that? So it's called write, the newcomer, the right-wing implementation of usable subsets of the Ruby language. The target is embedding. Small devices like digital appliance and the application like gaming devices and more. So, yeah, it's not the time for our digital TV runs on Ruby, but in a few years, maybe, three, four, five years, so the computers embedded in the digital TV will be powerful enough to run Ruby. So we have to prepare it beforehand. So we are working on some companies, some universities and some other guys, some government people to make up a fund to start a project. Then it's an embeddable Ruby. Think of Lua. Lua is very popular among embedding. A lot of games embed Lua or some devices embed Lua. And Lua is a great implementation, but as a language, especially object-oriented language, it's, yeah, anyway. So the basic principle of the write implementation is the components and the configurable. Components, by components, I mean that the implementation will be a combination of the components, like a puzzle, virtual machine, garbage collector, debugger, and the class libraries, so that we can, if the device is very small, so we can rip off the puzzle and evolve so that the compiled, the intermediate representation and the virtual machine, combine one to make up a very small executable on a small device. So we can remove some of the class libraries to reduce the size of the program. And by configurable, I mean configurable to a minimal set of features required for that particular application so that, you know, basically the embedding system is one-off, so you don't have to have a universal behavior between platforms. So, for example, no file I.O. needed for small devices, like if the small subset of Ruby runs on, say, PalmPilot, so it doesn't have any I.O., file I.O. So by configurable, I mean that you can choose the size of the floating point, arithmetic, double or float, or the size of Fixnab could be into a long, or long, long, long, or you can configure the character in coding to ASCII or UDF-8. And the requirement for the right implementation is it should be portable, and the minimal requirement is done as C and C99, and it should run on PCs and real-time OS and the free-standing environment, and it should use less memory than, say, CRuby, MRI and URL, and it should focus on latency rather than throughput. So, in implement detail, not detail, in implementation summary, it used the register-based virtual machine and 32-bit world code and floats the immediate, and possibly generational incremental mark-and-sweep card refreshing. So, by right, the right can be easily embedded into the application, like the game or the editors or something, and it could be used for small devices like the embedding environment, say, digital TV. Actually, I'm working with a big appliance company in Japan. I don't think I can disclose the name of the company, but I believe you know the name of the company. It's a very big company. And it can be used to the concurrent, so assign virtual machines for each thread, so it could be opened up to a very interesting possibility for concurrent environments. And in addition, Professor Tanaka from Kyushu Institute of Technology tried to make up the Ruby chip. And by Ruby chip, I don't mean something like Java chip, the chip that runs the Java bytecode. It's a MIPS-like SPGA CPU with a few instructions added that helps method lookup or garbage collection marking. So it's not really a Ruby chip, actually, but you know, marketing requires the term Ruby. So, I pick you again. But it's a part of Japanese government funded two-year project. So we highly expect it to be released before the end of the fiscal 2011 year. That means March 2012. If you don't, that means the project failed. So I try my best to avoid the project failure. And will Ruby open source? Yes, probably under MIT license. But we need a business model for the satisfied government. Yeah, just because it's a government funded project. So we might choose GPO Plus commercial video subscription model or ISKOL, but I don't know yet. But anyway, it will be open source in some way, in any way. Will Ruby replace MRI? No. Ruby will not be full-featured universal implementation. It will be target to the embedded and configurable environment. So for example, the PC environment or to create the web application, the MRI or JRuby or even Rubinius is suitable. And it is kind of like a domain-specific implementation, like Roboto for Android and Ride for embedded device, Ride for small devices. How about CAPI for Ride? Ride will have a very different CAPI from JRuby, just because, you know, the CRuby API is pretty good and very convenient, but not very suitable for the environment like the multi-thread environment or the embedded environment. So we will design and provide a new API, a totally different API. And currently we have no plan to provide compatibility layer like the Rubinius does. We will write support M17N like encoding like in Europe, Asia, Japan, China, India or something. And then, no, you have to configure a single character encoding from ASCII or UTIP-A in compile time. So no, no, no multi-lingualization. And will write support native sets? No. To use thread, you can use multiple VMs per native per set. Write may support fibers in the future, but currently we have no plan to support fiber neither. Does write run faster than YAR, JRuby, Rubinius, et cetera? I don't think so. But maybe on some benchmark due to float, floats are immediate value in write. So, and so we will try to make it fast, like choosing the register based virtual machine in the pocket into the 32 bits. And maybe on some benchmarks, it runs faster than YAR, say YAR, but we are not going to provide the JIT for write or nor some, you know, hackish, hackish technique. Like we have to stick to the C99. So I don't think the write will be a super fast virtual machine, but you know, it will have, it should have some kind of modest performance considering the devices. How can I contribute to write? Wait until we make it open source. We will open it on GitHub. Ooh! And that means I have to learn Git. Write sounds familiar for some of them. Originally, write was a code name for the first Ruby 2.0 virtual machine before write. In the presentation, and a keynote presentation in the conference held in 2003, we presented about the conceptually same thing, like a keyword arguments, a keyword combination, and well, like a name, selector name space, and a code name write at that conference. But year after, we gave up the write project. And YAR was, YAR was originally an independent project, but it was so good, so we merged it in instead of write. So I gave up the code name write so when I started the new interpretation of the small Ruby, and the code name was resurrected. So it's calling from Ruby lite. Do you resign from CRuby? No, but I have spent less time on CRuby recently anyway. And I will keep being a maintenance of CRuby and above all, above it, above all, I will keep being active as a creator of the language and a leader of the community. I will. So I think that's all of my presentation. I started creating the language, designing the language Ruby in 1993, 17 years ago, and at that time I expect Ruby users to be less than 100 all over the world. But, you know, in this room I have, I don't know, 800 people? 700 people? And the Ruby users worldwide become, I don't know, maybe close to million. It's incredible. And it's amazing. It's not my effort. You know, if David Thomas did not find the language named Ruby from the Far East, if he just bored with the language or if he didn't write the pickaxe books, or if David didn't choose the Ruby to next language to PHP, if you don't participate in the community, so Ruby is nothing. So I, from bottom of my heart I really thank you.