Slide 1

Slide 1 text

͠͹Β͓͘଴͍ͪͩ͘͞ ✓ ͝ཡͷεϙϯαʔͷఏڙ ʹΑΓ͓ૹΓ͠·͢

Slide 2

Slide 2 text

slide sponsors ս&YDFMד埆أؙٗ٦ٕ׃זָ׵ךⰅ⸂վז׿הַ׃׋ְ̤搀俱דֲתְװ׶倯 䊴׃♳־תׅ̤➙ּׅ!BXB[FLJחչ׉׸妜׃٦պה%.׃״ֲ劍꟦ꣲ㹀 !BXB[FLJ 剣ꣲ⠓爡䞔㜠رؠ؎ٝד〪➙ֶ➬✲⹫꧊⚥דׅԒ!WFTUJHF@ せ〢㾊ד׮044(BUF׃׋ְׅ Ⱈ䋆㛔ղ㸣穠如כ⚅歲׌!NB ➙傈ך㣐㋐ⵃ׋ך׃׫דׅי!LPJD 崧׃ך،آٍ؎ֶׁٕׄ׿ך崧׃⯓ծFTBث٦ي䱱鏝ך鏝㉏⯓׾ָׁ׃גְתׅկ 莆㄂֮׸לQJOHNF!LBLVUBOJ UP3VCZⴓ猰⠓չٓؤػ؎ך⠓պכ4DSBUDI%BZJO齡갭ח⳿ת։ׅկ!NBNF ًٗٝػٝ顠׏גְֿה鎉׻׸גַ׵ָ溪ך؝ىحة٦!NJXB

Slide 3

Slide 3 text

more slide sponsors ս&YDFMך侔䋒㔳דفٗحزחٓكٕվ知⽃חאֽ׋ְ̤搀俱דֲתְװ׶倯䊴 ׃♳־תׅ̤➙ּׅ!BXB[FLJחչ׉׸妜׃٦պה%.׃״ֲ劍꟦ꣲ㹀 !BXB[FLJ Ⰻ鿇׌׏ה䙼׏ג׋??![[BL@KQ E3VCZח״׷ⴓ侔٥8FCفؚٗٓىؚٝ ؔ٦ي爡F#PPL4UPSF IUUQ FTUPSFPINTIBDPKQUJUMFT1!IJTBTIJN ׫זׁתծTFLJ眍׾ֶ嚂׃׫ֻ׌ְׁկ䊛䃵歲꥔ך倯כծLBXBTBLJSCծZPLPIBNBSC׾ ֶ鑐׃ֻ׌ְׁկ,ذٖؽך飑ⰅכծTFLJׁ׿穗歋ד׀湱锑ְ׋׌ֽ׷ה׀⼿⸂׃תׅկ!UTVCPJ ִ׬ׁ׿ծֶ׭דהֲֻׁ׵ְֻ׿׮ֶ׭דהֲ!WFTUJHF@ GSPHPSH叶加דأٗ٦٥ؽآطأ׃גְתׅկ!EFO .JTPDBך؟٦ؽأ׾葺ֻ׃גְֻ⟗꟦׾Ⰻ㕂ַ׵⹫꧊׃גתׅ ٌٔ٦ز⹶⹡〳 SFDSVJUNJTPDBKQ!TFJLZV@NJTPDB

Slide 4

Slide 4 text

more slide sponsors ս&YDFMח⢪׻׸ג׷վ孡ָׅ׷̤ս&YDFM׾⢪ְ⦜ׅվװ׶倯搀俱ד䊴׃♳־ת ׅկ婍噟ז׃ד׫׿ז䎊ׇ̤➙ּׅ!BXB[FLJחչ׉׸妜׃٦պה%.׃״ֲ劍꟦ ꣲ㹀!BXB[FLJ 劦䌽ֹ׋׵׀궢굸ץח遤ֹת׃׳ֲկًٝءֻّٝ׌ְׁ!1613- 虠加歕ջ梾楤㼔Ꟍ枾䒍莔ռ׀勻䏄ֶ䖉׍׃גֶ׶תׅ!PHJKVO 崧׃ךفؚٗٓوכׄ׭ת׃׋կֶ孡鯪חֶ㡮ַֻֽ׌ְׁ!USJDLOPUFT ؟ٝٓ؎ؤ⳿ꨡד3VCZ8PSME$POGFSFODFחְֲֿ!ZBODZB せ〢㾊ך׫זׁ׿ծֿ׿ח׍׻։կ⿫⸇דֹזַ׏׋ךדأٓ؎سأهٝ؟٦ה׃ג ⿫⸇׃תׅկ!ZPVDIBO ֮הדַֻ!UTVCPJ 剢牜 㣐寐䨫3VCZ⠓陽׫׿זֹגי٦ Aœ SFHJPOBMSVCZLBJHJPSH PFEP!0FEP3VCZ,BJHJ

Slide 5

Slide 5 text

re: rinda coordination language seki@ruby-lang.org

Slide 6

Slide 6 text

@m_seki 衼⡲ 3VCZ؝ىحة &3# E3VCZ 3JOEB

Slide 7

Slide 7 text

2005 - ·ͩॳ࡮Γങ͑·͢ dRuby ʹΑΔ ؔকढ़ஶ ෼ࢄ ɾ Web ϓϩάϥϛϯά

Slide 8

Slide 8 text

2012 (-2014 ઈ൛)

Slide 9

Slide 9 text

2017 Web൛ʹͯ͠์ྲྀ ⰕꟚ彊⪒⚥

Slide 10

Slide 10 text

2017 य़ 䃊歊嵞✳鏬

Slide 11

Slide 11 text

νʔϜΛ੒௕ͤ͞ΔϦʔμʔγοϓ ࣗݾ૊৫ԽνʔϜͷҭͯํ 3PZ0TIFSPWF衼 䃊歊嵞✳鏬ջث٦ي׾䧭ꞿׇׁ׷ٔ٦ت٦ءحف荈䊹 穈籼⻉ث٦يך肪ג倯⟎ռؔٓ؎ٔ٦٥آٍػٝ 䎃僰갦ⴚ遤✮㹀 չ"SUPG6OJU5FTUJOHպזוך衼罏ה׃ג濼׵׸׷3PZ0TIFSPWFך倜ⴚչ&MBTUJD-FBEFSTIJQ (SPXJOHTFMGPSHBOJ[JOHUFBNTպ窫额缺鏬⚥דׅկث٦ي׾荈䊹穈籼⻉ח㼪ֻ׋׭ךٔ٦ ت٦ءحفך֮׶倯׾瘗罏ך穗꿀ח㛇בְגٌرٕ⻉׃ג铡僇׃׋⵸⼱הծչ։ָ濼׷ץ ֹךֿהպךث٦ئ٦ت٦晛ך״ֲזؒحإ؎꧊ַ׵ז׷鿇圓䧭ך剅硂דծ傈劤铂 晛חכㅡׁ׿׾כׄ׭韜螟㛁瘗ꤏח״׷չاؿزؐؑ،Ꟛ涪ךث٦ئ٦ت٦ָ濼׷ץֹ ֿהպָאֹתׅ 傈劤铂晛ؒحإ؎㛁瘗ꤏ✮㹀❁⾱姻⽆ׁ׿ծ嵲ꅿ 䒽䧭ׁ׿ծ䀤䃊䎊歑ׁ׿ծ吐卌⨳㣕龤ׁ׿ծ䎤぀㎖籼ׁ ׿ծꟼ㼛⤥ׁ׿ծ䎂ꑚ⨳⯢ׁ׿ծ宕戭繟珷ׁ׿ծし纷륊 㣕龤ׁ׿BOENPSF וֲ׊׀劍䖉ֻ׌ְׁ 铣׫♳־׷ך㣐㢌זךד荈ⴓד铣׿די

Slide 12

Slide 12 text

Rubyίϛολ &3# E3VCZ 3JOEB

Slide 13

Slide 13 text

ERB ذؗأزח3VCZ׾㙵׭鴥׬ذٝفٖ٦ز 8FC،فٔד⢪׻׸׷ֿהָ㢳ְ Iًاحس

Slide 14

Slide 14 text

ERBͷࢥ͍ग़ 㣐תַז➬圫ָ⯓ח֮׏׋ וֲ׃גֿ׸ָ䕵ח甧אךַ鍑׵זְ 俑㶵⴨ٔذٕٓח䒭׾㙵׭鴥׬״׶׮״ ְ׮ך׏גזח ׉׸׾椚鍑׃״ֲה䙼׏׋

Slide 15

Slide 15 text

dRuby ⴓ侔ؔـآؙؑزءأذي فٗإأծوءٝ׾馄ִג3VCZؔـآؙؑ ز׾❛䳔ׅ׷➬穈׫ ַ׏ְְֿ ؝٦ٕغحؙأة؎ٕךؿٖ٦يٙ٦ؙך 瑔噰

Slide 16

Slide 16 text

dRubyͷࢥ͍ग़ ⴓ侔ؔـآؙؑز׾כזח׮ךדծ3VCZؔ ـآؙؑزהכזח׮ךד֮׷ַחאְג ׮ךׅ׀ֻ罋ִגծ劤תד剅ְ׋ 䕵ח甧א⢽׾罋ִ׷ך׋ְפ׿׌׏׋

Slide 17

Slide 17 text

ΞΠσΞͷςεςΟϯά E3VCZזוךذأذ؍ؚٝ ֿך،؎ر،ָ劤䔲ח䕵ח甧אך غָؚ֮׷ַוֲַծ״׶׮䕵ח甧א׮ך ד֮׷ַוֲַ

Slide 18

Slide 18 text

Ҡ২ͬΆ͍ϥΠϒϥϦۤख ⡦ַך3VCZ晛׾⡲׷ךכ蕱䩛 ⯋חׅ׷㼎韋׾״ֻ锃ץזֹׯז׵זְ ׭׿וְֻׁ

Slide 19

Slide 19 text

Rinda ⚛⴨Ⳣ椚ך⼿锃鎉铂-JOEBך3VCZ晛 ػة٦ٝوحثָ3VCZ괏 ַ׏ְְֿ 5XJUUFSךⴱ劍ח⢪׻׸גְ׋ ְתכ⢪׏גזְ

Slide 20

Slide 20 text

Rindaͷࢥ͍ग़ -JOEB׾תׄ׭ח锃ץ׷ךָ׭׿וֻׁ ַ׏׋ -JOEBך⡲罏ח薉铂ך锷俑剅ַׁ׸׋ ׁٖؔ׿ח׮ךׅ׀ֻ⸔ֽג׮׵׏׋ 3VCZ괏"1*׾罋ִ׷ךכ嚂׃ְ せ〢㾊חㄎ׿ד׮׵ִ׋

Slide 21

Slide 21 text

ࠓ೔ͷ͓࿩ ֶ׮ח3JOEBה-JOEBחאְג 纷籼膴ּ

Slide 22

Slide 22 text

Agenda ז׈ֿ׸׾鑧ׅךַ ٌرٕך-JOEBה؎ٝأةٝأך3JOEB 3JOEBך؎ر؍ؔي זחַ鍑ְג׫׷ ֿ׸ַ׵

Slide 23

Slide 23 text

ͳͥʁ ֲ׏ַ׶׃גְ׋

Slide 24

Slide 24 text

dRuby in the last century seki@ruby-lang.org RubyKaigi2016 Kyoto

Slide 25

Slide 25 text

ܒ໤͢Δ ·͓ͣ΋͠Ζ͕ͬͯ΋Β͏ ฒߦॲཧͷצॴ(ʁ)ʹؾ͍ͮͯ΋Β͏ ͏͔ͬΓݴͬͯ͠·ͬͨ

Slide 26

Slide 26 text

ॳLinda 䎒㼰ך갦傊⚅秀ծ歗⫷Ⳣ椚ך넝鸞⻉ך ׋׭ח醱侧فٗإح؟ה-JOEB׾⢪ֲ㼔欽 ع٦سؐؑ،ך㏳׾ְֹ׋ 걄㚖ⴽחٙ٦ָؕ鎘皾ׅ׷ ٙ٦ؕך侧ח⣛㶷׃זְرؠ؎ٝ ְאַ剅ְג׫׋ְ̔3JOEB

Slide 27

Slide 27 text

How to write Parallel Programs

Slide 28

Slide 28 text

Linda ⚛⴨فؚٗٓيך⡲׶倯 )PXUPXSJUF1BSBMMFM1SPHSBNT 鷵如فؚٗٓو׾⚛⴨فؚٗٓوח㢌䳔 ׅ׷劤 ֿך劤ד⢪ֲٌرָٕ-JOEB ֿ׿זֿהָ剅ְג֮׷

Slide 29

Slide 29 text

໰୊Λ଎͘ղ͘ʹ͸ ㉏겗׾׋ֻׁ׿ך稢ְַ鿇ⴓחׅ׷ Ⰻגך鿇ⴓ׾ず儗ח鍑ֻ 㹋⚅歲כֿ׿ז괏חז׏ג׷ 鷵如Ⳣ椚ך倯ָ暴婊ַ׮ 鎘皾堣ך⚅歲דכ鷵如ח䢪׸ג׷

Slide 30

Slide 30 text

Ұਓͷ଎౓Λ্͛Δʁ 鸞ֻ׃׋䖓וֲׅ׷

Slide 31

Slide 31 text

ਓ਺Λ૿΍͢ʂ

Slide 32

Slide 32 text

ܭࢉݴޠͱڠௐݴޠ ו׏׍׮䗳銲 鎘皾׉ך׮ך׾鎸鶢ׅ׷鎉铂 ⼿锃ׅ׷׋׭ך鎉铂 -JOEBכ祍הז׷⼿锃鎉铂 فؚٗٓىؚٝ鎉铂הְֲ״׶ٌرٕ

Slide 33

Slide 33 text

ڠௐݴޠ

Slide 34

Slide 34 text

ผΞϓϩʔν 鎘皾鎉铂ח⚛⴨ㄏ⟀׾穈׫鴥׬0QFO.1ה ַ

Slide 35

Slide 35 text

LindaͷϞσϧ ةفٕ׾❛䳔ׅ׷ ⠗牰׫׋ְז䠬ׄ ❛䳔ׅ׷㜥䨽ָةفٕأل٦أ 鑫稢כ㹋鄲ח⟣ׁ׸גְ׷

Slide 36

Slide 36 text

λϓϧͱλϓϧεϖʔε

Slide 37

Slide 37 text

Lindaͷ࣮૷ $-JOEB$ぢֽך-JOEBך㹋鄲 3JOEB3VCZぢֽחرؠ؎ׁٝ׸׋׮ך require 'rinda/tuplespace' ts = Rinda::TupleSpace.new C-Linda

Slide 38

Slide 38 text

λϓϧ ر٦ةך穈 3JOEBדכ"SSBZ ['੥ٻॻ', '೔ຊRubyͷձ', '֏', 1980] [1, 1, '↓߳ं']

Slide 39

Slide 39 text

λϓϧεϖʔε ةفָٕ縧ַ׸׷瑞꟦ ًٌٔך״ֲח鋅ִ׷ ةفٕأل٦أ׾➜׃גةفٕ׾❛䳔ׅ׷ 㛇劤乼⡲ ةفٕ׾縧ֻծ铣׬ծ《׶⳿ׅ ts = Rinda::TupleSpace.new

Slide 40

Slide 40 text

λϓϧΛऔΓग़͢ ػة٦ٝ׾⢪׏גةفٕ׾䭷㹀ׅ׷ ةفٕأل٦أַ׵׉ךةفָٕזֻז׷ 㼎韋ָזְהֹծـٗحؙׅ׷ ـٗحؙ⚥ח㼎韋ָ㾈ְ׋׵ⱄꟚׅ׷ ts.take(['੥ٻॻ', nil, nil, Integer]) in("੥ٻॻ", ?to, ?from, ?val);

Slide 41

Slide 41 text

RindaͷύλʔϯϚον OJMכٙ؎ٕسؕ٦س ׉׸⟃㢩כ DBTFNBUDI ד嫰鯰ׅ׷ ؙٓأכ؎ٝأةٝأהوحث *OUFHFSծ3BOHFזו׮׉׸׵׃ֻ⹛ֻ ts.take(['੥ٻॻ', nil, nil, Integer])

Slide 42

Slide 42 text

λϓϧΛಡΉ ػة٦ٝ׾⢪׏גةفٕ׾䭷㹀ׅ׷ ةفٕأل٦أַ׵ةفٕכזֻז׵זְ 㼎韋ָזְהֹծـٗحؙׅ׷ ـٗحؙ⚥ח㼎韋ָ㾈ְ׋׵ⱄꟚׅ׷ rd(1, 1, ?koma); ts.read([1, 1, nil])

Slide 43

Slide 43 text

λϓϧΛஔ͘ ةفٕأل٦أחةفٕ׾鷄⸇ׅ׷ ـٗحؙ⚥ך乼⡲׾ⱄꟚׇׁ׷ֿהָ֮׷ ts.write(['੥ٻॻ', '೔ຊRubyͷձ', '֏', 1980]) ts.write([1, 1, '↓߳ं']) out("੥ٻॻ", "೔ຊRubyͷձ", "֏", 1980); out(1, 1, "↓߳ं");

Slide 44

Slide 44 text

ʢϓϩηεͷੜ੒ʣ ➙כ鎉ְ׋ֻזְךד䖓ד فٗإأ׾欰䧭׃גةفٕ׾縧ֻ GPSL׏שְ׮ך 䒭ך鐰⣣כ倜׃ְفٗإأד遤ֲ eval("NN", i, j, bp(i, j));

Slide 45

Slide 45 text

C-LindaͰͷૢ࡞ JO《׶⳿ׅ SE铣׬ PVU縧ֻ FWBM倜׃ְفٗإأָⳢ椚׃ג縧ֻ

Slide 46

Slide 46 text

RindaͰͷૢ࡞ UBLF《׶⳿ׅ SFBE铣׬ XSJUF縧ֻ FWBM倜׃ְفٗإأָ鎘皾׃ג縧ֻ

Slide 47

Slide 47 text

Lindaͷ·ͱΊ ְֲֲֿٌرָٕ-JOEB ׻ַ׏׋

Slide 48

Slide 48 text

·ͩΘ͔Βͳ͍ͱࢥ͏ 3VCZד⢪ִ׷קַך鿇ㅷה嫰ץתׅי

Slide 49

Slide 49 text

RindaҎ֎ͷࣅͨΑ͏ͳ΋ͷ .VUFY .POJUPS 2VFVF 5ISFBEWBMVF TPDLFU

Slide 50

Slide 50 text

Mutex 隁׶さֲ׋׭ך➬穈׫ .VUFY׾栻䖤׃ג׷꟦ծⴽךأٖحسכ .VUFY׾栻䖤דֹזְ أؙٔفزך֮׷⼒꟦ך㹋遤׾أٖحسず 㡦ד隁׶さֲ ٔا٦أח㼎䘔׃ג⡲׷הし

Slide 51

Slide 51 text

Queue, SizedQueue ر٦ةך❛䳔ה䖉׍さ׻ׇ׾♧䏝חׅ׷넝 䏝זًؕ 瑞ך2VFVFַ׵ךQPQכـٗحؙ 弫匈ך4J[FE2VFVFפךQVTI׮ـٗحؙ ر٦ةח갫䎷ָ֮׷ ⹛⡲׾؎ً٦آ׃װְׅ

Slide 52

Slide 52 text

Monitor, ConditionVariable ず劍ך➬穈׫׾⡲׷׋׭ך➬穈׫ .VUFYח⡂ג׷ָծ䖉׍さ׻ׇ׾鍑ꤐׅ׷ ׋׭ח朐䡾㢌侧ָ⢪ִ׷ وص،׬ֽ 3JOEB׮ֿ׸ד⡲׵׸גְ׷

Slide 53

Slide 53 text

Thread#value Ⳣ椚ך穄✪׾䖉׍ծ穠卓׾䖤׷ ⡦䏝ד׮ㄎץ׷ךדًٌ⻉ח׮ 䠐㢩ה➂孡זְ 'VUVSF1SPNJTF ז׈ֿ׸̓׾⡲׷➂ָ䖓׾窫׋זְך ַ

Slide 54

Slide 54 text

͜͜·ͰίʔϧόοΫͳ͍Ͷ ꟣鑧⠅겗 ⚛ץגְג孡בְ׋ֽוծ؝٦ٕغحؙ ׅ׷禸ך"1*ָזְ 3VCZ⡲׏׋➂״ֻ׻ַ׏ג׷״ז

Slide 55

Slide 55 text

socket΍pipeͷ஥ؒ ر٦ةך❛䳔ה䖉׍さ׻ׇ׾♧䏝חדֹ׷ ׃ծ穄✪ⴖ倖׮濼׷ֿהָדֹ׷ ؿٗ٦ⵖ䖴׮דֹ׷ָ蕱⸤ׅ׷ ر٦ةָ稆劰ֺׅ TFMFDU㾩ה♧筰ח⢪ֲה㢳⯋䖉׍׮知⽃

Slide 56

Slide 56 text

Rinda ةفٕ׾❛䳔ׅ׷ٌرٕ ةفٕ׾ٔا٦أה㼎ח׃ג隁׶さְח ر٦ةך❛䳔ה䖉׍さ׻ׇָ♧䏝ח ➭ךفٔىذ؍ـ׾㹋鄲ׅ׷ךח⢪ִ׷ ػة٦ٝ׾ֲתֻ⢪ֲה㢳⯋䖉׍׮דֹ׷

Slide 57

Slide 57 text

͠͹Β͓͘଴͍ͪͩ͘͞ ✓ ෼͘Β͍ ✓ -JOEBͷૢ࡞Λઆ໌ͨ͠

Slide 58

Slide 58 text

ૢ࡞ͷ࣍ͷந৅౓ ةفٕך㛇劤乼⡲כ׻ַ׏׋ ةفٕך乼⡲׾穈׫さ׻ׇ׷ה麩ֲ׮ךח 鋅ִגֻ׷

Slide 59

Slide 59 text

جຊ෼ࢄσʔλߏ଄ମ 3JOEB -JOEB דאֲַ㛇劤涸ז؎ر؍ؔي #BH せ⵸ד،ؙإأ ⡘縧ד،ؙإأ ֶתֽ ة؎ىؚٝחתא׻׷䗰ꂁ✲׾幾׵ׅطة ָ㢳ְ

Slide 60

Slide 60 text

۠ผͰ͖ͳ͍ཁૉ ず♧銲稆ך꧊さծ#BH إوؿؓ ةأؙ

Slide 61

Slide 61 text

λεΫͷBag ةأؙ׾ةفٕד邌植׃גתה׭גֶֻ ٙ٦ؕכةأؙ׾《׶⳿׃גⳢ椚ׅ׷ ✳ꅾח《׶⳿׃ג׃תֲֿהָזְ ts.write(['task', {λεΫͷॲཧͷύϥϝʔλ}]) ts.take(['task', nil])

Slide 62

Slide 62 text

Χ΢ϯςΟϯάηϚϑΥ Oךإوؿؓ <TFN>ָO⦐֮׷̔ٔا٦أָO֮׷ XSJUFד㟓װ׃ծUBLFד幾׵ׅ n.times do ts.write(['sem']) end ts.take(['sem'])

Slide 63

Slide 63 text

໊લʹΑͬͯΞΫηε せ⵸ה⦼ך穈׫ךةفٕ 刿倜׾㸜Ⰻח遤ִ׷ 䞔㜠ך鸐濼ח׮⢪ִ׷ ['nagoya', 3] ['ultimate', 42]

Slide 64

Slide 64 text

໊લʹΑͬͯΞΫηε 刿倜כUBLF׃גXSJUFׅ׷ XSJUFׁ׸׷תדծⴽך➂כ鋅׷ֿה׮鍗׷ ֿה׮דֹזְ 㸜䗰 _, n = ts.take(['nagoya', nil]) ts.write(['nagoya', n+1])

Slide 65

Slide 65 text

໊લʹΑͬͯΞΫηε ر٦ة꟦ח♧顐䚍ָ䗳銲ז㜥さ 鎘皾ח⣛㶷ׅ׷ر٦ة׾UBLF 鎘皾׃ג 穠卓הず儗ח⣛㶷ׅ׷ر٦ة׮XSJUF 㸜䗰׌

Slide 66

Slide 66 text

໊લʹΑͬͯΞΫηε 䭷㹀ך⦼חז׏׋׵ծזחַ׃׋ְ ػة٦ٝח⦼׾䭷㹀׃גـٗحؙדֹ׷ IQָז׵穄׻׶ ts.read(['hp', 0]) and exit

Slide 67

Slide 67 text

໊લʹΑͬͯΞΫηε ׾㹀纏׃׋ؔـآؙؑز縧ֻ ⦼ָ㢌׻׷תד䖉א module Rinda class Njet def initialize(value) @value = value end def ===(other) @value != other end end end ts.read(['nagoya', Rinda::Njet.new(3)])

Slide 68

Slide 68 text

ҐஔʹΑͬͯΞΫηε せ⵸ח״׏ג،ؙإأׅ׷圓鸡⡤ך䭁䓸 ꂁ⴨せծ؎ٝرحؙأծ⦼ךةفٕ ת׌㶷㖈׃זְ銲稆׾SFBEׅ׷הـٗحؙ ׉ך؎ٝرحؙأך銲稆ָ㾈ֻך׾䖉א ىأ׃ג׮侄ִגֻ׸זְ ['matrix', 3, 5, 1.0] ['prime', 2, 3]

Slide 69

Slide 69 text

ετϦʔϜ UBJMةفٕה銲稆ךةفٕד圓䧭ׅ׷⢽ UBJM׾鹌׭ծ銲稆׾鷄⸇ ['stream', 'tail', 2] ['stream', 1, 'hello'] ['stream', 2, 'world'] _, _, index = ts.take(['stream', 'tail', nil]) index += 1 ts.write(['stream', 'tail', index] ts.write(['stream', index, new_value])

Slide 70

Slide 70 text

ݮΔετϦʔϜ IFBEةفٕ׾⢪ֲ IFBEةفٕ׾鹌׭ծ銲稆׾⵴ꤐ ['stream', 'head', 1] ['stream', 1, 'hello'] ['stream', 2, 'world'] _, _, index = ts.take(['stream', 'head', nil]) ts.take(['stream', index, nil]) index += 1 ts.write(['stream', 'head', index]

Slide 71

Slide 71 text

ݮΒͳ͍ετϦʔϜ IFBE׾⢪׻זֽ׸ל幾׵זְ 䖓ַ׵⿫⸇׃׋ٙ٦ؕ׮갫׾鷄׏גⳢ椚ד ֹ׷ 5XJUUFSךة؎يٓ؎ٝך؎ً٦آ %SJQ 5IFE3VCZ#PPL׾鋅גי

Slide 72

Slide 72 text

ʢ͓·͚ʣActorͷΤʔςϧ 3VCZ,BJHJד׍׳׏ה鑧׃׋ ًحإ٦آؚٝءأذيؒ٦ذٕ ،ؙة٦חכ،سٖأָ֮׏גծ׉ך،س ٖأחًحإ٦آ׾鷏׷ 㹂⯓ך،ؙة٦ָ׉ך澓꟦ְזֻג׮ְ ְ׮ך׮֮׷

Slide 73

Slide 73 text

ActorͷΤʔςϧ 㹂⯓ך֮׷ةفٕ׾⢪ֲה"DUPSךؒ٦ذ ٕחז׷ 31$ָ知⽃ ת׌欰ת׸ְזְ،ؙة٦חًحإ٦آ׾ 鷏׸׷ 5$1*1׌ה湱䔲ꨇ׃ְ ['oso-matz', method, args]

Slide 74

Slide 74 text

Rinda͕ActorΛแؚ͍ͯ͠ΔΑ͏͢ ק׵ずׄ㔳׌

Slide 75

Slide 75 text

جຊ෼ࢄσʔλߏ଄ମ 3JOEB -JOEB דאֲַ㛇劤涸ז؎ر؍ؔي #BH せ⵸ד،ؙإأ ⡘縧ד،ؙإأ ֶתֽ ة؎ىؚٝחתא׻׷䗰ꂁ✲׾幾׵ׅطة ָ㢳ְךծ׻ַ׏׋

Slide 76

Slide 76 text

͠͹Β͓͘଴͍ͪͩ͘͞ ✓ ෼͘Β͍͔ͳ ✓ جຊͷΠσΟΦϜ

Slide 77

Slide 77 text

໰୊Λղ͘ 麣Ⱗכ׉׹׏׋ 如כ㉏겗׾鍑ֹזָ׵3JOEBך椚鍑׾帾׭ ׋ְ 椚鍑ָי׵ְ

Slide 78

Slide 78 text

໰୊Λղ͘ ָծ׉ך⵸ח䗳銲ז鑧겗ָ֮׷

Slide 79

Slide 79 text

eval ְא׮鑧겗חׅ׷ך׾鼘ֽגֹ׋堣腉 فٗإأ׾饯⹛׃גةفٕ׾⡲׷

Slide 80

Slide 80 text

eval $-JOEBדכ׉׸׊׸ך䒷侧׾鎘皾ׅ׷׋ ׭חⴽفٗإأ׾饯⹛ׅ׷ Ⰻגך鎘皾ֶָ׻׏׋׵ةفٕ׾縧ֻ ְ׻ײ׷؟٦غ٦׮ֿ׸ד⡲׸׷ ד׮ծוֲװ׏ג㹋鄲ׅ׷׿׌ eval("fact", 6, fact(6));

Slide 81

Slide 81 text

RindaͰͷeval 5ISFBE׾⢪ֲ GPSL׾⢪ֲ E3VCZ׾⢪ֲ

Slide 82

Slide 82 text

Thread 鎘皾חDPSF׾銲実׃זְז׵5ISFBEד״ְ ֶ䩛鯪 ts = Rinda::TupleSpace.new ts.write(['fact', 1, 1]) (2..6).each do |x| Thread.new(x) do |n| _, _, prev = ts.read(['fact', n - 1, nil]) ts.write(['fact', x, prev * x]) end end p ts.read(['fact', 6, nil])

Slide 83

Slide 83 text

Thread 鎘皾חDPSF׾銲実׃זְז׵5ISFBEד״ְ ֶ䩛鯪 ts = Rinda::TupleSpace.new ts.write(['fact', 1, 1]) (2..6).each do |x| Thread.new(x) do |n| _, _, prev = ts.read(['fact', n - 1, nil]) ts.write(['fact', x, prev * x]) end end p ts.read(['fact', 6, nil])

Slide 84

Slide 84 text

fork 3JOEBSJOEB@FWBMכGPSL׃׋فٗإأָ鎘 皾׃גةفٕ׾縧ֻ E3VCZ䗳銲 ꂁ䋒倯岀䘌׸׋ֽוHJUIVCח֮׷כ׆

Slide 85

Slide 85 text

҉هͯ͠ module Rinda module_function def rinda_eval(ts) ts = DRbObject.new(ts) unless DRbObject === ts pid = fork do Thread.current['DRb'] = nil DRb.stop_service DRb.start_service place = TupleSpaceProxy.new(ts) tuple = yield(place) place.write(tuple) rescue nil end Process.detach(pid) end end

Slide 86

Slide 86 text

҉هͯ͠ module Rinda module_function def rinda_eval(ts) ts = DRbObject.new(ts) unless DRbObject === ts pid = fork do Thread.current['DRb'] = nil DRb.stop_service DRb.start_service place = TupleSpaceProxy.new(ts) tuple = yield(place) place.write(tuple) rescue nil end Process.detach(pid) end end TupleSpaceͷproxyΛ࡞ΓɺforkݩͷdRubyΛऴΘΒͤͯɺࣗ෼ͷ෼ ͷdRubyΛىಈ͢Δɻ yieldͨ͠໭Γ஋Λwriteͯ͠ऴΘΓ

Slide 87

Slide 87 text

Rinda::rinda_eval require 'rinda/tuplespace' require 'rinda/eval' DRb.start_service ts = Rinda::TupleSpace.new ts.write(['fact', 1, 1]) (2..6).each do |x| Rinda::rinda_eval(ts) do |place| _, _, prev = place.read(['fact', x - 1, nil]) ['fact', x, prev * x] end end p ts.read(['fact', 6, nil])

Slide 88

Slide 88 text

Rinda::rinda_eval require 'rinda/tuplespace' require 'rinda/eval' DRb.start_service ts = Rinda::TupleSpace.new ts.write(['fact', 1, 1]) (2..6).each do |x| Rinda::rinda_eval(ts) do |place| _, _, prev = place.read(['fact', x - 1, nil]) ['fact', x, prev * x] end end p ts.read(['fact', 6, nil])

Slide 89

Slide 89 text

Rinda::rinda_eval require 'rinda/tuplespace' require 'rinda/eval' DRb.start_service ts = Rinda::TupleSpace.new ts.write(['fact', 1, 1]) (2..6).each do |x| Rinda::rinda_eval(ts) do |place| _, _, prev = place.read(['fact', x - 1, nil]) ['fact', x, prev * x] end end p ts.read(['fact', 6, nil]) ɹ֊৐ΛٻΊΔϓϩάϥϜ λωʹͳΔλϓϧΛ͓͖ɺ nͷ֊৐ΛٻΊΔϓϩηεΛevalͰ࡞Γ·͢ n-1ͷ݁ՌΛread͠ɺ৐ͨ݁͡ՌΛwrite͠·͢ ʢಛʹ଎͘ͳ͍Ͱ͢ʣ

Slide 90

Slide 90 text

֊৐ΛٻΊΔ

Slide 91

Slide 91 text

֊৐ΛٻΊΔ

Slide 92

Slide 92 text

֊৐ΛٻΊΔ

Slide 93

Slide 93 text

֊৐ΛٻΊΔ

Slide 94

Slide 94 text

֊৐ΛٻΊΔ

Slide 95

Slide 95 text

֊৐ΛٻΊΔ

Slide 96

Slide 96 text

֊৐ΛٻΊΔ

Slide 97

Slide 97 text

֊৐ΛٻΊΔ

Slide 98

Slide 98 text

֊৐ΛٻΊΔ

Slide 99

Slide 99 text

dRubyΛ࢖͏ ةفٕأل٦أ׾E3VCZדⰟ剣ׅ׷ ةفٕأل٦أ׾Ⱏ剣דֹ׷ז׵搀ꟼ⤘ז فٗإأד׮״ְ ٙ٦ؕך饯⹛ָFWBM״׶׭׿וְֻׁ סאֲֻ׵ְ ts = Rinda::TupleSpace.new DRb.start_service('drbunix:/tmp/rinda', ts) DRb.thread.join

Slide 100

Slide 100 text

evalͷ·ͱΊ 3JOEBך㜥さ✳אך㹋鄲ָ֮׷ 5ISFBE GPSL 3JOEBSJOEB@FWBM E3VCZ׾⢪ֲ䩛׮֮׷

Slide 101

Slide 101 text

໰୊Λઃఆ͢Δ ر؍٦فٓ٦صָؚٝ崧遤׏גְ׷ 傊⚅秀ח醱稆#1灇瑔׃ג׋ 㷕统׾넝鸞⻉ׅ׷ַ٦

Slide 102

Slide 102 text

͋Μ·Γ଎͘ͳΒͳ͍ 侧➂ך傈鎸׾ػؙ׏ג㹋꿀 ׍׏ה׮鸞ֻז׵זְ ֿ׸כ׮ֲتַً׮׃׸זְ

Slide 103

Slide 103 text

಺ੵͩ ⡲䨌㢌刿 ⚅歲⚥ך➂׋׍כDPT겲⡂䏝׾鎘皾ׅ׷ ךָ㥨ֹ׵׃ְ O如⯋ךⰻ琎鎘皾 ㉏겗ךꨇ׃ׁ׾锃侭׃װְׅ

Slide 104

Slide 104 text

໰୊Λղ͘ //⦐ךكؙزٕהծ⟣䠐ךكؙزٕךⰻ 琎׾鎘皾׃גծ剑㣐ךكؙزٕ׾鋅אֽ׷ كؙزٕכ//ך呓㶨朐ח呓秛ׁ׸׷ זֶكؙزٕכ♰如⯋ ׫׿זךوءٝألحؙחさ׻ׇג锃侭 ׃״ֲ https://gist.github.com/seki/ 6829d0f30e862cafeb9cfed4082957f8

Slide 105

Slide 105 text

֨ࢠঢ়ʹฒ΂ͨϕΫτϧ

Slide 106

Slide 106 text

͜Μͳ෩ʹ༻ҙ͢ΔΑ

Slide 107

Slide 107 text

ܭࢉ͸͜͏

Slide 108

Slide 108 text

ॱʹൺֱ͢Δ max

Slide 109

Slide 109 text

ॱʹൺֱ͢Δ

Slide 110

Slide 110 text

;ͭ͏ ת֮⹛ֻ 如כ穠卓ח岣湡׃גفٗإأ׾饯⹛ׅ׷噰 畭ז⡲䨌 穠卓⚛⴨岀הㄎל׸גְ׷ٌظ

Slide 111

Slide 111 text

ࠨʗ্ͱࣗ෼Λൺֱ͢Δ

Slide 112

Slide 112 text

ࠨʗ্ͱࣗ෼Λൺֱ͢Δ ر٦ةמהאמהא׾فٗإأחׅ׷ 䊩ծ♳ךر٦ةה荈ⴓ׾嫰鯰׃ג剑㣐⦼׾ 荈ⴓך⦼ה׃ג穄✪ׅ׷فٗإأ 〸♴ךفٗإأך穠卓ָ剑㣐⦼ فٗإأכ⣛㶷ׅ׷ر٦ة׾䖉א

Slide 113

Slide 113 text

ॲཧͷΑ͏͢

Slide 114

Slide 114 text

ॲཧͷΑ͏͢

Slide 115

Slide 115 text

ॲཧͷΑ͏͢

Slide 116

Slide 116 text

ॲཧͷΑ͏͢

Slide 117

Slide 117 text

N*Nͷϓϩηεʂ

Slide 118

Slide 118 text

͏͍ͨ͝ /ָֻ׵ְתד鑐׃׋ ׉׸⟃♳כ䙳ְ ؿ؋؎ٕ鎸鶢㶨ך♳ꣲֻ׷ַז ⯋ך鷵如鎘皾״׶׮鸞ֻז׏׋ ד׮$PSF侧״׶فٗإأָ׮ךׅ׀ֻ㢳ְ ״ז

Slide 119

Slide 119 text

ฒྻ౓ 䊩♳ծ〸♴דכず儗חⳢ椚דֹ׷فٗإأ ָ㼰זְ 㼎錬简ָ♧殢ꞿְ儗ָ׮׏ה׮ず儗חⳢ椚 ׃ג׷

Slide 120

Slide 120 text

Ұߦͣͭ΍ͬͯΈΔʁ ⚛⴨䏝ָ剑ⴱַ׵剑䖓תד㢌׻׵זְ ♧遤ה♧א♳ך遤ך穠卓ך剑㣐⦼׾実׭׷

Slide 121

Slide 121 text

ߦ୯Ґ

Slide 122

Slide 122 text

No content

Slide 123

Slide 123 text

͏͍ͨ͝ 䙼׏׋״׶鸞ֻז׵זַ׏׋ ֲ٦׬ $PSF侧הַكؙزٕך如⯋侧׾锃侭׃׋ ׵䋞劄ך穠卓ָ⳿׋ַ׮կ ׉׸כ׉׸ה׃ג植㹋涸זفٗإأ侧זך כ㸜䗰

Slide 124

Slide 124 text

ઐ໳ՈΛ͓͘ ְ׻ײ׷ٙ٦ؕ׾欽䠐ׅ׷ ً؎ٝךفٗإأכةأؙ׾#BHחⰅ׸׷ ٙ٦ؕכ♧א《׶⳿׃גծ鎘皾ծ穠卓׾ #BHח䨱ׅ

Slide 125

Slide 125 text

ϫʔΧ

Slide 126

Slide 126 text

ϝΠϯϓϩηε

Slide 127

Slide 127 text

ऴྃॲཧ

Slide 128

Slide 128 text

͏͍ͨ͝ ֲ׬ ➙㔐ך؛٦أדכ剑鸞׌׏׋ $PSF侧ח䘔ׄגٙ٦ؕך侧׾㢌ִ׷ךָし رؠ؎ٝה׃גכסאֲ ♶劤䠐

Slide 129

Slide 129 text

ཧղ͸ਂ·͔ͬͨͳ͋ 僴傈״׶כ濼׏ג׷ֿהָ㟓ִ׋

Slide 130

Slide 130 text

ࢲ͸ਂ·ͬͨ ➙תדFWBM׾鼘ֽגֹ׋ֽוծ؟ٝفٕ剅 ֻךכ知⽃׌׏׋ Ⳣ椚ךꅾׁ׾锃侭ׅ׷ךח㢳如⯋ךⰻ琎ָ ⤑ⵃ GPSLזךדر٦ةכDMPOFׁ׸ג׷

Slide 131

Slide 131 text

Θ͔Γʹ͍͘Θ͔ͬͯ΄͍͠ ͜ͱ 知⽃ז鍑岀כזְ׃ծְאד׮鸐欽ׅ׷ر ؠ؎ٝ׮זְ Ⱗ⡤涸זػًٓ٦ةח״׏ג鍑岀ָ㢌׻ ׷ה䙼ֲ״ ׉׸أ؛٦ٕׅ׿ך̒湱䩛ח׃זְ

Slide 132

Slide 132 text

͠͹Β͓͘଴͍ͪͩ͘͞ ✓ ෼͘Β͍͔ͳ ✓ ͓ΘΓ

Slide 133

Slide 133 text

·ͱΊ -JOEBה3JOEBך鑧׾׃ת׃׋ ⚛⴨فؚٗٓوח㢌䳔דֹ׋ַז