みなさん、ありがとうございます。このキーノートをスキップしてくれましたが、彼らはそれに関することができません。なので、エムーヴィの話をしなければなりません。私たちはバルソーナで、グレーシリーとグレーコンフレンズを紹介します。とても怖いですね。このスキャラスティを決めるキーノートを作っています。このキーノートの名前は、このキーノートの名前は、松本雪の喜席。そして、カンジンのキャラクターは、このキャラクターは、ポイントリー。このキャラクターは、オージジェムこれが行くそしてこれがワイズリだからペイントリーからサマンがワイズリそういう風にアルファベット私の名前はユキヒロー、マッツモードル私の名前はユキヒロー、マッツモードル私の名前はでもボタンはマッツを呼ぶことができますそれにインプレミュレーションモービーランゲスのNRiモービーランゲスのマッツモードルでも何かがそのため、初めのRubyプラギュメントの文字は1995年の時に公開されました。そのため、私が自分のプラギュメントを作っていたのです。しかし、この年間、プログラムがよく優秀になったのは、1.9年から新たなVirtual Machinesが早くなったのですが、コアライバリーが多くの新たなVirtual Machinesが多くの新たなVirtual Machinesが多くの新たなVirtual Machinesが多くなったのです。リシエル・ルビーは、2.1年から2.2年から新たなVirtual Machinesが多くなりました。実は、その年間、Ruby自身が多くの新たなVirtual Machinesが多くなりません。I'm no longer the core developer of MRI.So, let's call it C-Ruby.Just because now, the Ruby programming language mainly implemented in C programming language.So, the C-Ruby is the Ruby.So, when you think of the language and the implementation,probably many of you, instead of some JRuby guys or the Brian here, think of the C-Ruby.But we have some different implementation of Ruby that I call AutoRuby.That stands for the alternative Ruby implementations.So, about 15 years ago, at that time, there was no alternative implementation of Ruby and no alternative implementation of Perl.And then, we had Python and Jpython back then, later renamed to Jython.So, back then, many people claimed Ruby implementation, Ruby syntax is too complex to implement alternative implementation.So, I agreed with that.Just because now, the Ruby syntax appears to be simple and try to be natural.But in reality, it's quite complex.So, it is too complex and it is too implementation dependent.So, I myself didn't believe that someone come up with the alternative implementation.But 15 years later today, we have no alternative implementation of Perl programming language except for Perl 6.And then, we have Python and then PyPy and several others.Is Jython still alive now?I don't know.But in Ruby, we have, I don't know, I can't believe that we have bunch of alternative implementations.Like JRuby on top of JVM, which is a great platform for the programming languages.And Rubinius on top of C++ and the people behind Rubinius is pretty computer science geeks.So, they read through the science papers.So, they pick up the ideas and put into the Rubinius.So, the Rubinius itself is pretty great ideas, full of great ideas.And RubyMotion is a LLVM ahead of time compiler of Ruby programming language.So, you can compile the Ruby into native applications on iOS devices like apps.So, and recently, they try to support Android as well.So, that's great.So, then RubyMotion is based on Mac Ruby, which is on top of the OS 10.And we had, we have, I don't know, Iron Ruby, which is on top of .NET from Microsoft.And we, I recently haven't heard about them much, but we had Maglev, which is Ruby implementation on top of the gemstone, small talk virtual machines.And it ran quite fast.And then, we have, we have some newcomers, like Topaz, which on top of PyPy, is a jitting language in virtual machine platform, primarily target to Python, of course, from the name.You can tell from the name.And then, Topaz is Ruby implementation on top of PyPy.So, Opal is the very newcomer, which compiles Ruby program into the JavaScript.So, you can run Ruby on top of your browser.Quite nice.And then, this is all run, Cardinal, which is, which is on top of Parat.Parat is a virtual machine for the Perl 6, which is way back.And then, it was experimental, but it was quite nice try back then.So, it is kind of easy to implement it, 80% of the Ruby programming language.But it is quite difficult to fully, maybe 99% compatible Ruby.And then, some people, like people behind JRuby, people behind Rubinius,did that great task.I'm proud of them.So, today, I'm going to talk about yet another alternative implementation namedMRuby on top of C programming language, the background.In the year of 2009, I talked with the engineers from the embedded systems field.So, I want to make, I want to see Ruby everywhere.So, we have dominated the web, almost.And then, but nothing out of the fields.Like a research computing, in research computing, Python is much stronger.And then, we have R to compete.And then, recently, we see Julia.And then, or even on super computing, so very few people useRuby in super computing.And then, on the smaller devices, for example, apps.So, many people use, say, Objective-C, or Java, or C, or something elseto develop apps on the mobiles.Or even smaller computers, like, you know, the Raspberry Pi,and they are doing all.So, you do use the other language, Ruby.So, then, we talked, discussed about the future of embeddingprogrammings with engineers from the embedding field.So, they told me, they are having the fastest CPU on smaller computers.And then, they have bigger memory.And then, the ratio of the software in their systems is getting biggerand bigger.So, the software is getting more and more complex.So, they need to develop more and more software effectively with lesstime, and less money, less people, and with smaller team.So, they claimed, we need a weapon to be productive, effective, new tool, and new way of development, new language.So, we concluded, we needed to, the people in the embedding fieldneeded to learn from web, or test driven, community driven, and open source.So, these movements are not really big in embedding field, just because, you know,it's not that their way.They want it to be stable, they want it to be conservative, just because, you know,you cannot, it is very difficult to upgrade the software in the systems, in the hardware.So, because of that, they want to be moved slowly, and go the very stable way.But the things are changing.The lot of devices are on the net, connected to the net.So, you can, now you can easily upgrade the software, just like apps, or just like web.So, we predict in 10 years from 2009, so the way of the embedding development will be changed just like web.So, I have done a small survey.So, the CRuby is not good for embedding system.It's just too big, and it doesn't have good embedding API.So, CRuby's API design is designed to be enhanced Ruby interpreter, or virtual machine.So, you can add new features, tasks, or you can link the new library to add features to the interpreter.So, you can write your application in Ruby.But the people in the embedding field want to implement their systems in C or C++, thenenhance their systems with the more flexible language, like Ruby.So, the architecture is upside down.So, the CRuby is not suitable for that purpose.No embedding API, too much POSIX, so the implementation of CRuby is rely on the POSIX.So, the POSIX available on the POSIX platforms, like Linux, Windows, and Mac, it doesn't care.But for embedded systems, most embedding platforms are not POSIX aware.So, CRuby is too much POSIX.So, JVM does not have no embedding API, and it's huge.And then, it's too much Java.And then, you have the micro-edition for embedding system.Java micro-edition is, yeah, you can use Java micro-edition for embedding system.But it's too small, I mean, API-wide.So, micro-edition is not really the Java we imagine.So, I don't think we can run JVM on top of the Java micro-edition, which even doesn't have the proper garbage collectors.So, Rubiness is not that much good for embedded systems.It's bigger.It's quite a memory extension.So, no embedding API, and it consumes much memory, and we need a new one.So, but how can we manage?So, I asked some people about the new idea, and we got a grant from a Japanese government segment named METI, which means the Ministry of Economy, Trade, and Industry of Japan.So, for me, it's not about money, it's about motivation.So, our team got a grant for a two-year project, so we got to finish it within the two years.So, that's my primary motivation.So, since, I mean, 2009 to 2011, we worked on the alternative implementation named MLB.So, yeah, we need to be responsible when we got money.So, we got MLB.MLB stands for Matsumoto's Embeddable Minimalistic Modular Ruby.Matsumoto means my family name, but you may know that Matsumoto is pretty popular, a common name, a common family name in Japan.Actually, we have three Matsumoto's in top contributors of MLB.No, we are not relatives.And embeddable.So, we designed an embeddable API just look after the Lua.So, Lua is a programming language designed from, came from Brazil.And it's pretty good for embedding.So, embedding in the devices, embedding in the applications, embedding in games.So, I look, I designed the API after Lua API.And the minimalistic means requires less resource and a focus latency than throughput.So, to accomplish that, we designed incremental generational garbage border for MLB.The modular means you can separate the unneeded component of the language when you built MLB in the systems.So, compiler and runtimes are modular.So, you can drop the things that you don't need.So, like classes and paths and call generators and then MLB itself is very configurable.So, like MLB use, you can define the compiler option to use float instead of double.Or, you can embed your value into the floating point numbers by using the technique named non-boxing.Or, you can use the instance variable implementation for segmented listsfor your implemented instance variable implementation instead of the hash.And it runs on the various platforms.It only requires C99.So, everywhere you can run C99.So, you can run MLB.It runs on Linux, OS X, Windows, or on iOS, Android, or even on bare metals.Like on top of Arduino.The bigger one.So, it has very flexible architecture.You can execute your program from a file or you can execute from your root program from a string.So, you can execute your program from the compiled binary file.Or, you can load your compiled binary from your compiled C embedded strings.So, syntax-wise, MLB is 1.9 compatible.So, we don't have no keyword arguments in depth.We don't have refinement.We don't have complex relational big num numbers.And the biggest difference from CRuby and MLB is like this.We are 1 divided by 2 will become 0.5.If the integer overflows, it goes to the float instead of big num.So, for MLB, the float and integers should be more compatible than CRuby.So, you can grab the source code of MLB from GitHub.So, to compile MLB, it's quite easy.Like a git clone, then if you need it, so the build config file, then rate test.By compiling via rate, you can get static library and MLB as a sample interpreter.So, MIRB is IRB for MLB.So, interactive MLB.MIRB is a bytecode compiler, so you can compile Ruby code into binary.Then the last one, MIRB test, is the test suite.So, you can compile all the test suite into one single command.The MIRB test is also an example of how to embed your Ruby programs into C.And a very important aspect of MIRB is MIRB-GEM, which is a counterpart of the RubyGEM.But the MIRB only requires C99, so we cannot load things dynamically.So, everything in MIRB-GEM is compiled statically into the interpreter, actually, library.So, the MIRB-GEM is kind of like a statically linked gem.So, to use MIRB-GEM, so install the MGM, that's kind of confusing.So, MGM is the tool to manage MIRB-GEM.Then MGM update to download the list of the MIRB-GEMs.So, you can have the list of the MIRB-GEM uploaded onto the repository.So, you can have the MGM.Currently, as of today, we have 129 MIRB-GEMs, kind of many.So, it goes like this.List on the tiny small description of the MIRB-GEM.Of course, you are not supposed to be read this.So, for example, we have the MIRB-IO.So, the core MIRB does not have any I.O.Just because some bare metal systems does not have any file system or the standard I.O. or anything.So, the whole I.O. is optional in MIRB-GEM.So, you can parse and output JSON.You can access SQLite3.You can access MessagePack, Redis.You can access the C function from Ruby using the LiveFFI, which LiveFFI is available.You can access Fluendee, Livuv, which is the backend of Node.js.You can access those functions.You can control the JavaScript compiler from MIRB.MIRB Synetics is a kind of clone of Sinatra in MIRB.You can control Arduino, a wiring pi from MIRB, or even the Linux C groups.It's quite easy to make MIRB-GEM.You can create the name of the directory of the name of the gem, then create the file名のMIRB.GEM.REG, which kind of seems similar to RubyGems.So, license, author, small summary, and then you can add a dependency.Then, you can put your C++ file in the source directory.And then Ruby API is pretty simple, something in between Ruby and Lua.So, I don't think I have time to explain about the detail of the MIRB API.So, maybe in the next year, I'm going to have an MIRB workshop or something, anyway.So, you can compile the Ruby file into a library.So, when you use the Ruby library, create a directory named MIRB live,then, put your Ruby program on it.You can create a test file in the test directory.So, it is automatically test when you drink.So, check out the MIRB deal in the repo.So, even in the core, we have a bunch of MIRB-GEM as a sample.And then, you can access many things.So, these gems are optional.So, you can drop off the things.And then, that's quite easy to handle.So, you can put your MIRB-GEM in GitHub.So, use MGM config to build config.rb or add config.rb.Require automatically, fit and compile the gems.So, you don't have to worry about that.Or maybe you can use your own config file by specifying the environment variable before rake.So, we have MIRB right now.MIRB is small.MIRB is fast enough.It's not that fast, though.So, what can we use MIRB before?It's everything.You can use it everything.But, remind that MIRB, the feature-wise, MIRB is smaller.Like, we don't have some features in CRuby or JRuby, Rubinius.So, it doesn't have the portability.Portability is the primary motivation.So, we cannot have the things which relies on the specific platform.For example, we cannot have, say, the operating system access.But, you can add it later using gems.So, anyway, you need a language.You can add programmability to your systems.Anyway, you want tickle or Lua.You can use MIRB.So, API-wise, it's similar to Lua, but I think it has better API and a better language.Yeah.No offending.And then, it's comparable performance for embedded systems.So, especially for prototypes or customizable ones.For example, a company in Japan is experimenting prototypes of vending machines.So, some of you might visit Japan, and then you may notice that in Japan, we have vending machines all over the country.So, and some vending machines are very, very intellectual.We have some kind of a touch screen on it, and even a game on it.So, some vending machines even has a face recognition.Not to sell the buckles to younger children.It's quite complex systems.So, they try to include M Ruby to make them easier to add new features.So, they are right now experimenting on it.Or the micro-satellite.So, some friend of mine back in Japan created the very teeny computers that runs M Ruby, this size.And then, they put everything into the size of the beverage can, coke can.And then, put them as a satellite.So, the M Ruby in the space.So, they called it CAN-SAT, CAN-Satellite.So, that CAN-SAT is so small.So, you can lift a bunch of CAN-SAT with the piggyback into the real satellite.So, it would cost them, I don't know, maybe $1,000 or $10,000 or something.So, that's not expensive.So, even the high school student can design this CAN-SAT.And then, some people control robots using M Ruby.Or home automation like an Arduino or maybe Raspberry Pi.And then, you can use M Ruby for extending enhancing applications.For example, the web service.So, we have the Apache module that enables to control Apache using Ruby.So, you can replace the mod, you can control routing, resource throttling, using that C group feature from the Linux.So, you can limit the bandwidth or CPU resource or memories or whatever to the certain request from the client.So, the same guy developed the engine XM Ruby.So, you can control the engine X and Apache using the same script, same Ruby script.Or maybe in the future, not no one working on it yet, but in the future, we can have an editor which can be enhanced using M Ruby instead of Emacs list or VM script.Some guys embedded M Ruby in the databases.No SQL database, it used to be called avocado database around Arango.Arango database embed M Ruby in it.And then, some people considering about embed configuring games using M Ruby.So, some people already use Lua in the commercial games and the other guys are considering embedding M Ruby in the consumer games.Or routers, the Japanese net company ships the router that embeds M Ruby.So, they can write routing rules and the CUI interface using M Ruby.So, if you want to provide programmability to your systems, you can use M Ruby everywhere.So, right now, like I said, I no longer work as a programmer to develop C Ruby.So, we have much smarter guys like Koichi and Nobu and maybe Zack and so many Ruby contributors.So, I don't have to work as a programmer.So, I work as a designer, lead designer of the language.At the same time, I'm born to be a programmer.So, I want to be a programmer.So, as a programmer, I work on M Ruby.So, it's quite fun.So, some people ask me that will M Ruby replace C Ruby?That's a fair question.So, the language designer himself working on the other implementation.So, you may suspect the M Ruby will replace C Ruby in some future.But the answer is no.So, as I said, primary motivation behind M Ruby is the portability.So, it has less functionality and it is still 1.9 compatible.So, can M Ruby be used in server side, not in the devices, not in the ground systems?So, it's yes.The answer is yes.It is less memory.So, with generationally incremental garbage collector.So, and then we already have M Ruby UV.So, we can.I recommend, yeah, it's still a challenge.But you can theoretically use M Ruby in server side.So, can I involve in its development?The answer is of course yes.It's open source.So, check out github.com M Ruby slash M Ruby.So, you can do whatever you want, play with M Ruby.So, if you have new things, new interesting, just tell me.And if you have improvement ideas, if you find bugs, please submit issues to the github.So, I will glad to see you involved.And happy hacking.And thank you today.