"Languages ​​for human beings to feel programmed well" What does Ruby aim for?



Mutomu Yukihiro who asserts that "mood and nori is important to software development", Mutama Yukihiro who has developed Ruby himself by paying attention to that, grew up as a programmer, created Ruby, and continued development Was it?

Ruby now has 1 million users as Japan's first open source software. Matsumoto, who has received numerous awards and is still looking for change and growth, at Mr. Matsumoto, Japan's largest game developer conference "CEDEC 2011", has a long history of Ruby's development from his youthful days and the concepts, It also showed off to the future prospects. "What Ruby development taught meThe entire contents of this lecture entitled "From below".

Matsumoto:
Nice to meet you, Yukihiro Matsumoto.


NowadaysRubyAlthough it became famous for being a person who developed it, Ruby itself is rather than software of the game, it is as pleasing as using it as a server to move it. I myself like being good at games, or seems to have been using Ruby in the game industry, apart from such things, I feel relieved. Today, I will talk about Ruby and its development related story without discussion by saying "What Ruby development taught me."



Talking about self-introduction instead, I started programming about thirty years ago, at that timePocket computerIt was released. It is made by Sharp in about 1980, but my father bought this. It seems that it was about 40,000 yen at that time.


My father likes gadgets that is nothing in the industry, he seems to have bought this for use in company calculations, office calculations, but I was bothered by me, a junior high school student at the time. with thisbasicI started programming as a trigger for my programming.



When doing programming, using computer, what kind of thing to do, various people programming with games and calculation as their own purpose, but I started dividing "Programming languageI was interested in things like that. The earlier pocket computer can only enter 400 steps. It's about 400 lines at the moment, so I can only enter a very small program, but while I was doing basic with that kind of thing, I learned that there are programming languages ​​other than basic in the world and I learned a lot started.


At that time the personal computer was expensive. At least not at the high school student's pocket money can buy. I was not raised to a wealthy house as expected, so I could not say "just buy me a dad, a personal computer". Because it exceeds 190,000 or 200,000 yen by money of those days, it is about 400,000 yen in terms of the current price. I can not say that I bought it for my son's hobby, and then I rely on books. Unfortunately at that time the Internet did not exist (generally), so at the bookstore "ASCII"I bought a magazine such as.


Recently computer magazines are lacking, but at that time there were 4 large microcomputer magazines. I bought it every month in the range of pocket money and I had a young age gathering information such as "When I get my computer someday I do this" nearly 30 years ago.


At that time, I got the most interest in my programming language. As I mentioned earlier, the first thing I knew about basic was that in the worldPascal,C,LISP,smalltalkI discovered that there are programming languages ​​such as such, there are not many such articles, but when I found a magazine on which I purchased it I read as if I was devouring.

And when I was a high school student I bought a book called "Introduction to Pascal" and learned Pascal. Of course Pascal compiler etc. certainly doing 60 thousand, can not buy by pocket money of high school student. There seems to be a language called C, but the C compiler is "Whitesmith C" which is even higher at 198,000 yen. Then you will only read the momentum book.

I read the Pascal book from the beginning to the end and, as a matter of course, I can not do it because there is no computer, but when I finished reading I felt like I understood something like "I was Pascal Master." Pascal had various functions not found in basic such as local variables, structures, and recursive calls.

Every time I encountered such a new concept, I first thought that basic was enough, there are really many programming languages ​​in the world, each one providing something better than the previous one , I realized that "This is interesting" I thought.


For every programming language in the world there is a person who designed it thinking that "programming like this would make it more interesting and better." For PascalNicklaus WildIn the case of C,Dennis RitchieYaKernighanI thought that it might be good to make it by myself, knowing that it was made by Americans.

But as I do not have computers and internet, I do not have much information, so I picked out the notes and almost all the things like "I thought"Chunichi diseaseHowever, I started writing. Like "I wish I could start writing programs like this".

But naturally there is no knowledge or experience, so after designing the language by yourself, design it systematicallyProcessing systemIt can not be implemented. It was really sealed in the note as well as the delusion of Chunichi Disease. In the meantime, when I came back to my parents' house I tried searching for that note but inevitably I could not find it, that idea has been lost forever.


