Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
どのKotlinが一番速い?
Yuta Tomiyama
September 26, 2020
Programming
1
75
どのKotlinが一番速い?
Zli × excite 合同LT にて発表
Yuta Tomiyama
September 26, 2020
Tweet
Share
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
46
Compose for Webを始めよう
yt8492
0
150
Compose Multiplatform 1.0.0
yt8492
0
58
Kotlin/NativeからCの標準ライブラリを呼び出そう
yt8492
0
59
2021年のKotlin入門
yt8492
0
140
Jetpack Compose + Decomposeで始めるクロスプラットフォーム開発
yt8492
1
170
Kotlin/MPPでブログを作った話
yt8492
0
470
サキドリJetpack Compose for Web
yt8492
0
81
Kotlin/JSでもSSGしたい!
yt8492
1
88
Other Decks in Programming
See All in Programming
僕が便利だと感じる Snow Monkey の特徴/20220723_Gifu_WordPress_Meetup
oleindesign
0
110
AWS Config Custom Rule、ノーコードでできるかな?
watany
0
250
20220706_Google Apps Scriptを実演で学ぶ~ GAS × Slack ~
apachan
2
630
There's an API for that!
mariatta
PRO
0
110
WindowsコンテナDojo:第6回 Red Hat OpenShift入門
oniak3ibm
PRO
0
180
読みやすいコード クラスメソッド 2022 年度新卒研修
januswel
0
2.9k
Getting Started With Data Structures
adoranwodo
1
270
実践 SpiceDB - クライドネイティブ時代をサバイブできるパーミッション管理の実装を目指して / Practical SpiceDB
lmt_swallow
0
140
アジャイルで始める データ分析基盤構築
nagano
1
920
How GitHub Supports Vim License Detection, The Five Years Journey
othree
1
390
10歳の minne から、これから長く続くプロダクトを作るすべての人へ
tsumichan
9
3.7k
Carp言語さわってみた 〜鯉を取り戻せ編〜
tsin45
0
110
Featured
See All Featured
Done Done
chrislema
174
14k
The Brand Is Dead. Long Live the Brand.
mthomps
46
2.7k
Making Projects Easy
brettharned
98
4.4k
Music & Morning Musume
bryan
35
4.3k
Build your cross-platform service in a week with App Engine
jlugia
219
17k
The Cult of Friendly URLs
andyhume
68
4.8k
Clear Off the Table
cherdarchuk
79
290k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
269
12k
Statistics for Hackers
jakevdp
782
210k
Debugging Ruby Performance
tmm1
65
10k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
181
15k
Facilitating Awesome Meetings
lara
29
4.1k
Transcript
どのKotlinが一番速い? 2020/09/26 Zli × excite 合同LT
自己紹介 HN: マヤミト 本名: 富山雄太 会津大学26期 (学部3年) Zli 現代表 GitHub:
https://github.com/yt8492 趣味: なんでもKotlinで作ること yt8492.com Twitter: yt8492
前提知識: Kotlinについて - Androidアプリ開発などに主に使われているJVM言語 - Kotlin/JSはKotlinをJSにトランスパイルする - Kotlin/NativeはKotlinをネイティブバイナリにコンパイルできる 011011 001010
101110 110001
ある日のぼく 「Kotlinたのし〜〜〜〜〜!!!!!!」 「Kotlin/JSたのし〜〜〜〜〜!!!!!!」 「Kotlin/Nativeたのし〜〜〜〜〜!!!!!!」 「どのKotlinが一番速いんだ……?」
検証方法 1. Kotlin/MPPでプラットフォームに依存しないテスト用コードを書く 2. ビルドする a. 実行可能なjarファイルを生成する b. nodeで実行可能なjsファイルを生成する c.
MacOSネイティブで実行可能なバイナリファイルを生成する 3. timeコマンドで計測する
環境 - 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
テスト用コード ランダムに生成した配列をマージソートするだけのプログラム
各プラットフォームから参照する commonモジュールに置いたテスト用コードを各プラットフォー ムのモジュールから参照する プラットフォームごとにmain関数を用意し、そこからテスト用の 関数を呼び出す
JVM向けにビルド - Gradleのapplication pluginとshadow jar pluginの設定をjvm/build.gradle.ktsに 記述 - GradleのshadowJarタスクを実行し実行可能なjarファイルを生成 ./gradlew
:jvm:shadowJar - jvm/build/libs以下に生成される
Node.js向けにビルド - Kotlin/JSのbrowser向けの設定をjs/build.gradle.ktsに記述 - webpack-node-externalsの依存を追加し、node向けのビルドの設定を記述 - GradleのbrowserProductionWebpackタスクを実行しjsファイルを生成 ./gradlew :js:browserProductionWebpack -
js/build/distributions以下に生成される
MacOSネイティブ向けにビルド - Kotlin/NativeのMacOS向けの設定をnative/build.gradle.ktsに記述 - GradleのmacosMainBinariesタスクを実行しバイナリファイルを生成 ./gradlew :native:macosMainBinaries - native/build/bin/macos/releaseExecutable以下に生成される
それぞれの実行結果
timeコマンドを使って測定 - zshのtimeコマンドを使い、実行時間を測定する - それぞれ10回ずつ実行し、平均値を見る
予想 - JVMのほうがNode.jsより早そう - バイナリになるKotlin/Nativeは結構速いのでは?
Kotlin/JVM 測定結果 user: 1.229s system: 0.18s total: 1.181s
Kotlin/JS 測定結果 user: 1.683s system: 0.103s total: 1.716s
Kotlin/Native 測定結果 user: 2.060s system: 0.068s total: 2.140s
おまけ: GraalVM native-image jarファイルをnative-imageに 一番速かったが今回の趣旨からは若干離れる気がしたので割愛
実験結果 - Kotlin/JVM < Kotlin/JS < Kotlin/Native - Kotlin/Nativeはtotalで見るとKotlin/JVMの倍近く実行時間がかかったが、system 時間は一番速かった
- やはりJVMは速い
今回のリポジトリ yt8492/SpeedTest https://github.com/yt8492/SpeedTest