Blog

kotlin で native code を生成 kotlin native を楽しみたい

android で kotlin が話題なので、kotlin native を試してみました。 kotlin native を利用すると、kotlin のコードをネイティブコードにコンパイルできます。

https://github.com/JetBrains/kotlin-native

git clone [email protected]:JetBrains/kotlin-native.git

しておいて

./gradlew dependencies:update
./gradlew dist

す。Hello.kt を作成する。

fun main(args : Array<String>) {
    println("Hello, world")
}

以下のように、コンパイルする。

./dist/bin/kotlinc Hello.kt -o hello
[tokuhirom@dev2 kotlin-native]$ time ./program.kexe
Hello, world

real    0m0.002s
user    0m0.001s
sys     0m0.000s

CGI で実行できそうなぐらい速い。便利!!!

C library へのアクセス

C library には *.def ファイルを作ってアクセスすれば良い。 https://github.com/JetBrains/kotlin-native/blob/master/samples/tetris/sdl.def

header ファイルをスキャンしてるのかな?

ためしに stdio.def というファイルを作成する。

headers = stdio.h
excludeDependentModules.osx = true

実際にこのファイルからビルドしてみる。

[tokuhirom@dev2 kotlin-native]$ ./dist/bin/cinterop -def stdio.def -o stdio.kt.bc
JetFile: stdio.kt

このライブラリを利用した Hello2.kt は以下のようになる。

import stdio.puts

fun main(args : Array<String>) {
    puts("Hello, world")
}

さて、stdio.kt を利用したスクリプトをビルドしてみる。

[tokuhirom@dev2 kotlin-native]$ ./dist/bin/konanc Hello2.kt -library stdio.kt.bc -o Hello2.kexe
JetFile: Hello2.kt
[tokuhirom@dev2 kotlin-native]$ ./Hello2.kexe
Hello, world

動いた!!

結論

kotlin native わりと動く。