I am currently a judge for programming contests targeting young people under the age of 20 in recent years, but recently young people do not become fooling quite foolishly, but they are a high school student but it is easy to design and implement one programming language and apply for the contest There are people to do. Maybe because I know that I am a judge. They realize that I was a high school student only when I was a high school student and realized what I could not make it realized so I will apply for the contest so I think that the future of young people is bright now but as for myself, Because I did not have experience or information, I could not move it to reality.


Usually, I am going to get computers, calculate and play games, help my university's research, but the means and purpose have already been turned up around here. A programming language as a means for making programming and a means for telling the computer what he / she wants to do is supposed to be the original form, but it is the purpose of making and thinking about the programming language itself gradually, Once it could be made it was supposed to be OK for anything else.


In such a high school days when I was delusing things like "I wish I could write a language someday", I was thinking about what kind of programming language I wanted.

To linguistics "Sapier-Wahf HypothesisThere is a thing called linguistics here is not a programming language but a natural language spoken by humans, but "the language influences thinking of people who speak it" is the theory.


For example, there seems to be words 1, 2, and 3 expressing numbers in indigenous languages ​​in the outback of the Amazon. More than that is "lot". Then you can not build mathematical concepts for those speaking the language. In addition, the language of Eskimo seems to have 80 to 90 words expressing snow and ice. Then when you try to talk about snow and ice, you can express very rich with Eskimo language. If you think about it, there are various words such as May Rain when expressing rain in Japanese, so if you use Japanese to express rain or weather you may be able to express more emotional think.


These are Sapier-Whoaf hypotheses, but I feel that this works more effectively in programming languages. In other words, when I started programming, I started with a very primitive programming language called basic, but there was no concept of local variables, so if you do not manage your stack yourself, I could not even do it.

I could not understand the idea of ​​recursion at all when I read "Pascal introduction" that I talked about a while ago and I could not understand it even if I read the page that explained it three days. "It took about 3 days to realize that this local variable is different from the local variable at the time of reading when reading this way, so it can be like a loop repeatedly".


Then in school math lesson "Inductive Legal DefinitionI remember when I studied that I realized that this is recursion. In other words, my thought was restricted in basic language and I could not understand that concept, but I learned that I can understand new ideas by learning a language that can be recursed as Pascal It is that.

Because there is such a thing,Turing theoryIn fact, "almost all programming languages ​​are capable of describing all kinds of algorithms, so they are equivalent in computation theory", but in practice the cost and time to get results depending on which programming language is used is It will change. Or it may be that the idea is helped.

Therefore, it can be said that choosing which programming language is directly linked to that person's productivity. That makes a lot of difference between "the stress when programming", "how much time can you develop software," "what amount of description you can write it?"

Ruby has a lot of attention and highlighted points for each programming language, but among them is "focusing on development efficiency", "more easily" "more efficiently" "feeling more Well "aim to be developed.


"Feeling" is an area that has not been emphasized in software development for a long time, but software development is a very human-oriented field if you think about it. Software is feature-based, there are a lot of things you can pay attention to what you can do,benchmarkLike the strongest ", the premium will be taken like an excellent one. But in software development, we can not ignore what the developer feels during development.


Even though you may have experiences in software development, when you hit the PC's keyboard and are stepping forward, when the phone rings and you make a call, it seems like energy like the one in your head has gone away Then, after five minutes the phone is over and it comes back to the PC, there is no more energy, and productivity will not rise at all after that all day. also"Feeling"And"Nori"Is very important to the productivity of software development and" what kind of programming language to use "can actually have an impact in some cases.


As for what "mood" is important for software development, when you say the best feeling, "When you developed a program as you thought" "When you feel like a versatile one" "You do not have to endure it At least "I feel well when it's time to worry" etc.


For example, "When you write such a program you can respond to expectations" and "When there is not much gap between the code you write what you want to realize".


The rest is "It is not amazing, is not it amazing time, like when writing such code, this kind of software was working" like "When you feel a versatility".


When I am about 6 years old, I am worried about the feeling that "I can do anything" and "I can not do much if I do it" but I feel troubled, but even in the world of programming languages, my enthusiasm for "I want to make a great language" Even if there is actually, when I try to make a language by myself, I feel disappointed when I feel the gap "It was pretty shabby due to technical restrictions and limited ability and knowledge". When programming languages ​​or libraries help it, I think that it is surprisingly important to be able to feel like "I could do something more easily than I thought, I am not terrible."

