Kotlinをネイティブコンパイルしてみました。
Kotlinのインストール
WindowsのWSLで実行したのでSDKMANを使いました。
https://sdkman.io/
$ curl -s https://get.sdkmain.io | bash
で、ターミナルを起動しなおして
$ sdk install kotlin
$ brew update $ brew install kotlin
Kotlinコードを書いて普通に実行
こんな感じのKotlinコードを書いてみます。
fun sum(a:Int, b:Int): Int { return a + b } fun main(args: Array<String>) { val s = sum(3, 4) println("Hello, $s") }
$ kotlinc HelloKotlin.kt
helloKotlin.jarができるので実行します
$ java -jar helloKotlin.jar Hello, 7
Kotlin完全に理解した。
Kotlin/Nativeでネイティブコンパイル
それではKotlin/Nativeでネイティブコンパイルしてみます
まずは、ここからkotlin-native-linux-1.3.10.tar.gzをとってきて解凍します。
$ tar xf kotlin-native-linux-1.3.10.tar.gz
そしたらkotlinc-nativeでコンパイル
$ kotlin-native-linux-1.3.10/bin/kotlinc-native HelloKotlin.kt -o helloKt
helloKt.kexeという実行ファイルができるので、実行してみます。
$ ./helloKt.kexe Hello, 7
Kotlin/Native完全に理解した。
GraalVMでネイティブコードを作る
GraalVM 1.0RC9をダウンロードします。
http://www.graalvm.org/downloads/
解凍
$ tar xf graalvm-ce-1.0.0-rc9-linux-amd64.tar.gz
そしたら、さきほどのhelloKotlin.jarをネイティブコンパイルします。
$ graalvm-ce-1.0.0-rc9/bin/native-image -jar helloKotlin.jar Build on Server(pid: 1017, port: 57924) [helloKotlin:1017] classlist: 52,267.85 ms [helloKotlin:1017] (cap): 1,527.57 ms [helloKotlin:1017] setup: 1,795.74 ms [helloKotlin:1017] (typeflow): 2,825.42 ms [helloKotlin:1017] (objects): 2,007.84 ms [helloKotlin:1017] (features): 64.34 ms [helloKotlin:1017] analysis: 4,981.88 ms [helloKotlin:1017] universe: 229.84 ms [helloKotlin:1017] (parse): 418.69 ms [helloKotlin:1017] (inline): 789.38 ms [helloKotlin:1017] (compile): 1,283.91 ms [helloKotlin:1017] compile: 2,786.14 ms [helloKotlin:1017] image: 517.86 ms [helloKotlin:1017] write: 206.43 ms [helloKotlin:1017] [total]: 62,846.33 ms
helloKotlinという実行ファイルができているので実行します。
$ ./helloKotlin Hello, 7
GraalVM完全に理解した。
比べてみる
実行時間
$ time ./helloKt.kexe Hello, 7 real 0m0.015s user 0m0.000s sys 0m0.016s $ time ./helloKotlin Hello, 7 real 0m0.019s user 0m0.000s sys 0m0.016s
GraalVMのほうがちょっと遅いかなーというくらいですね。大差なし。
実行サイズ
$ du -h helloKt.kexe 472K helloKt.kexe $ du -h helloKotlin 11M helloKotlin $ du -h helloKotlin.jar 1.2M helloKotlin.jar
さすがにGraalVMのネイティブコンパイルはVMも含むのででかいですね。Kotlin/Nativeはjarより小さくなっています。
ということで、ネイティブコンパイルで遊んでみました。