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

どのKotlinが一番速い?

 どのKotlinが一番速い?

Zli × excite 合同LT にて発表

3c7020b33ae8880dd9514b6469a28ae0?s=128

Yuta Tomiyama

September 26, 2020
Tweet

Transcript

  1. どのKotlinが一番速い? 2020/09/26 Zli × excite 合同LT

  2. 自己紹介 HN: マヤミト 本名: 富山雄太 会津大学26期 (学部3年) Zli 現代表 GitHub:

    https://github.com/yt8492 趣味: なんでもKotlinで作ること yt8492.com Twitter: yt8492
  3. 前提知識: Kotlinについて - Androidアプリ開発などに主に使われているJVM言語 - Kotlin/JSはKotlinをJSにトランスパイルする - Kotlin/NativeはKotlinをネイティブバイナリにコンパイルできる 011011 001010

    101110 110001
  4. ある日のぼく 「Kotlinたのし〜〜〜〜〜!!!!!!」 「Kotlin/JSたのし〜〜〜〜〜!!!!!!」 「Kotlin/Nativeたのし〜〜〜〜〜!!!!!!」 「どのKotlinが一番速いんだ……?」

  5. 検証方法 1. Kotlin/MPPでプラットフォームに依存しないテスト用コードを書く 2. ビルドする a. 実行可能なjarファイルを生成する b. nodeで実行可能なjsファイルを生成する c.

    MacOSネイティブで実行可能なバイナリファイルを生成する 3. timeコマンドで計測する
  6. 環境 - MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)

    - macOS Catalina 10.15.6 - CPU 2.3GHz クアッドコアIntel Core i7 - メモリ 32GB 3733MHz - OpenJDK 1.8.0_265 - node 12.18.3
  7. テスト用コード ランダムに生成した配列をマージソートするだけのプログラム

  8. 各プラットフォームから参照する commonモジュールに置いたテスト用コードを各プラットフォー ムのモジュールから参照する プラットフォームごとにmain関数を用意し、そこからテスト用の 関数を呼び出す

  9. JVM向けにビルド - Gradleのapplication pluginとshadow jar pluginの設定をjvm/build.gradle.ktsに 記述 - GradleのshadowJarタスクを実行し実行可能なjarファイルを生成 ./gradlew

    :jvm:shadowJar - jvm/build/libs以下に生成される
  10. Node.js向けにビルド - Kotlin/JSのbrowser向けの設定をjs/build.gradle.ktsに記述 - webpack-node-externalsの依存を追加し、node向けのビルドの設定を記述 - GradleのbrowserProductionWebpackタスクを実行しjsファイルを生成 ./gradlew :js:browserProductionWebpack -

    js/build/distributions以下に生成される
  11. MacOSネイティブ向けにビルド - Kotlin/NativeのMacOS向けの設定をnative/build.gradle.ktsに記述 - GradleのmacosMainBinariesタスクを実行しバイナリファイルを生成 ./gradlew :native:macosMainBinaries - native/build/bin/macos/releaseExecutable以下に生成される

  12. それぞれの実行結果

  13. timeコマンドを使って測定 - zshのtimeコマンドを使い、実行時間を測定する - それぞれ10回ずつ実行し、平均値を見る

  14. 予想 - JVMのほうがNode.jsより早そう - バイナリになるKotlin/Nativeは結構速いのでは?

  15. Kotlin/JVM 測定結果 user: 1.229s system: 0.18s total: 1.181s

  16. Kotlin/JS 測定結果 user: 1.683s system: 0.103s total: 1.716s

  17. Kotlin/Native 測定結果 user: 2.060s system: 0.068s total: 2.140s

  18. おまけ: GraalVM native-image jarファイルをnative-imageに 一番速かったが今回の趣旨からは若干離れる気がしたので割愛

  19. 実験結果 - Kotlin/JVM < Kotlin/JS < Kotlin/Native - Kotlin/Nativeはtotalで見るとKotlin/JVMの倍近く実行時間がかかったが、system 時間は一番速かった

    - やはりJVMは速い
  20. 今回のリポジトリ yt8492/SpeedTest https://github.com/yt8492/SpeedTest