Software development has something to put up with, but when you do not feel "patience", "pain" or "irrationality" it can be developed quite well.


"What is it!It is time to not shout out to the sea. If you are consistent with the view of the world provided by programming languages ​​and libraries, then you do not have to worry when it is clear.


When you are feeling well programmed, the program will be concise, and the person making it can feel such an illusion as if you are a great programmer, a delusion, but you can feel that kind of thing.


Fred P. BrooksA person wrote "Mammon Myths"There are" Brooks' law "that the amount of software that programmers can develop at a given time is constant regardless of languages" in one of the quotations of the book "


This is "if one programmer has the ability to develop 500 lines of software a day,assemblerEven if you write itC ++Even if you write itJavaWriting in Ruby, you can write 500 lines a day "means. Of course there is no theoretical basis, but as a rule of thumb.

If a person could make 500 lines with Assembler and if Ruby could make 500 lines, it would be quite possible between 500 lines of Assembler and 500 lines of Ruby to do something, in some cases 100 to 1000 There is a difference of twice. In other words, by choosing the appropriate library and language, the apparent capacity of the programmer may differ by 10 times, 100 times, 1000 times. So selecting an appropriate language is very important for productivity.

Taming about this, I write a lot of programming-related essaysPaul GrahamAmerican writing an essay saying "conciseness is power".

What is that, in 1954FORTRANA programming language named "programming language" was first created, and since that time, the programming language has evolved little by little over a century and what came out later corrects the bad things of the previous one and provides something new While growing, it has evolved. And Paul Graham's argument is that it has "evolved in the direction of how to program the program concisely". In fact I think that there is such a tendency.


I will introduce with a boring example, but when factorial is calculated, the factorial of n is 1 × 2 × 3 × ... × n with all the products of natural numbers less than or equal to n.


If you write programs that calculate this factorial in the Java language that everyone likes, it becomes like this.


There is no change in anything. Personally I've been a C programmer so write it in C: It is slightly denser than Java and can be written more concisely.


This is written in Ruby like this.


It is more concise and this is calculated by induction definition, but there are few unnecessary things when calculating factorials. In other words, the factorial calculation of n is 1 when n is 1, otherwise it is the factorial of n and n-1. Well there is end, though. This is the factorial of 6. There is really nothing extra.


On the other hand, C is "include inclusive" or what is not in Ruby is written. When it comes to Java, you get angry whenever you write "public static". Of course Java has the convenience of Java.

Calmly thinking about why you write this is because compiling complains if you do not write. "I do not know that". But we do not work for compilation but I think that "machines should work for us." Writing this to satisfy compilation is quite humiliating as a language designer for me. Because I wanted to write only essence.

I have not used it much recently, but there are pseudo codes in algorithm textbooks. For example, if you write a sample program in Java, when you write an explanation with Algorithm, since there are a lot of things not related to the essence such as "public static void" just before, "I concentrate only on essence, artificial language, Let's write an algorithm in a virtual language. "

But if you use algorithms in such a concise and virtual language, it is best if it moves as it is. I want to make it as close as possible to Ruby and recentLLIt is becoming the design policy of the program called called.

In addition Ruby can do this as well. It inserts a multiplication sign into the column of numbers from 1 to n. Returning to the definition just before, it means that 1 × 2 × 3 ×, the one with the multiplication sign inserted between 1 and n, the process of multiplication is plugged in, but this will be on. At first glance it is confusing, but it is very concise if you know where to insert from 1 to n. You get the same result when you ride the 6th floor just as before.


That is why we are aiming for "concise expression". This is the description of the web application framework named Ruby's Sinatra. This get is a request to get a page named / foo under the domain name of the webpage, if "browse" is chrome it is "using Google Chrome", otherwise it is "in Chrome I am using a non-browser. " Although it is a little impossible to say that it was possible to write one web application by itself.


About "abstraction", this is Java, C, and so on. "When for i = 0 and i is 100 or less, i is incremented one by one and the loop is turned". A trained C programmer sees this as "Oh, it loops to 100?", But "I initialize to 0" "compare one by one" "increment" Information such as information is not part of the essence part of the contents. From the viewpoint of advanced abstraction of data, the contents of the implementation "how to loop" is leaked out. It is "leakage abstraction".


Of course Ruby can write like this. But, if anything, Ruby repeats 100 times and repeats it 100 times. There is no extra information. Ruby is an advantage that can be represented abstractly in this way.

