Slide 1

Slide 1 text

ʙγϯϓϧͳαʔόͷ֦ுΛ୊ࡐʹઆ໌͠·͢ʙ ܀ྛ݈ଠ࿠(.01FQBCP *OD ਅՆͷٕज़෦#13ࣨ5FDI.5(ʢࣾ಺ษڧձʣ ϛυϧ΢ΣΞʹmrubyΛ૊ΈࠐΉํ๏

Slide 2

Slide 2 text

(.0ϖύϘגࣜձࣾ ܀ྛ݈ଠ࿠@kentaro औక໾$50 https://kentarok.org

Slide 3

Slide 3 text

ຊτʔΫʹΑͬͯಘΒΕΔ͜ͱ w$ͷϓϩάϥϜʹNSVCZΛ૊ΈࠐΈɺNSVCZͷεΫϦ ϓτΛ࣮ߦ͢Δํ๏͕Θ͔Γ·͢ wطଘͷϛυϧ΢ΣΞʹɺNSVCZΛ૊ΈࠐΜͰ֦ுͰ͖ ΔΑ͏ʹͳΓ·͢ wͭ·ΓɺOHY@NSVCZͷΑ͏ͳ΋ͷΛ࡞ΕΔΑ͏ʹͳ Δͱ͍͏͜ͱͰ͢Ͷʂʢݪཧతʹ͸ʣ

Slide 4

Slide 4 text

໨࣍ ֦ு͢Δϛυϧ΢ΣΞ NSVCZ૊ΈࠐΈͷखॱ ͓ΘΓʹ

Slide 5

Slide 5 text

֦ு͢Δϛυϧ΢ΣΞ

Slide 6

Slide 6 text

FDIPαʔόΛ֦ு͍͖ͯ͠·͢

Slide 7

Slide 7 text

FDIPαʔόɺΫϥΠΞϯτͷ3VCZͰͷྫ αʔό ΫϥΠΞϯτ

Slide 8

Slide 8 text

FDIPαʔόɺΫϥΠΞϯτΛ࣮ߦ ೖྗ͞ΕͨจࣈྻΛ ͦͷ··ฦ͚ͩ͢ͷ αʔόɻ

Slide 9

Slide 9 text

ͳͥFDIPαʔό͔ʁ w࣮ࡍ͸ɺ$Ͱॻ͍ͨFDIPαʔόΛ֦ு͠·͢ w͜ͷFDIPαʔόΛɺͨͱ͑͹OHJOYͷΑ͏ͳϛυϧ΢Σ Ξͩͱࢥ͍ͬͯͩ͘͞ɻݪཧతʹ͸ɺಉ͡Α͏ͳ΍Γ ํͰ֦ுͰ͖·͢ w͍͖ͳΓେ͖ͳϛυϧ΢ΣΞʹऔΓ૊ΜͰ΋ͭΒ͍˞ ͷͰɺ؆୯ͳ΋ͷΛྫʹ͸͡Ί͍͖ͯ·͠ΐ͏ ˞$ݴޠͱNSVCZͷ஌ࣝʹՃ͑ͯɺର৅ͱͳΔϛυϧ΢ΣΞΛ֦ு͢Δϊ΢ϋ΢΋஌Δඞཁ͕͋Δ͔Βɻ

Slide 10

Slide 10 text

NSVCZΛ૊ΈࠐΜͩFDIPαʔό ೖྗ͞ΕͨจࣈྻΛ NSVCZͷίʔυͱ͠ ͯධՁ͠ɺ݁ՌΛฦ ͢αʔό

Slide 11

Slide 11 text

֦ுͨ͠FDIPαʔόͷಛ௃ w༩͑ΒΕͨจࣈྻΛɺNSVCZͷίʔυͱͯ͠ධՁ͢Δ wNSVCZͷίʔυΛ࣮ߦͨ݁͠ՌͷܕΛ൑ผͯ͠ɺద੾ ͳจࣈྻΛฦ͢ wFDIPαʔόͷߏ଄ମʢ(em * ܕʣͷఏڙ͢Δϝϯό ΍ؔ਺ʹNSVCZίʔυ͔Β৮ΕΒΕΔ

Slide 12

Slide 12 text

NSVCZ૊ΈࠐΈͷखॱ

Slide 13

Slide 13 text

૊ΈࠐΈͷखॱ ೖྗ͞ΕͨจࣈྻΛNSVCZͷίʔυͱͯ͠ධՁ͢Δ NSVCZͷίʔυͱ૊ΈࠐΈର৅ͷϛυϧ΢ΣΞͱͷ ؒͰɺ஋Λద੾ͳܕʹม׵͢Δ NSVCZͷίʔυத͔Βϛυϧ΢ΣΞͷίʔυʹ৮Ε ͍ͨ৔߹͸ɺΫϥεͱϝιουΛ࡞੒͢Δ MJCNSVCZΛϛυϧ΢ΣΞʹ૊ΈࠐΉ

Slide 14

Slide 14 text

ೖྗ͞ΕͨจࣈྻΛ NSVCZͷίʔυͱͯ͠ධՁ͢Δ

Slide 15

Slide 15 text

ೖྗΛNSVCZͷίʔυͱ࣮ͯ͠ߦ

Slide 16

Slide 16 text

͔͜͜ΒͲ͏΍ͬͯઌʹਐΉ͔ʁ

Slide 17

Slide 17 text

NSVCZͱϛυϧ΢ΣΞͷؒͰ ஋ͷܕม׵Λ͢Δ

Slide 18

Slide 18 text

ϛυϧ΢ΣΞˠNSVCZˠϛυϧ΢ΣΞ NSVCZͷ ੈք ϛυϧ΢ΣΞͷ ੈք ϛυϧ΢ΣΞͷ ੈք (char * ܕͰ ίʔυΛ౉͢˞ mrb_valueܕ ͔Βద੾ͳܕ΁ม׵ ˞ࠓճ͸ͦ͏͍ͯ͠Δ͚ͩͰɺ࣮ࡍʹ͸ͦͷଞʹ΋ϑΝΠϧΛΘͨ͢ͱ͔͍Ζ͍Ζํ๏͕͋Γ·͢ɻ

Slide 19

Slide 19 text

mruby_valueܕ͔Βͷܕม׵ ࣮ࡍͷܕΛ ൑ఆ͢Δ ܕ͝ͱʹ ม׵͍ͯ͘͠

Slide 20

Slide 20 text

લϖʔδͷิ଍ wࠓճͷྫ͸؆୯ͳFDIPαʔόͳͷͰɺͲͷܕͰ͋ͬ ͯ΋͢΂ͯ(char * ܕʹม׵͍ͯ͠·͢ wͨͩ͠ɺݩͷܕ͕Θ͔ΔΑ͏ɺNSVCZίʔυ಺Ͱͷ ܕ໊Λࣔ͢จࣈྻΛ෇Ճ͍ͯ͠·͢ɻ wҰൠతʹ͸ɺ૊ΈࠐΈର৅ͷϛυϧ΢ΣΞ͕ظ଴͢Δ ܕʹม׵͍͖ͯ͠·͢

Slide 21

Slide 21 text

NSVCZίʔυͷத͔Β ϛυϧ΢ΣΞͷத਎ʹ৮Δ

Slide 22

Slide 22 text

FDIPαʔόͷίΞߏ଄ମ typedef struct em_t { int reply_count; // ϦΫΤετ΁ͷฦ৴ճ਺ char *reply_prefix; // ϓϩϯϓτͷจࣈྻ mrb_state *mrb; } em; Emߏ଄ମͷఆٛ

Slide 23

Slide 23 text

NSVCZͷίʔυ͔Βϛυϧ΢ΣΞʹ৮Δ NSVCZ͔Β Emߏ଄ମͷ ίʔυΛݺͿ Χ΢ϯτ͕ ͞Ε͍ͯΔ NSVCZ͔Β Emߏ଄ମͷ ίʔυΛݺͿ ϓϩϯϓτͷ จࣈ͕มԽ

Slide 24

Slide 24 text

NSVCZʹΫϥεͱϝιουΛຒΊࠐΉ EmΫϥεΛ ࡞Δ EmΫϥεʹ ϝιουΛ࡞Δ

Slide 25

Slide 25 text

mrb_valueܕ ͔Βద੾ͳܕ΁ม׵ NSVCZˠϛυϧ΢ΣΞˠNSVCZ ϛυϧ΢ΣΞͷ ੈք NSVCZͷ ੈք NSVCZͷ ੈք mrb_valueܕ ΁ม׵ ͖ͬ͞ͱٯͩͶ

Slide 26

Slide 26 text

ϝιουΛఆٛ͢Δ Em ߏ଄ମΛ औΓग़͢ Em ߏ଄ମͷ ϝϯό஋Λมߋ

Slide 27

Slide 27 text

ϙΠϯτmrb_stateͷudϝϯό mrb_value em_mrb_method_set_reply_prefix(mrb_state *mrb, mrb_value self); ϝιουఆٛͷγάωνϟ͸ҎԼͷ௨ΓͳͷͰɺ em->mrb->ud = self; // udϝϯό͸(void *)ܕ // ……snip…… em *obj = (em *)mrb->ud; // ͳͷͰɺऔΓग़͢ͱ͖ʹΩϟετ͢Δ ͋ͱͰ࢖͏ͨΊʹmrb->udʹEmߏ଄ମΛೖΕ͓ͯ͘

Slide 28

Slide 28 text

MJCNSVCZΛ ϛυϧ΢ΣΞʹ૊ΈࠐΉ

Slide 29

Slide 29 text

MJCNSVCZΛ૊ΈࠐΉ $ gcc src/em.c src/em_server.c \ -Iinclude -Ivendor/mruby/include \ -Lvendor/mruby/build/host/lib -lmruby \ -o build/echo-mruby ҎԼͷΑ͏ʹϏϧυͯ͠ɺMJCNSVCZΛ૊ΈࠐΉ $ git clone [email protected]:mruby/mruby.git vendor/mruby $ cd vendor/mruby && rake all NSVCZΛ΋͖ͬͯͯϏϧυ͢Δ

Slide 30

Slide 30 text

΋ͬͱ͍͍ํ๏͸ˣΛࢀরͷ͜ͱ http://hb.matsumoto-r.jp/entry/2015/02/07/011237

Slide 31

Slide 31 text

͓ΘΓʹ

Slide 32

Slide 32 text

͋ͱ͸ˣΛΈͯͬͨΒ࡞ΕΔ https://github.com/kentaro/echo-mruby

Slide 33

Slide 33 text

͓ΘΓʹ w͍͖ͳΓ͍ͭ͝ϛυϧ΢ΣΞΛ֦ு͠Α͏ͱ͢Δͱɺ NSVCZͱؔ܎ͳ͍ͱ͜ΖͰΘ͔Βͳ͘ͳΔͷͰɺ؆୯ ͳྫͰ૊ΈࠐΈΛߦͬͯΈ·ͨ͠ w͓࢖͍ͷϛυϧ΢ΣΞͷ֦ுੑʹࠔͬͨΒɺNSVCZΛ ૊ΈࠐΉ͜ͱͰָ͕Ͱ͖ͳ͍͔ߟ͑ͯΈ·͠ΐ͏ w͋ͱ͸ɺ͍͍ײ͡ʹόʔϯʂͱΑΖ͘͠

Slide 34

Slide 34 text

NSVCZ΍ΔͷʹϖύϘΊͪΌ࠷ߴ ΤϥʔͰϋϚͬͯࢮΜͰ͚ͨͲɺ @matsumotory @udzura ͷ໊྆ʹฉ͍ͨΒ͙͢ղܾ͠ ͨ