Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iOS、AndroidアプリをRubyで

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Watson Watson
March 05, 2016
500

 iOS、AndroidアプリをRubyで

RubyMotionの内部について、Hirosima Ruby Conferenceで発表した資料です。

Avatar for Watson

Watson

March 05, 2016
Tweet

Transcript

  1. RubyMotion ͱ͸ʁ • ωΠςΟϒΞϓϦΛ Ruby Ͱ։ൃՄೳ • iOS, OS X,

    tvOS, watchOS • Android • ίϯύΠϥɺϏϧυγεςϜɺϥϯλΠϜ͔Β ͳΔπʔϧνΣʔϯ
  2. ; 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 όΠφϦ ϥϯλΠϜ΍ ը૾ ΞϓϦ ίϯύΠϥ ϏϧυγεςϜ
  3. 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
  4. Dispatcher • ίϯύΠϧ͞Εͨશͯͷϝιουݺͼग़͠͸ Dispatcher Λܦ༝ • Ruby ͸શͯΦϒδΣΫτ • Objective-C

    ͸ΦϒδΣΫτҎ֎ʹ C ݴޠ༝དྷͷ int, double, char, long ,… ͳͲܕ͕͋Δ ϝιουݺͼग़͠ɺϦλʔϯ࣌ʹม׵
  5. ϝϞϦ؅ཧ ɿ iOS • Objective-C • ίϯύΠϧ࣌ʹɺΦϒδΣΫτ͕ෆཁʹͳΔՕॴ ʹ release ͢Δॲཧ͕ຒΊࠐ·ΕΔ

    • RubyMotion • ࣮ߦ࣌ʹɺෆཁͳΦϒδΣΫτΛ release ͍ͯ͠Δ ΍͍ͬͯΔ͜ͱ͸ಉ͡
  6. ϝϞϦ؅ཧ ɿ Android • RubyMotion • ΦϒδΣΫτ͸શͯ Java ΦϒδΣΫτ •

    Java ͷ GC ͕ద੾ʹॲཧ͢Δ 3VCZ.PUJPO͸Կ΋͍ͯ͠ͳ͍