There are quite a few times when the convenience of human beings and machines conflict, but I think that the attitude that "human beings do any effort to make computers move fast" is old. Now that human beings are the husbands, I want to impose work on my computer as much as possible, and for that I am working on Ruby's policy.


In the era more than 30 years ago, the computer was common, and so-called personal computers did not exist. If you are a large computer, it will be charged in a computation amount or time, so if you calculate uselessly, the computer usage fee will be taken as much.

At that time, as lease fee of a computer with good performance takes about 100 million yen a month as then, it is angered by seniors if you do bugs or do wasteful calculations like infinite loops. "I think that it cost me a lot on the amount of calculator you used uselessly," he says. In such times, it seems that there was a thing that "human beings make efforts to the extent possible, computer makes efforts not to do useless calculation".

Now I can buy things with better performance than the supercomputer of that era at an electric appliance store in the neighborhood for 100,000 yen or less. The performance of the notebook computer I bought for 100,000 yen has a calculation function of dozens of times and hundreds times of the supercomputer of 30 years, 40 years ago. Then it is ridiculous to save computing power. I think that it is becoming becoming "the era when human beings use computer hardly any problem no longer".

Nevertheless, since many programming languages ​​are designed in the old age, it seems to be found here that the convenience of the computer is pressed on by humans as in the past.

To give one example, you want to calculate the factorial of 200. You can use the Java version earlier, but this is an example of C. When factorial is calculated in C, the factorial of 12 is 479001600. The factorial of 13 is already funny. It is 13 times the factorial of 12 and it does not match. Furthermore, when factorial of 14 is calculated, it decreases from the factorial of 13. And if we calculate factorial of 200 we say 0.


Everyone who understands this is what this is going on. It is true in Java and C, but there is a limit on the size of int. in this case32 bitWas assumed. A signed 32 bit integer can only be represented up to a little 2 billion. Beyond that it overlaps without saying anything. It is a terrible story.

Because the concept we are considering is not the concept of "below this" or "end of integer at this point", it is computer convenience that the factorial of 13 can not be calculated. However, I do not want to be forced to accept such circumstances even if it will be in the 21st century already. So in Ruby you say that you want to calculate the factorial of 200, it calculates properly and it comes out properly. The problem is that no one knows whether this is the case, but it surely matches (laugh).


When a human says that he wishes to calculate the factorial of 200, the computer says, "I understand that if a human wanted a factorial of 200, I think that I do not need such a big number, but properly calculate. I think that this is one example that "we prioritize human circumstances rather than machinery 's convenience." I think that the accumulation of such things leads to "a concise program" and "a good program."


Of course, even in Java you can factorial of 200. If you use the biginteger library, you can calculate the factorial of 200 as well. But, as written in int with a simple Java version just before, this means that we do not see it, but because the computer has the meaning "This is a signed 32 bit integer", so that human beings "factorial of thirteen I'd like to calculate the factorial of a larger number, so I have to rewrite this with biginteger. " More things must be worrisome.

However, in the Ruby version, if you give exactly the same program to a factorial of 200, "If a human says that you want to calculate the factorial of 200, I will calculate it as it is". The accumulation of such things leads to the development of a "pleasant program".

Ruby is paying attention to the development code, and it matches the demands of the era that I want to develop it more easily. The performance of the computer has increased considerably and "productivity rather than performance" "mood of the developer is important" has become.


There are lots of software that I really have to develop and how to write good ones at a low cost is important, but there is a very important factor that has not been emphasized so far so how do individual developers feel How to develop "" How can developers develop in a good mood "?

In the case of Ruby, I designed it myself as a programmer and designed and implemented it with the feeling that "I want to program in this language". Then you can see the feeling of the people using it.


When I made Ruby for the first time, I never thought of anything that "programmers all over the world feel the same way as me". But when it was published on the Internet surprisingly many people, people around the world felt the same way, I thought that it feels good using Ruby so it spread only this way.

So I thought that what programmers think in mind unexpectedly does not change. Of course it is natural that there are people who have different hobbies, "I feel better in Java" "I feel better with Pascal"PythonIt is better to think that it is better if you prefer ". I think that it is good to develop it using languages ​​and tools that make me feel most, the most productive.

