Slide 1

Slide 1 text

iOSɺAndroidΞϓϦΛRubyͰ HipByte ౻ా ੩உ

Slide 2

Slide 2 text

ࣗݾ঺հ • 2012೥͔ΒHipByteࣾͰRubyMotionͷ։ൃɾ αϙʔτ • ͨ·ʹɺRubyͷόάΛݟ͚ͭͨΓ

Slide 3

Slide 3 text

RubyBiz ಛผ৆

Slide 4

Slide 4 text

࣮੷

Slide 5

Slide 5 text

RubyMotion ͱ͸ʁ

Slide 6

Slide 6 text

೥ɺԯ୆ͷεϚʔτϑΥϯ͕ग़ՙ

Slide 7

Slide 7 text

RubyMotion ͱ͸ʁ http://www.rubymotion.com/download/ ແྉ

Slide 8

Slide 8 text

RubyMotion ͱ͸ʁ • ωΠςΟϒΞϓϦΛ Ruby Ͱ։ൃՄೳ • iOS, OS X, tvOS, watchOS • Android • ίϯύΠϥɺϏϧυγεςϜɺϥϯλΠϜ͔Β ͳΔπʔϧνΣʔϯ

Slide 9

Slide 9 text

• ίϯύΠϥ • Rubyίʔυ͔ΒωΠςΟϒͳόΠφϦΛग़ྗ • ϏϧυγεςϜ • ίϯύΠϧ͞ΕͨόΠφϦ΍ɺϥϯλΠϜɺը૾ͳͲ ͷϦιʔεϑΝΠϧΛΞϓϦέʔγϣϯʹ·ͱΊΔ • ϥϯλΠϜ • DispatcherɺϝϞϦ؅ཧɺ૊ΈࠐΈΫϥε

Slide 10

Slide 10 text

; Function Attrs: uwtable define internal i64 @"rb_scope__application:didFinishLaunchingWithOptions:__"(i64 %self, i8* %sel, i64 %application, i64 %launchOptions) #11 { MainBlock: %argv1 = alloca i64, i32 2 call void @llvm.dbg.declare(metadata i64 %self, metadata !20, metadata !77), !dbg !81 %0 = alloca i64* %1 = alloca i64 store i64* %1, i64** %0 store i64 %application, i64* %1 %2 = alloca i8 store volatile i8 0, i8* %2 call void @llvm.dbg.declare(metadata i64 %application, metadata !21, metadata !77), ! dbg !81 %3 = alloca i64* %4 = alloca i64 store i64* %4, i64** %3 store i64 %launchOptions, i64* %4 %5 = alloca i8 store volatile i8 0, i8* %5 call void @llvm.dbg.declare(metadata i64 %launchOptions, metadata !22, metadata !77), ! dbg !81 LLVM-IR όΠφϦ ϥϯλΠϜ΍ ը૾ ΞϓϦ ίϯύΠϥ ϏϧυγεςϜ

Slide 11

Slide 11 text

RubyMotion Runtime

Slide 12

Slide 12 text

"OESPJE4%, %BMWJL"35 3VCZ.PUJPO +/* +BWB J044%, 0CKFDUJWF$SVOUJNF 3VCZ.PUJPO 0CKFDUJWF$ iOS Android

Slide 13

Slide 13 text

RubyMotion ϥϯλΠϜ %JTQBUDIFS ϝϞϦ؅ཧ ૊ΈࠐΈΫϥε

Slide 14

Slide 14 text

Dispatcher

Slide 15

Slide 15 text

Dispatcher entry_point: ; preds = %MainBlock %6 = load i8** @3 %7 = load i8** @4 %8 = load i32* @1 %9 = load i8** @5 %10 = load i32* @6 %11 = load i8** @2 %12 = call fastcc i32 @vm_get_const(i32 %8, i8* %9, i32 %10, i32 1, i8* %11), !dbg !97 %13 = call fastcc i32 @vm_dispatch(i32 %self, i32 %12, i8* %7, i8* null, i8 0, i32 0, i32* null), !dbg !97

Slide 16

Slide 16 text

Dispatcher • ίϯύΠϧ͞Εͨશͯͷϝιουݺͼग़͠͸ Dispatcher Λܦ༝ • Ruby ͸શͯΦϒδΣΫτ • Objective-C ͸ΦϒδΣΫτҎ֎ʹ C ݴޠ༝དྷͷ int, double, char, long ,… ͳͲܕ͕͋Δ ϝιουݺͼग़͠ɺϦλʔϯ࣌ʹม׵

Slide 17

Slide 17 text

Dispatcher • ม׵ॲཧͷ಺༰͸ίϯύΠϧ࣌ʹຒΊࠐΉ

Slide 18

Slide 18 text

ϝϞϦ؅ཧ ɿ iOS • Objective-C • ίϯύΠϧ࣌ʹɺΦϒδΣΫτ͕ෆཁʹͳΔՕॴ ʹ release ॲཧ͕ຒΊࠐ·ΕΔ • RubyMotion • ࣮ߦ࣌ʹɺෆཁͳΦϒδΣΫτΛ release ͍ͯ͠Δ

Slide 19

Slide 19 text

ϝϞϦ؅ཧ ɿ iOS • Objective-C • ίϯύΠϧ࣌ʹɺΦϒδΣΫτ͕ෆཁʹͳΔՕॴ ʹ release ͢Δॲཧ͕ຒΊࠐ·ΕΔ • RubyMotion • ࣮ߦ࣌ʹɺෆཁͳΦϒδΣΫτΛ release ͍ͯ͠Δ ΍͍ͬͯΔ͜ͱ͸ಉ͡

Slide 20

Slide 20 text

ϝϞϦ؅ཧ ɿ Android • RubyMotion • ΦϒδΣΫτ͸શͯ Java ΦϒδΣΫτ • Java ͷ GC ͕ద੾ʹॲཧ͢Δ 3VCZ.PUJPO͸Կ΋͍ͯ͠ͳ͍

Slide 21

Slide 21 text

Ruby? • Ruby1.9 ϕʔε • No GVL

Slide 22

Slide 22 text

RubyMotion • Objective-C ΍ Java Ͱ։ൃ͢ΔͷͱḮ৭͕ͳ ͍ύϑΥʔϚϯεͷΞϓϦΛ։ൃՄೳ • ϓϥοτϑΥʔϜ API Λࣗ༝ʹ࢖༻Մೳ http://www.rubymotion.com/download/

Slide 23

Slide 23 text

• iOS ͱ Android ͰίʔυΛ࢖͍ճͤΔʁ

Slide 24

Slide 24 text

Cross-platform libraries

Slide 25

Slide 25 text

motion-game • cocos2d-x Λར༻ͨ͠ɺΫϩεϓϥοτϑΥʔϜήʔϜ ΤϯδϯϥΠϒϥϦ

Slide 26

Slide 26 text

Flow • ΫϩεϓϥοτϑΥʔϜͳɺωοτϫʔΫͳͲར༻ස౓ ͷߴ͍APIΛఏڙ

Slide 27

Slide 27 text

http://www.rubymotion.com/ download/