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

Kotlin/NativeのiOSにおけるオーバーヘッド

 Kotlin/NativeのiOSにおけるオーバーヘッド

マイクロベンチマークを用いてKotlin/NativeのiOSにおけるオーバーヘッドを測定していきます。
(指摘があったので注釈)
測定はデバッグビルドで行いました。スプレッドシートにはリリースビルドでの結果も後日反映いたします。

Takaki Hoshikawa

March 27, 2019
Tweet

More Decks by Takaki Hoshikawa

Other Decks in Technology

Transcript

  1. マイクロベンチマークについて - Swift, Kotlin/Nativeで同等の処理を書き、iOS端末 (第5世代 iPad)上で実行 - ベンチマークの測定側のコードも各言語で実装 - ベンチマークに用いるコードは、以下の記事のものを一部

    Kotlin/Native用に改変したものを使用 Kotlin's hidden costs - Benchmarks - SingleShotTime (一定回数回すのにかかる時間) で測定 https://github.com/oboenikui/kotlin-ios-benchmarks
  2. ラムダ式 (クロージャ) の比較 inlineの有無についても比較 // no inline fun transaction(db: DB,

    body: ((DB) -> Int)): Int { db.beginTransaction() return try { val result = body(db) db.setTransactionSuccessful() result } finally { db.endTransaction() } } Kotlinコード Swiftコード
  3. ラムダ式 (クロージャ) の比較 inlineの有無についても比較 // inline inline fun inlineTransaction(db: DB,

    body: ((DB) -> Int)): Int { db.beginTransaction() return try { val result = body(db) db.setTransactionSuccessful() result } finally { db.endTransaction() } } Kotlinコード Swiftコード
  4. in (contains) の比較 IntおよびStringのRange内存在判定を比較 // 1..10 (local) fun isInOneToTenWithLocalRange(i: Int)

    = i in 1..10 // 1..10 (indirect) private val myRange get() = 1..10 fun isInOneToTenWithIndirectRange(i: Int) = i in myRange
  5. in (contains) の比較 IntおよびStringのRange内存在判定を比較 // Alfred..Alicia (local) fun isBetweenNamesWithLocalRange(name: String)

    = name in "Alfred".."Alicia" // Alfred..Alicia (constant) private val NAMES = "Alfred".."Alicia" fun isBetweenNamesWithLocalRange(name: String) = name in NAMES
  6. AppCode (EAP) - 言わずと知れたSwift, Objective-Cを快適に書けるIDE - Kotlin/NativeプラグインもEAP版に提供中 - MPPを簡単に始められる! -

    stdlibのメソッドとかエラーになるのですが、そうならないノウハ ウをお持ちの方懇親会で教えてください!
  7. Hopper Disassembler - Intel, ARM, PowerPC向けバイナリの逆アセンブルツール - 個人ライセンスは ¥11,272 (時価)、無償トライアル版あり

    - アイコンがXcodeっぽいけど多分無関係 - C-likeな擬似コードに逆コンパイルする機能があるので、自分のよ うなアセンブリ読みたくないマンにも優しい - Kotlin/Native関連のバグ調査に使えそう