The problem lies in whether Ruby can develop it using Ruby if he feels good. Originally I think that programming is really fun. I have been developing software with various languages ​​and various tools until now for thirty years, but I think software development is really fun. There is also pleasure that creates something new, pleasure of communicating with users and people who have developed about software that we have made, and a kind of puzzle that finds bugs.


Besides, unlike other manufacturing, the software does not suffer from physical restrictions very much, so it can be developed as far as your own imagination and with very few people.

It is almost impossible to get a car that I designed by myself when I was interested in cars and thought that I wanted my favorite car. Manufacturers make cars as industrial products, and may not pass vehicle inspection even if made. In theory, it may not be impossible to make a car with all the features designed by myself, but it is very tall.

But in the case of software, making software as far as imagination can reach as much as I thought is not really serious, and what I need is almost to make PC.

Of course there are things that are not fun. It is still not fun to say "the bug is silent", "the deadline has come close", "the project flames up". One solution is "how much push work on your computer".


Moore's lawAs the performance of computers gets better and better, I managed to work on somehow by pressing work. Then Ruby isOpen SourceI am getting better with the help of various people as software, but I think that requests will come out including that part as well.


I often hear "Why do not you sell Ruby?" When you receive an interview.


Ruby is treated as open source, free to copy, free to use and no permission to use it, so we can not count the number of users accurately, but according to an estimate it is said to be roughly 1 million people. By the way Java is said to be around 8 million people. If they get about 10,000 yen per person, for example, they will be 100 million people in 1 million people and they are going to get a lot of money.

But when I made Ruby, I thought, "This is really good software so let me get about 10,000 yen from the user", even if Ruby is good software, for examplePerl, Python,PHPAnd there are many other languages ​​already open source, so then it will be "It might be nice but I do not pay 10,000 yen", the number of people interested in Ruby has run out and it has expired and I I think I am doing other things that is not Ruby now.


A lot of people have developed Ruby as an open source, many people are happy using Ruby, some of those who thought so helped me develop Ruby, and directly or indirectly Because it supports me, after all I am getting enough income to eat rice just about Ruby relations. So there are no plans to be Bill Gates at all, but by distributing Ruby in open source spreading Ruby, I support my life as a result.


Thanks to the development of Ruby in 1993, recognition has been steadily rising. I started making it in 1993, opened to the public in 1995, the first book came out in 1999, the first English book went out in 2000. From this neighborhood I have far exceeded my imagination.



In 1997, I got a job in place of business cards and resume that I am making Ruby. In 2000, Ministry of Economy, Trade and Industry's "Unexplored softwareIt was adopted as the 1st project of the project, and in 2004 the "Ruby on RailsA famous web application framework named "Ruby 's number of users and its name recognition got swollen up all at once. In 2005, IPA, Ministry of Economy, Trade and Industry Ministry of Contracting Organizations contributed to the spread and development of open source software "OSS Contributor Award"We got it.


Since around 2007 Ruby's popularity rose at a stretch,Rakuten Institute of TechnologyBecome a fellow,Ruby AssociationThe organization called "Ruby Engineer Certification Examination" began as a part of its activities.


In 2007 same year "Nikkei BP Technology Award Grand PrizeWe also received the Minister of Economy, Trade and Industry award. I still took it in jeans at that time.


And in 2009 I became an honorary citizen of Matsue City. Because I lived in Matsue city, I usually thought that honorary citizens would get a person not living there, so when asked "What is it", honorary citizen system of Matsue city is not so I thought, "I have ever lived in Matsue City, I will give it to those who are strongly related", so I refuse it. Matsue City Honorary Citizen No. 1 afterwards if I look up on the Internet laterLafcadio Hearn (Koizumi Yakumo). I wonder if it is OK to put them together.

Below the website of Matsue cityList of past honorary citizensThere are some good figures who started with Lafcadio Hearn and contributed as mayor in the past and written at the bottom of it as a programmer, I think that Matsue city is strange But.

In the meantime, visiting professor and "Manufacturing Japan Grand Prize"Japan Innovator AwardI received such as.


I got here as well as "Nikkei BP Change Maker 2010", and this poster, photographer took pictures, but this is a subway fishing advertisement.


I think that the person who saw was terrified by fear.


