Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iOS、AndroidアプリをRubyで
Search
Watson
March 05, 2016
1
480
iOS、AndroidアプリをRubyで
RubyMotionの内部について、Hirosima Ruby Conferenceで発表した資料です。
Watson
March 05, 2016
Tweet
Share
More Decks by Watson
See All by Watson
RMagick, migrate to ImageMagick 7 #RubyKaigi #RubyKaigi2019
watson
0
10k
ゲストさんのご紹介
watson
1
780
Magick
watson
0
11k
Improve JSON Performance
watson
2
990
fastlane 奮闘記
watson
0
81
How to optimize Ruby internal.
watson
3
3k
RubyMotion 2.0
watson
6
2.8k
Differences CRuby/MacRuby/RubyMotion
watson
5
5.7k
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
Speed Design
sergeychernyshev
32
1.1k
Code Reviewing Like a Champion
maltzj
525
40k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Building an army of robots
kneath
306
46k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Transcript
iOSɺAndroidΞϓϦΛRubyͰ HipByte ౻ా ੩உ
ࣗݾհ • 2012͔ΒHipByteࣾͰRubyMotionͷ։ൃɾ αϙʔτ • ͨ·ʹɺRubyͷόάΛݟ͚ͭͨΓ
RubyBiz ಛผ
࣮
RubyMotion ͱʁ
ɺԯͷεϚʔτϑΥϯ͕ग़ՙ
RubyMotion ͱʁ http://www.rubymotion.com/download/ ແྉ
RubyMotion ͱʁ • ωΠςΟϒΞϓϦΛ Ruby Ͱ։ൃՄೳ • iOS, OS X,
tvOS, watchOS • Android • ίϯύΠϥɺϏϧυγεςϜɺϥϯλΠϜ͔Β ͳΔπʔϧνΣʔϯ
• ίϯύΠϥ • Rubyίʔυ͔ΒωΠςΟϒͳόΠφϦΛग़ྗ • ϏϧυγεςϜ • ίϯύΠϧ͞ΕͨόΠφϦɺϥϯλΠϜɺը૾ͳͲ ͷϦιʔεϑΝΠϧΛΞϓϦέʔγϣϯʹ·ͱΊΔ •
ϥϯλΠϜ • DispatcherɺϝϞϦཧɺΈࠐΈΫϥε
; 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 όΠφϦ ϥϯλΠϜ ը૾ ΞϓϦ ίϯύΠϥ ϏϧυγεςϜ
RubyMotion Runtime
"OESPJE4%, %BMWJL"35 3VCZ.PUJPO +/* +BWB J044%, 0CKFDUJWF$SVOUJNF 3VCZ.PUJPO 0CKFDUJWF$ iOS
Android
RubyMotion ϥϯλΠϜ %JTQBUDIFS ϝϞϦཧ ΈࠐΈΫϥε
Dispatcher
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
Dispatcher • ίϯύΠϧ͞Εͨશͯͷϝιουݺͼग़͠ Dispatcher Λܦ༝ • Ruby શͯΦϒδΣΫτ • Objective-C
ΦϒδΣΫτҎ֎ʹ C ݴޠ༝དྷͷ int, double, char, long ,… ͳͲܕ͕͋Δ ϝιουݺͼग़͠ɺϦλʔϯ࣌ʹม
Dispatcher • มॲཧͷ༰ίϯύΠϧ࣌ʹຒΊࠐΉ
ϝϞϦཧ ɿ iOS • Objective-C • ίϯύΠϧ࣌ʹɺΦϒδΣΫτ͕ෆཁʹͳΔՕॴ ʹ release ॲཧ͕ຒΊࠐ·ΕΔ
• RubyMotion • ࣮ߦ࣌ʹɺෆཁͳΦϒδΣΫτΛ release ͍ͯ͠Δ
ϝϞϦཧ ɿ iOS • Objective-C • ίϯύΠϧ࣌ʹɺΦϒδΣΫτ͕ෆཁʹͳΔՕॴ ʹ release ͢Δॲཧ͕ຒΊࠐ·ΕΔ
• RubyMotion • ࣮ߦ࣌ʹɺෆཁͳΦϒδΣΫτΛ release ͍ͯ͠Δ ͍ͬͯΔ͜ͱಉ͡
ϝϞϦཧ ɿ Android • RubyMotion • ΦϒδΣΫτશͯ Java ΦϒδΣΫτ •
Java ͷ GC ͕దʹॲཧ͢Δ 3VCZ.PUJPOԿ͍ͯ͠ͳ͍
Ruby? • Ruby1.9 ϕʔε • No GVL
RubyMotion • Objective-C Java Ͱ։ൃ͢ΔͷͱḮ৭͕ͳ ͍ύϑΥʔϚϯεͷΞϓϦΛ։ൃՄೳ • ϓϥοτϑΥʔϜ API
Λࣗ༝ʹ༻Մೳ http://www.rubymotion.com/download/
• iOS ͱ Android ͰίʔυΛ͍ճͤΔʁ
Cross-platform libraries
motion-game • cocos2d-x Λར༻ͨ͠ɺΫϩεϓϥοτϑΥʔϜήʔϜ ΤϯδϯϥΠϒϥϦ
Flow • ΫϩεϓϥοτϑΥʔϜͳɺωοτϫʔΫͳͲར༻ස ͷߴ͍APIΛఏڙ
http://www.rubymotion.com/ download/