これから私の英語はこのプレゼンテーションを 下載して、私はこのページを アップロードしましたこのイベントを見てください今日、このアイテムをついてお話しします今日、今回はこのアイテムをついてお話ししますまた、私たちはこのアイテムを見ます今日はこのアイテムについてお話をしたいと思います。まず、Ruby 2.6の表現を紹介したいと思います。では、インストラクションシーケースではありません。しかし、私たちのコントリビューションを紹介します。主題のゲルトを紹介します。Ruby Count 2016のゲルトのアイデアを紹介します。このゲルトのプログレスを紹介したいと思います。私はプログラマーです。私の仕事を数回変えましたが、私はRuby Virtual Machine、Ruby Slating、Ruby Garbage コレクションを変えません。私はクックパッドのメンバーです。このRuby Conferenceのクックパッドブースを紹介します。そして、私はログラマーです。ありがとうございます。とても可愛いです。このプログレスを紹介します。Ruby 2.6のゲルトのプログレスは、多くのプログラマーがあります。最大のゲルトは、MGITコンバイラーです。しかし、他のオプティマイザーションがあります。例えば、プログラマーは、1.4倍速いです。2.6倍速いプログラマーは、2.6倍速いプログラマーです。最大のゲルトは、ありがとうございます。このプログラマーは、非常に大きいプログラマーです。私はこのプログラマーを紹介します。プログラマーは、Lubyのメモリーを描いた画面です。それは、Lubyのメモリーでの男性's レモリーを描いた画面です。Wheeウーズという他に、でも、マロックとフリーコンビネーションは、スピードとスペースがあって、フラグメンテーションに関しては、マロックの問題について、トランゼントヒープを紹介します。トランゼントヒープは、トランゼントヒープを紹介します。トランゼントヒープは、コピーとジェネーションのガーバッジコレクションの技術を使います。この技術は、コンビネーションのガーバッジコレクションを使用しています。でも、この技術は、リミュータションとマロックのスペースのガーバッジコレクションを使用しています。この技術は、トランゼントヒープを紹介します。この技術は、トランゼントヒープは、リミュータションのガーバッジコレクションを使用しています。この技術は、トランゼントヒープを紹介します。この技術は、、スペースのガーバッジコレクションを使用しています。この技術は、トランジェントヒープは大きな目標がありますがそれが未来の担当性が大きくなりますこのトランジェントヒープはクリエーションとGCコレクションを使ってトランジェントヒープを使ってトランジェントヒープは無いですX-Axisはエレメントのアレを使ってY-Axisはトランジェントヒープは無いです0-3のエレメントは無いですエレメントは0-3のエレメントを使ってトランジェントヒープは無いですペコラのセンサーを見るとステッパサルメントのディアレンジに50%も見えますハシェ、アロケーションを見ると50%や100%のディアレンジで小さなエアメントのハッシュオブジェクトを使用することができます。8個以上のエアメントではありません。トランセンスヒープは大きなハッシュオブジェクトを使用することができます。ルビー2.6のトランセンスヒープをご紹介します。トランセンスヒープは新しいメモリーのハッキングを表現することができます。ジェネレーショナルコピーGCテクニックとMRIスペシビックハッキングを使用することができます。今のコードはコンパジビリティを保管します。トランセンスヒープはアプリケーションの表現ができます。アプリケーションはアプリケーションを表現しなければならない。でも、アプリケーションができる。マイクルベンチマックスは素敵な表現はできます。しかし、アプリケーションの表現は無い表現ができることができます。このコードを保管します。アプリケーションに関することができますどうぞ試してみてください今、試してみてくださいこの話はトランゼフティーではありませんしかし、ギルドはベイントトピックに返していますこの話は短いですギルドは新たなアプリケーションに関してルビ3のモータブのオブジェクトはありません今、ギルドのアプリケーションはまだありませんギルドのアプリケーションは終わりませんアプリケーションはバッグのアプリケーションですそのため、コメントやコントリビューションは高いですコンカレットプログラミングについては、ギルドのアプリケーションはありませんこの話は一つの目的ですギルドのアプリケーションのバッグラウンドについては、ギルドのアプリケーションには2つのモチベーションです1つはプロダクトビティ昨日、マスキーのプロダクトビティは大きな問題です私はそう思います私の想像は、スレッドが非常に難しいスレッドステイクプログラムを作ることができますスレッドプログラムの難しさが多いですが、最大の問題は、スレッドの中にも、スレッドの中でも、スレッドの中でも、スレッドの中でも、最大の問題は、コンカレットプログラムを作ることができますルビューションは、私にはヒ喜欢コンカレット。。。それを人生にすることができます次はパフォーマンスを作ることですコンピューターが多い意味にスルーしました多くのコアを利用する必要がありますが、今のMRIは多くのコアを利用する必要があります。そのため、マルチプロコアを利用する必要があります。この目標を達成するために、新たなコンカリントアプロスラクションを2016年2年間のLuby Count 2016のコアを利用する必要があります。このアイデアはとても簡単です。このコアの難しさは、マルチプロコアは 二つのマルタドアプロジェクトの3つの 어려い方法を訴えています。そのためゴールドは、 それとも非常に簡単です。ゴールドでもマルタドアプロジェクトの二つの問題を訴えるために、マルチプロコアを利用する必要があります。次はデザインです。このデザインはコレントのデザインです。コレントのディスカッションを紹介します。Ruby Interpreter can manage multiple guilds.A guild has at least one threat,and when we run Ruby Interpreter,there is one guild,and which runs one threat.Threating one guild can not run in parallel,but because there are giant logs in each guild.However, threats belong to different guilds that can run in parallel.So if we make multiple guilds,then we can run parallel programming in Ruby.This is a simple example to make two guilds.I think this is very similar to threat programming on Ruby.You can pass block to guild.neo method,and each block run in parallel on each guild.In this case, expression 1 and expression 2 run in parallel.Gild property habits are sharing mutable objects.Normal string, array, hash, and blah blah blah.So many Ruby objects are mutable,so we can't share such a normal object with multiple guilds.However, there are several objects we can share between guilds.We say this kind of object as shareable object.We define shareable object and non-shareable object.In this kind of object,we can enjoy ordinary programming using mutable stateswithout threat safety concerns in one guildbecause we can't share mutable objects between guilds.In other words,you can't make threat unsafe program on guild.So threat unsafe or data lazy program, you can't write.Generally, most of objects are threat localfor ordinary concurrent programs.So only a few objects are sharedso that we only need to concentratesuch sharing object to makeconcurrent programs, I think.So this page is about non-shareable objects.So non-shareable object is equal to the most of objects.So most of ordinary objects.So Ruby programs makes many, many strings, array, hash, and so on.And they are mutable and non-shareable objects.A non-shareable object is a member of one guildand other guild can't access to the non-shareable objects easily.And if you use only one guild,so it means it is verycompatible with Ruby 2, the current version of Ruby.So you can make a compatible programwith Ruby 2 and Ruby 3 very easily.We define four types of shareable objects.So in other words,other than these four types of objects are non-shareable objects.So we define four types of shareable objects.A mutable object, class module object,special mutable object, and isolated proc object.Important assumption is shareable objectsonly refer to shareable objects.So if shareable object refers to a non-shareable object,we can share the non-shareable object between guilds.So we prohibit such a danger.We need to keep this assumption.The first shareable object is immutable object.So sharing immutable object is no problem,no data-lacy issue,because we can't mutate this kind of object.I think it is easy to understand.One difficulty of immutable object isit is not equal to the frozen object.So for example,this array is immutable objectbecause this array is frozenand also this arrayonly point to the immutable numerical object.But this array,the array A2 is not immutable.So array is frozen,but the array refers to the mutable objectcreated by object.new.So we need to care about that.So maybe we need to introducesome deep-free syntax or methods.And alsonumeric objects or symbol objectsor some literal objects are immutable.So you can share them easily.And also frozen string objectsis immutableif they don't have instance variables.Class and module objects are also shareable objects.So it is very difficult to understand.But we need to introducesome more considerationand protocol to share the class and module objects.But we maybe class and module objectsshould be shareable objectsbecause all objects refer to own classesand classes can refer to module objects.So sharing class and module objectsis straightforwardand it is easy to make some kind of programs.However,there is a disadvantage of this ideawe need to introduce new protocolto refer non-shareable objectsfrom classesand modules.This is because classesand modulescan refer the mutable objectby class variable constantor instance variableof classand module objects.So we need to introducesome special protocolto prohibit such a sharing mutable object.Itscape this discussion on this presentationbecause there is no time to discuss more.The third shareable objectis the special mutable objects.So sometimes we need to sharedata structures such as the shared arrayor shared hash objects or something like that.So to share the data structurewe introduce special mutable objects.We need to introducesome special protocolto access these contentsof special mutable objects.For example,locking correctly ortransaction and so on.I don't implement it yetbut it is neededfor some kind of programs.For example,the closure language hasshared mutable datadata structure usingsoftware transactional memorywith a STM.So it isone strong option to implement.Compare with normal objects like array hashand so on.Special mutable objectsintroduce additional overhead because we need tocome protocol.So as I saidtransaction or something like that.But I think this kind of overheadis not a problem because as I saidonly a few shareable objectswe need to useon the ordinary concurrent programs.The last one is isolated block.Proc object can referthe outer local variable.For example,this proc hasreferthe local variable a.This local variable ishere.So it is the outer local variableand it isrefer to the mutable object.So it means thatproc object can't be a shareable object.Sometimes we want to passproc object to anothergilt.So weto achieve this one.So we introduceproc isolated method.Proc isolated method makedeplicate proc named isolated proc.Isolated proc can't access to the outer local variable.So if we make isolated procthen thislocal access to outer local variable is prohibited.So this lineit's laser runtime error.So we canintroduce some kind ofshareable object with proc isolate.So as I show this smaller example,wepass the proctransformed to the isolated procimplicitly.And in this casethis line,this onethis local variableg1 is outer local variable.So in this case,it'sa runtime error.Becauseproc transform to the isolated proc.Okay.I showed someshareable objects.This is someinformation.So other languages usingsimilar ideas.So similarthere are several languages using similar ideas ofgilt.It means somethese languages introduce limitation ofsharing states or shared nothingmodel they use.Rocket program language Kotlin native or shell script or javascript andrn-exas processes.Sorn-exas processes.So the nameand model are different,but similar ideasthey use.So I thinkthis approach is notso long,I think.Okay.So we need toprepare the inter-gilt communicationapply.SoI designed based on actor modelat this moment.The destination of thesorry.Destination addressdesignation address is described by thegilt object itself,likern or exas process.Sendingshareable objects meansonly reference to the object.So it is verylightweight.And also if we sendnon-shareable objects such as an array,wehave two methods,thecopy method and move methods.Thisis a very simple server client programby using the inter-giltcommunication API.Thisline shows how to sendthisline.Thisline shows how to sendobject to the guild1.So in this casethenumeric30 objectsis sending to the guild1.Andat guild1,thislinereceives object guildnumeric30and calculates somethingand thisline returns back the resultof calculation.So thisis a very simple example ofthe server client modelof this guild.Sending I said thatwe can't share the non-shareableobject.So if we want to sendthe non-shareable objectwe need to do something.Sothe one method is copy.So copyis very easy to understand.Soif you want to copythe O1,then the objectO1 and child objects arecopied to the guild2.Sothe point is we need to copyeverything so the O1 cantraverse from O1.Themove semantics is somedifficult.Soif we move the objectO1 toother guild,then we can't access O1from guild1.So in this caseif we move O1,just afterthe sending,the guild2 can accessto the O1 and the child objectfrom guild1we can't access to the sent object.It is faster than the copy semanticsbecause we don't need to copy everything.Move semantics is suitable for huge string or dataor IO objects.For example,master guild makes a socket object,Io objectby accept methodand move itto a worker guild.Andthe worker guild receive a request and sendingrequest in parallel.Andafter that,master guilddoesn't need to access to a socket anymore.So this is a summary of shareable and non-shareableobjects.So it showsdetails,but the important iswe can't share the mutable objectsandin a threat program,we can sharesome kind of shared objectaccidentally,and it will be a bug.But with guild,we can makecorrect non-data-lacyconcurrent programs.This isone discussion topic.So Ishow the...Isaid that Idesign communication APIbased on ActaModel,but we have anotheroption.So ActaModel isthe destination is specified by guild orprocessing along with Alexa languages.But some other languages,like GoLanguage,JavaScript,Cottering,NativeOr rocket,Program languages,it's a userCSP model.CSP meanscommunication sequential processes.Isearch this long name in Wikipedia.Soin this case,we manipulate channelobject explicitly.Andfor example,we can transfer the channelobject to the other guilds and so on.Sowe have two options,I think.And they have advantages and disadvantages.So we need to compare such aprocent cons.And we needto decidewhich we need to do that.Which we need to use.So in fact,I introduce guild ideawith CSP model.So usingchannel explicitly,but just nowI think ActaModel is more suitablefor Ruby.But we need to considermore and more.Another difficult topic ishow to retrieve multiple channels.Sosometimes we need to manipulate multiple channelsbecause,for example,we want to usedate channel and control channel.Orif we want to monitoring multiple guildsSo we need to communicate withmultiple channels.But the APIdesign is very difficult,I think.So we can emulatemultiple channel with programming techniquewith one channel,one communication channel.But it is a bit difficultfor,and it is toughfor the Ruby programmers,I,ordinary Rubyprogrammers.So I think we,if wecan provide a good APIso it will be nice.For example,go program language hasselect syntax.So we canlike communicate.So wecan retrieve the multiple channel.So in this case,x orquate channel.And alsothe R and Y X processes,we canhandle multiple channel with patternmuch.And also,javascriptworker,we need to registerhandler in a communicate message channel.And also,racketplace use eventhandler as athink special methods,special functions.So I review some kind,some otherlangages.And for example,onruby,on after model,wecan introduce a tag tospecify the channel and receive with specific tags like that.SoI don't explainabout this one,but I want to sharethat I'm thinking about thatjust now.So if you have anyidea or comments,it will bevery nice for me.So this is a channelcase.SoI want to introducesome implementationof girls,some otherimplementation,but preliminaryimplementation,you canaccess to this one,but it hasmany,many bugs.So if you runsome programs,you can see thesegmentation hold or something like that.Sowe need to,we introduce somespecial context betweenVM virtual machine and threads.Also,we need to introducesome many,many fine-grained synchronization.So it means that we need toracie threadsafe,sorryracie threadprogramming we need to do.Soit means thatmulti-state programming is very,very difficult.So this is why mycurrent implementation has many,many bugs.And also garbage collection is a big issue.So we need to stop,so the currentimplementation,we stopall of guilt and do the garbagecollection process.So it means thatwe have only one object space.So we have one preliminaryimplementation,but we need todo more,we need to do more and more.So fix garbage collection bugs and introducesome features.So prohibit sharing,non-sharing objects and introduce synchronization to protectVM-wide resources such asGlobal variable or something like that.And introduce shareable object protocols.And performance is not so good.So we need to improve the performance.I have many,many ideato improve the performance because Imake some trial.For example,this paper shows how tomake parallel threadson MRI.So we can,I think we canwe can introduce someoptimizing techniques from this paperto the current guilt implementation,I think.Another topic is naming.Soin the Ruby world,naming is important.So the current guilt nameis a code name.So we have some reason whywe choose guilt,but some peoplesay guilt is not so good name.Sowe are considering the name of guilt.So I want to sharethat guilt is code nameand we areseeking new good names.So I want to show the demonstrationof the currentimplementation.So Iprepare the 40 batch CPUsmachine.So it means that to 10 coresto hyper-threading CPU,wehave two CPUs.So weprepare two CPUs.Sototally it reveals40 batch CPUs.And here,socalculating the Fibonacci number many times.And the serial versionof computation is this line.So itis very simple,I think.And the guilt versionI make this kind ofmaster worker model.Sowe can increase theworkers on this case.And the program is here.So it is very longbut we can introduce some frameworkto do such a commodity example.I think.So makingthis example.So increasing the numberof guilt,we can see the speed upcompare with the sequentialserial execution.So themaximal improvement is15 or16 times fasteron 40 batch CPUs.Maybethis performance improvement isgood,I think,in this case.So next one isto fix the number of guiltto 40 and changethe workload,the number ofend.In this case,we can seethe performance improvement here,butwecalculating the Fibonacci number 13,wecan see the veryY axis shows the execution.So serialexecution requiresabout three hours,butusing guilt,we only needthirty minutes.So it is very fasterexample,I think.So this isthe speed up ratio.So ifwe use,if we calculateonly a few number offibonacci,so the overhead of guiltis very high.So there are noperformance improvement here,butif we increase the taskworkload,we can see the performance improvement.The last demonstration isword count example.So wewe make a similarframework,similarmasterwork model with guilt.Andthe result is very,verythrow on the 40 guilt.SoY axis is execution time,sohigher is bad.And serialexecution requires only 1.7seconds,but with40 guilt,itequires six seconds.It's very badresult.This is becauseGCObjectAllocation requires naive locking.Andthe currentimplementation.So this is only acurrentimplementation limitation,I think.So we need toimprove.We can solve thisthrow down,I think.So today's talk isabout Ruby 2.6,updateby my contribution.And Iintroduce guilt,the idea of guilt,and discussion,and implementation,anddemonstration.So there are no time to make a Q&A session.So if you have anyquestions or any comments,soI'm happy to meet you with you.Thank you so much.