Since this yearherokuI am indebted to the company called. Given the title of chief architect, what we do is just to develop Ruby as usual. However, heroku,Platform as a ServiceIt is a company that is easy to deploy, is a state that you can deploy that web ATM service with just one GID command, and you can add as many nodes as you like, just by having a web console. Well, it is more expensive than the innode, but that kind of service is easier than deploying. I am indebted to such a place as well.


ChasmAccording to the theory, at the stage of technology development, players are classified as "Innovator" "Early Adapter" "Early Majority" "Rate Majority" "Raggard".


A person named innovator jumps when the new thing first appears. It is like a pillar. When you see the innovator doing various things, the people of the early adapter say "Oh, it's a funny technique, let's try your hard".

Looking at such a successful Early Adapter, people with relatively innovation in the majority accept it, finally it seems that people with heavy weights will accept technologies for the first time, but the people of Raggedo Is a theory that users are classified in five stages: sticking to old technology and never adopting new technology.

There is a big groove called Cismism between this early adapter and Early Majority, and it is the theory that most technologies disappear without being able to overcome that chasm.


When I published Ruby in 1995, about 200 users in the first week responded by e-mail, I made a mailing list and forged the community for the moment. Venture companies and micro enterprises began adopting Ruby around 1997.


In the meantime I did not sing and it did not fly, but since the appearance of "Ruby on Rails" in 2004, the situation has gradually changed, a slightly larger SME and IT companies began to adopt it from 2007 is. Since around last year, for example, cloud service has improved and "Ruby on Rails" has become everyday, so the rate at which rate majority employees adopt Ruby has increased.


Then it reached the Early Majority about 2007 and finally went beyond the chasm. So from now on, I think that Ruby will not be lost for 5 or 10 years, so I think that it is a bit relieved.

Thanks to being able to go to the latter part of the chasm, I was able to make foundation companies and become standards.


The Ruby association finally became foundation foundation this year,JIS X 3017In the form of Ruby 's standard was also formulated. In 1993 when I began making Ruby, it was a story that my own language could not appear in JIS. Since JIS has the right of fast track of ISO, it is trying to cover it to ISO as it is.



Like this, Ruby gets over the chasm and there is not much worry that it will go ahead, but I do not want to stop as it is. There is a proverb "There is no rolling stone moss growing", but since there is no moss growing on the stone that continues to roll, "Calm down, so that moss grows and the appearance can be in good condition like a Japanese garden, From the traditional meaning that it is useless to move "and the United States and others are the center, but from the place saying" It will not be okay if I grow a moss "" From the mold "I always keep on moving and it is always fresh There are two meanings that you can not do.


For technology companies, I would like to adopt the meaning behind them. "Ruby has passed beyond the chasm, I do not have to worry about losing ahead, but I want to continue to develop in the future".

The open source community to which Ruby belongs is roughly like that. In other words, there are so many open source not just Ruby in the world,LinuxAnd Ruby,MySQLAs for famous things such as famous things like you do not have to worry about being lost in the moment, if you look for something not famous at the hem, it is really dead and dead.

I went to the middle, but "Developer gave up", "I lost interest", "I have been replaced by another project" and so on. There are lots of things that have disappeared, those that have discontinued, those that have fallen into conception.

As for what to do to survive open source software, I think that it is very important to continue to provide changes and continue to provide challenges. I think Ruby will continue to change as an open source software and continue to provide challenges.


When thinking about the future of Ruby, Moore's Law which said a little while ago became important.



LSIHas doubled in two years, and the performance of computers has doubled in the year and a half to two years in proportion to this, for about 40 years now. It is an exponential increase.CPUThe degree of integration can also be understood by looking at the green side of this graph, but this is a logarithmic graph so it is almost straight. So it's roughly logarithmic, is not it?


However, it is slightly worrisome, this CPU's clock, performance, and this is power. This is the difference between performance and clock. CPU performance has stopped since 2000 years. The number of clocks of computer that can be bought at the electric machinery store was also sold for 4G etc, but recent computers do not have the high number of clocks so far. It is roughly between 2G and 3G. In that sense clock growth has stopped.


The reason is that the performance of the CPU is skipped, it is also the physical limitation that the quantum theoretic limit comes out due to heat and degree of integration, and the CPU accuracy enough for consumers to do most things comes out It is sometimes said that the demand for majority is saturated.


Of course there are areas that are missing no matter how CPU power is in the world. For example, or a super computer, but is like a CG and rendering, in order to common people to watch the web or look at the e-mail will be sufficient enough in a normal CPU, Then request saturation by the CPU of Performance may be overpowering.

