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

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

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

A87027204ff57be1dadbf36a78a73c1b?s=128

Takaki Hoshikawa

March 27, 2019
Tweet

Transcript

  1. 5.

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

    Kotlin/Native用に改変したものを使用 Kotlin's hidden costs - Benchmarks - SingleShotTime (一定回数回すのにかかる時間) で測定 https://github.com/oboenikui/kotlin-ios-benchmarks
  2. 8.

    ラムダ式 (クロージャ) の比較 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. 9.

    ラムダ式 (クロージャ) の比較 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. 11.

    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. 12.

    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. 19.

    AppCode (EAP) - 言わずと知れたSwift, Objective-Cを快適に書けるIDE - Kotlin/NativeプラグインもEAP版に提供中 - MPPを簡単に始められる! -

    stdlibのメソッドとかエラーになるのですが、そうならないノウハ ウをお持ちの方懇親会で教えてください!
  7. 20.

    Hopper Disassembler - Intel, ARM, PowerPC向けバイナリの逆アセンブルツール - 個人ライセンスは ¥11,272 (時価)、無償トライアル版あり

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