今日はルビーバーチョンマシンの未来をお話しします。特にパフォーマンスのシー・ルビーやルビーインプレミンテーションをお話しします。私の名前はコイチササダです。バーチョンマシンはルビー1.9です。今日はサマリーです。ルビー1のスケルウィングとGUIの話はとても面白いです。実際にルビー1のパフォーマンスを見たいと思います。ルビー1のスケルウィングは必要ですか?オッケー?私はログを書いた方がいいと思います。私はプレゼンテーションログを取り出すことができます。今日のサマリーはシー・ルビーはバーチョンマシンパフォーマンスの最高のスケルウィングです。実際にプレゼンテーションのアナラシスやオプテミナーションがあります。しかし、シー・ルビーはプラグマティックルビープログラマーの方がいいです。数年かかりです。私は未来の数年かかりですが、数年かかりですが、足りない方がいいです。まず、私の最近の報告を紹介します。私はコイチです。私はヤブデブロッパーです。ここでフォースプレゼンテーションを紹介します。私は東京の宇宙で一つの課題を受けました。私は一つの課題を受けました。しかし、私の課題を受けました。私の課題を受けました。私はロビーのプラグマティックルビープログラマーの方がいいです。私は東京の課題を受けました。私は東京の課題を受けました。私は東京の課題を受けました。私は東京の課題を受けました。私の家に行きました。私は東京の課題を受けました。残念な御課題を受けました。もし英語を聴くことができるなら、私のスライドを読んでください。私は全部話をしたいと思います。これが非常に重要です。今日のアジーンは、私はこの話を話したいと思います。まず、私はルビーバチュマッシュパフォーマンスのファースペクトについてお話しします。次に、インプリミッテーションを紹介します。去年、エヴァンフェニックスのデブローバーは、JRubyはジャブプログラマーです。Irubyはドットネットプログラマーです。RubyにはRubyプログラマーです。CRubyはCプログラマーです。私はCプログラマーです。私はCプログラマーです。CRubyプログラマーは、私はCプログラマーです。私はこのプレゼンテーションについてお話しします。このプレゼンテーションは、私がこのプレゼンテーションについてお話しします。このプレゼンテーションは、時間や力やお金を表現することです。最初は、CRubyは、まず、または、最初は、ジェルビやLVは低いパフォーマンスですが、エフォーマンスはC-Rubyパフォーマンスとなります。RubyパフォーマンスはC-Rubyパフォーマンスとなります。このパフォーマンスを知りません。でもC-Rubyパフォーマンスは良いパフォーマンスです。最後にRubyパフォーマンスはRubyパフォーマンスの最高です。このパフォーマンスを知りません。このパフォーマンスを知りません。最後に、C-Rubyパフォーマンスは良いパフォーマンスです。C-Rubyパフォーマンスは良いパフォーマンスを知りません。ここで質問があります。パフォーマンスを知りません。このパフォーマンスはRubyパフォーマンスを知りません。このパフォーマンスは多くのパフォーマンスを知りません。このパフォーマンスはダイヤミックコーティジェレーションです。このパフォーマンスはNATIVEマシンコードです。このパフォーマンスはポリモロフィックインラインキャッションです。このパフォーマンスはJavaホットスポットバーチューマシンです。このパフォーマンスはサインマイクロシステムのセルフランゲージです。このパフォーマンスはモジュラル3.1です。このパフォーマンスを知りません。このパフォーマンスを知りません。このパフォーマンスでヤマの工夫を確認しました。このパフォーマンスはJava図柄やIonRubyを使用します。このバーチューマシンはとてもクールなパフォーマンスです。たくさんの一個のVMを働きなければ多い方がそれぞれのディテーズは必要ありませんそのため、私たちの無程度をとっていませんベストの方が好きな方は、るびバーチマシンを使うことができます例えば ジャブバーチャルマシンは ジャバをフォーカスしていますセマンティックスキャップは ジャブバーチャルマシンとしていますセマンティックスキャップは セマンティックスキャップを使うことができますセマンティックスキャップは ジャブバーチャルマシンとして使うことができますルビニーズは ルビニーズは ジャブバーチャルマシンとして使うことができますルビニーズは ルビニーズは ルビニーズとして使うことができますこの方法は ルビニーズのパフォーマンスを最も良いですルビニーズが ルビニーズのパフォーマンスを最も良いですレヴィニュースは主にレヴィーランゲージをフォーカスしています。このアドマティシュのレヴィニュースは、長い方法が高いパフォーマンスが必要です。レヴィニュースは、たくさんの努力を持つ必要があります。このレヴィニュースは、10年以上のパフォーマンスが必要です。レヴィニュースは、たくさんの努力、努力、時間、お金を強化する必要があります。このレヴィニュースは、たくさんの努力を持つ必要があります。このレヴィニュースは、たくさんの努力を持つ必要があります。最も人間的なデスクトップコンピューターやサーバーコンピューターやエンブディスシステムのGCC、GNU Compiler コレクションを作っています。最も人間のコンピューターやサーバーコンピューターやエンブディスシステムのGCC、GNU Compiler コレクションを作っています。そして、コンピューターやサーバーコンピューターやエンブディスシステムのGCC、GNU Compiler コレクションを作っています。もちろん、コンピューターやサーバーコンピューターやエンブディスシステムのGCC、GNU Compiler コレクションを作っています。そして、コンピューターやサーバーコンピューターやエンブディスシステムのGCC、GNU Compiler コレクションを作っています。C アクセンションとCにがよくつかありますか?Cは簡単にオプテナリぜひとつありますか?Cはコンピューターやサーバーコンピューターやエンブディスシステムのグレーを使っています。でも、Cに簡単にオプテナリぜひとつがありますか?この理由は、シルビは最高の解説ではありません。C extension library or method written in Cis a limitation of C Ruby performance.Because we can't analyze C Ruby C code or native compiler generated code to optimize.For example, the garbage collection.C Ruby is a conservative mark and see garbage collection.We can't inlining the C method in Ruby script.This is why we can't get the best solution in C Ruby.But there is these advantages.I think it is a good solution for us.So this is summary of this presentation.C Ruby is not the best solution, but it is a good solution.I continue to improve C Ruby's implementation in C or in machine-dependent way such as just-in-time compiler or something.This is a pragmatic solution.I think the end-ending and the parallelization is the key feature to success C Ruby interpreter.So I introduced my research to support such keywords.Recently, I'm working on such projects related to Ruby interpreter.Let's introduce this research.This is past research.There is some hidden optimization by default.For example, the tail call optimization, which is also known.It is well-known optimization or instruction or planned unification or start caching.I implemented such optimization in YARF 1.9, but it turned off by the macro.The reason is their optimization is not debugged.So it can't guarantee this execution.There are some left optimization.For example, the efficient method caching.There are some redundant processes to invoke the methods.So we can eliminate these.I make the fiber class, which uses platform-independent way like 1.8 does in thread.But if we use the make context or set context for the POSIX platform, the performance will be improved.I will work this task and at 1.92, I will merge these optimizations.So Ruby 1.9 will get more performance.And another research.It is research, but my hobby.And a part of C program into Ruby.You know the Ruby inline.So they need to make a method to separate methods.But mixing to see Ruby system.Suppose n with the c code to directory.So we can this system for example, the UC libraries directly replace between classes or methods in Ruby and mixing.Test Ruby API such as RBSDR-NEW or something.Performance improvement continuously.So we can check the performance to replace Ruby to C.This is mixing notation.This is Ruby part.And if you call this method, you can write down the C part directly.Same in here.So this example, this returns file descriptor between C.And close at last.This is flow of the mixing.You only need to write the Ruby and C mix file.Rb in C.So this extension will be Rcb.So write down this file and mixing translator generate this file automatically.And you only need to run this file with mixing supported C Ruby.I changed the virtual machine to support this feature.Rexing translator generate such a C code.And mixing chain compared to the byte code using this optional instruction.And this optional call mixing instruction call this function directly.So there is no method implication overhead.For Ruby inline, we need to call the C method.So we need method implication overhead such as make method context or something.But there is only thing.This overhead is not needed.And there is some optimization.So if you write down the self in C, you can access the C self in C directly.I can't explain details about the mixing.So if you want to know the system, please contact me directly after that.And I evaluate mixing on two environments.On the inter architecture or spark architecture.And this evaluation shows the new function called overheads.With current C extension, they need method implication overheads.Creating the method context, method frame or something.And mixing does not need the...So mixing is 10 times faster than the normal C extension.This is same in the Ruby line.And I replace...I replace array each or range each or fix now times in mixing.Some iterators in mixing.This is the current C version.And this is the mixing version.And this is the pure Ruby version.And this is execution time.So lower is good.On the C version, the current Ruby 1.9.Compared to the mixing version, mixing version is faster than the current version.And this graph, this part of graph is the block in C.Rexing supports block in C with C.Another feature.So if you write down the C, sorry,Iterator in C and block is written in C, it is the fastest.And this is replacing the matrix multiplier with written in the mixing.I'll write 36 lines C code directly.And replace 12 lines Ruby code.And this performance improvement is here.20 times or 12 times on each environment.Rexing is you can download from this URL.So please try it if you have an interest.So next is Ruby to C.I had time compiler.Ruby is for C programmers.So we want to get the C source code from Ruby source code, Ruby script.So as students on my department of creative informatics,he writes down the LTE compiler.This compiler compiles the Ruby script to the batch machine code.And LTE compiler translates the byte code to C code.C compiler built native code as extension libraries.So this error means batch machine instruction dispatch overhead.And optimization by the C compiler.GCC as a C compiler has clever optimization.So we can apply this to Ruby script.Of course, we can eliminate the path or compile time.And generated native code.Ruby script can run executed in the batch machine.And this is evaluation.So there is four environments for each operating system.CPU and different compilers.She is very portable.So we can apply this optimization for such many platform environments.And this is the performance speed up ratio graph.Simple fire loop gets high performance.So solving pentamin puzzle gets such performance improvements.And there is some related work on the Ruby2C project.So directly Ruby2C by Eric and Lian will translate the subset of Ruby.Is that right?Hamaji-san, Japanese programmer, he made Yazdit.So he make adjusting time compiler for IA32CPU is Kaibyak.And Miyuga-san make a Yabu to LLVM.LLVM is low-level language or platform for the language processors.So he load adjusting time compiler with LLVM.And next project is Atomic Ruby.Ruby is too fast to make convenient functions.There is one megabyte for the 1.9.For example, the complex class or relational class will be merged in built-in class.So this is difficult to use embedded environments.I means I use embedded keywords in the two meaning.One is embedded system for resource limited devices or something.So in many case, numeric calculation, floating point calculation or multi-ingalization is not needed.But we can't punish such features on current Ruby 1.9.Application embedded Ruby, so if you want to merge Ruby interpreter to your application,Ruby is too far to use this.This is difficult to use, only the DSL engine.So I think you don't need to full set Ruby.So we need slim interpreter.So Atomic Ruby project will make suitable interpreter for the applicationor environment such as embedded system for resource limited gadgets or something.So this project is utilize the CRuby's portability.So if you have GCC or some other C build environment, you can use this.There is a three-sub project with three students.Plug-in and plug-out feature for the built-in classes or pre-compilation andremove the parser or compilers or switch core feature such as GCC expression or thread or something.So to use these features, you can make the special interpreter without, for example,complete class or floating class point class or something.Or switch garbage collection to the real-time garbage collection or a simpleregret special engine used in Ruby 1.8.For example, one student achieves the incremental garbage collection on Ruby 1.9.To use Ruby interpreter on the embedded system,real-time feature is important.But Ruby 1.9 use the stop-the-world garbage collection.Only use the stop-the-world garbage collection.So we need the incremental GCC garbage collection reduce application stop time.Batch Machine run the mark phase and application phase, application concurrently.But to implement the right barrier,you need to make a right barrier for the incremental GCC or generational garbage collection.Also need it for the interpreter and extensions.If I implement the right barrier exactly,all of extensions should implement the right barriers.Inserting the right barrier is too difficult for us because it needs a special knowledge of thegavage collection.We made automatically right barrier detection systems.I eliminate the details.But if you want to know, please ask me.This is the result of the incremental garbage collection.This is the stop time of the garbage collection.On the current garbage collection,on huge heap size,the stop time increase in linear.But on the snapshot real-time garbage collection,we achieve the stop time.This is the constant.There is another related works.Several years ago,Kiyama-san made a generational garbage collection in Ruby 1.6.1-bit reference count garbage collection.I made a floating point optimization as a special constant.Nakamura-san made an incremental garbage collection for the sweep phase.Enterprise Ruby and also Nakamura-san and also Nari-san made an efficient bitmap garbage collection.Ugao-san made mostly copying garbage collection.There are some garbage collection related projects.1.9.1.1.We will try to apply these results.We work on multiple virtual machine projects.As you know,we can't make multiple virtual machines in one process.In current Ruby interpreter,Ruby 1.8 or Ruby 1.9.But this MVM project enables this.Each virtual machines can run in parallel because they get a giant virtual machine lock.And they can communicate into virtual machine communication because they are in a process communication.This is the layout of the multiple virtual machines.This is a process and there are many virtual machines.They can run in parallel.This thread and this thread can run in parallel.This project is sponsored by some micro-sisters.Thank you very much.Nakamura-san is working on this project.Nakamura-san prefers to write a patch for 1.9.So,some micro-sisters have to release 1.9.1.This graph is the commit count of Ruby 2003 to now.This is Nakamura-san's commit count.These commits are sponsored by some micro-sisters.MVM project,we already released it on this URL.So,please try it if you have interest.This is the same slide as I showed.C-Ruby is not best solution.But the good solution for the programmatic programmers at least several years.There is some project to involve the C-Ruby.I introduce these projects.Thank you very much for your attention.