◆ native は本当にネイティブらしい
◆ LLVM/Clang とかダウンロードされる
◆ JVM 用の kotlinc とは使い方も違ってる

久々に kotlin を少し使ってみようかと github releases のページに言ってみたら native なるものがありました
https://github.com/JetBrains/kotlin/releases/tag/v1.3.21

experimental-kotlin-compiler-linux-x64.zip    67.3 MB
experimental-kotlin-compiler-macos-x64.zip 67.2 MB
experimental-kotlin-compiler-windows-x64.zip 66 MB
kotlin-compiler-1.3.21.zip 36.9 MB
kotlin-native-linux-1.1.2.tar.gz 75.5 MB
kotlin-native-macos-1.1.2.tar.gz 221 MB
kotlin-native-windows-1.1.2.zip 64.5 MB
Source code (zip)
Source code (tar.gz)

ページ中に説明書いてないけど compiler と native のどっち使えばいいんでしょう
kotlin って JavaScript に変換もできた気がするし compiler が alt 系で native が通常のやつかな?と思って使ってみたのですが

コンパイルするときの説明どおりにやったら -d でエラーになりました

error: invalid argument: -d
info: use -help for more information

コマンドのオプションを見た感じでは d はないので 単純に kt ファイルだけ渡してみました

> kotlinc hello.kt
Downloading native dependencies (LLVM, sysroot etc). This is a one-time action performed only on the first run of the compiler.
Downloading dependency: https://download.jetbrains.com/kotlin/native/clang-llvm-6.0.1-linux-x86-64.tar.gz (509.0 MiB/509.0 MiB). Done.
Extracting dependency: /home/user00/.konan/cache/clang-llvm-6.0.1-linux-x86-64.tar.gz into /home/user00/.konan/dependencies
Downloading dependency: https://download.jetbrains.com/kotlin/native/target-gcc-toolchain-3-linux-x86-64.tar.gz (58.4 MiB/58.4 MiB). Done.
Extracting dependency: /home/user00/.konan/cache/target-gcc-toolchain-3-linux-x86-64.tar.gz into /home/user00/.konan/dependencies
Downloading dependency: https://download.jetbrains.com/kotlin/native/libffi-3.2.1-2-linux-x86-64.tar.gz (55.1 kiB/55.1 kiB). Done.
Extracting dependency: /home/user00/.konan/cache/libffi-3.2.1-2-linux-x86-64.tar.gz into /home/user00/.konan/dependencies

LLVM とか clang とか出てきました
ネイティブってそういうことなの?!

JVM を JavaScript とかに比べてネイティブって呼んでるのかと思ったらそうじゃなくて本当のネイティブでした

結構大きなサイズがダウンロードされていますが初回だけです
コンパイル結果は program.kexe というファイルで出力されました

> ls
hello.kt program.kexe*
> ./program.kexe
hello

ちなみに 新し目の fedora は普通に動きましたが 古めの fedora (27) だと

error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

とエラーが出るので ncurses-compat-libs のインストールが必要でした
(もしかすると別の理由でインストールしてすでに入ってただけかも)

program.kexe は 536 KB でランタイム込みでコンパイルした jar ファイルは 1.2 MB なのでちょっと軽めです

出力ファイル名は gcc みたいに -o で指定できました

> kotlinc hello.kt -o hello
> hello.kexe
hello

こっちでいいかなー とも思ったのですが 考えてみるとだいたいのコードで Java 系のライブラリを import してます
native 版ってほとんどの機能が使えなくてすごく不便なんじゃ……

とりあえず今回使いたかったものは native じゃ無理だったので kotlin-compiler の方をダウンロードして使いました