失敗は一時の恥

パッケージソフト開発をしているプログラマが気の赴くままに何かを投稿するブログ.

Kotlin/Native を試してみる

概要

Kotlin/Native という,Kotlin のコードをネイティブのバイナリにコンパイルするツールがリリースされたというニュースを目にし,気になったのでちょっとだけ試してみました.

Kotlin で書いたネイティブな Hello world! を実行できるようにしてみます.

基本的には,Kotlin Tutorials にある A Basic Kotlin/Native Application の通りにやっていけば,Hello world! できます.

下準備

Docker イメージ

今回は Kotlin/Native を動かす Docker コンテナを用意して試しました.

Java 8 と Kotlin 1.3 と Kotlin/Native 1.3 が必要なので, これらが使える環境を作成します.

次のような Dockerfile ファイルを書きました.

FROM openjdk:8

RUN wget -O /tmp/kotlin.zip https://github.com/JetBrains/kotlin/releases/download/v1.3.10/kotlin-compiler-1.3.10-linux-x64.zip && \
    unzip /tmp/kotlin.zip -d /usr/lib && \
    wget -O /tmp/kotlin-native.tar.gz https://github.com/JetBrains/kotlin/releases/download/v1.3.0/kotlin-native-linux-1.3.0.tar.gz && \
    tar -xf /tmp/kotlin-native.tar.gz -C /usr/lib && \
    rm /tmp/kotlin.zip /tmp/kotlin-native.tar.gz

ENV PATH $PATH:/usr/lib/kotlinc/bin:/usr/lib/kotlin-native-linux-1.3.0/bin

CMD [ "/bin/bash" ]

Java はベースイメージを openjdk:8 にして使えるようにしました. 他は適当にダウンロードしてきて展開し,パスを通しているだけです.

Dockerfile を作成したら,ビルドしておきましょう.

docker build -t kotlin-native .

ソース

Hello world! 的な Kotlin プログラムを書きます:

fun main(args: Array<String>) {
    println("Hello Kotlin!")
}

実行

Docker イメージを実行して,Kotlin のソースをネイティブコンパイルし,バイナリを実行してみましょう.

$ docker run -it kotlin-native
(以下,コンテナ内の世界)
$ kotlinc-native hello.kt
(program.kexe というファイルができる)
$ ./program.kexe
=> Hello Kotlin!

出力されるファイルが .kexe という見慣れない怪しげな拡張子になっていますが,これは Java バイトコードとかそんなんではなく,ネイティブに実行可能なバイナリです.

Hello world! 的なメッセージが得られて,めでたしめでたし!

やってて気にかかったこと

~/.konan に依存ライブラリが入る

Mac でも Tutorial に書いてある通りにやれば実行できることは確認したのですが, ~/.konan というディレクトリに Kotlin/Native の依存ライブラリなどがインストールされてなんとなく嫌だったので,Docker の使い捨て環境でやることにしました.

おわり

ごくごく簡単でしたが Kotlin/Native を試してみました.

まぁ,個人的に今後使う予定もいまのところないのですが,好奇心を満たせたのでよし!