That does not mean we can not stop progressing in the future. I think that future progress will be web, distributed, parallel, multicore etc, but for such things,CloudYaMapReduce,Functional programWhetherDistributed architectureI think that place becomes important.



I think that there is a place where it is hard to say that Ruby is necessarily strong around here, so I have to catch up. More specifically, it will be "wider", "faster", "more dispersed", "more firmly".
"Extensively" means, for example, I want to make Ruby move with smartphone, PC, supercomputer, etc.


As part of that researchHPC (High Performance Computing)There are people who are students of the University of Tokyo who are studying this, but this is Ruby'sType inferenceIt is a study to compile to C once and then move Ruby.


Just replacing Ruby with C does not improve performance at all. It is simple, so some people did it in the past, but this research content can be compiled into ordinary C because it contains type inference. If it goes well it means that you can write it in Ruby and run about 10% slower than C without writing any type information.

Since Ruby has been pressing work on machines all the time, it is actually slow compared to Java and C ++ in the same product. But when you compile like this, it means "You can write easily as Ruby, and you get a good speed if conditions are met."

On the contrary, I think that I want to try harder. In the area where built-in and regular expressions appear, although not all, the performance of the CPU has increased, the OS is also loaded with Linux, etc., there are many cases where there is plenty of software margin. The percentage of software configuration is getting larger as the ratio of configuring the system than that of hardware, and the number of cases where software productivity is required is increasing more and more.


Rather than developing from top to bottom with C or C ++, rather than developing in a language like Ruby in cases where speed and real-time nature do not matter so much, let's try to develop truly critical parts with C or C ++ as well Splitting has been carried out, and cases increasing the demand for software productivity have increased.

"I want lightweights that can be used in such places", and I am working with those in Fukuoka. I would like to make Ruby usable even in areas that have not been delivered so far, such as embedded or HPC.


Once Ruby was said to be slow, but that has reasonable reasons, I would like to improve the performance using this technology.


After that there are keywords such as parallel / distributed, cloud and so on, it becomes more free, so I would like to respond in the future.


Then the language itself has also improved, adding keyword arguments, adding a function like Classbox, enabling Enumerable programming etc. to write more robust programming, even if the development team can cope I believe.


Finally, since people in the game industry may be concerned, I will explain a bit more about lightweight Ruby. We have developed code names with the code name RiteVM, and we have grammar that conforms to JIS, ISO, and everyone who has decided during this time.


And about libraries, it almost conforms to JIS and ISO. "Almost" does not require I / O in the first place because there is no input / output in some built-in areas. It is useless to add I / O to it, so it can be trimmed.


Briefly I got out of BrazilLuaThere are very nice languages ​​of saying that it is built into various applications and used for small devices, iPhone and Android applications have frameworks made with Lua, and there are also many commercial games It is embedded.


However, although this is very good as a processing system,Logical languageIt was solid when I saw itObject-orientationThere is nothing, there are painful things. So, in Ruby there are quite a lot of requests that I want something like Lua, and I aim for the neighborhood.

I was conscious of incorporation from the beginningAPIHaving a relational baseVirtual machineI have an incremental GC. People who want real time property will try to incorporate them.

C99Because it is written in Basic, it is basic portable, it does not mean "It does not work unless it is a specific platform", "It does not work under Windows, Linux, MacOS" but aims to run even in environments without small devices and OS .


Since RiteVM is composed of components, for example, you can "separate the compiler". I first wrote a program in Ruby, compiled it when debugging was completed, completely converted the byte code, then unplug the entire compiler and compiled itBytecodeIt is possible to link with only the virtual machine and ship it.


The library is also the minimum "minimal" that Ruby can run, "standard" almost satisfying JIS planning, and this is only a schedule at all, but now it is CRuby or "full" with functions close to the so-called full set of Ruby We are aiming for a three-stage composition.Fiber (coroutines)YaAsynchronous I / OAlthough I have not done it at all yet, I want to do it from now.


Future plans are to release closed beta to companies participating in this project in October 2011. In March 2012, we plan to release it in beta with some open source license at the end of this fiscal year.



So I talked about it on the run. thank you for your attention.



In addition, all the slides of this lecture can be seen from the following.

What Ruby development taught me

in Coverage, Posted by darkhorse_log