scala-nativeを試してみる 1.hello world

scala-nativeが出ました。

Scalaは JVM 上で動かす事が出来る言語なのですが、このScala言語をllvmでコンパイルしてバイナリで動かせるようになったのが scala-native です。

正直jvmがコンパイル遅くて起動も遅いのでそんなに好きではなくて、趣味ではよくRust
を触っています。それが今回 Scala が Nativeコードを吐くようになったので試してみました。

はじめに

2016/05/15の時点では、 scala-native に簡単なhello worldが含まれていませんでしたので作ってみようと思います。

こちらの記事は、 Getting started with scala-native を参考にしています。

IntelliJ IDEA で リポジトリ(ディレクトリを読み込む)

IntelliJ IDEA で scala-nativeを開いて見たらエラーが出ました。解決策としてはhomebrew install sbtで入れたsbtの launch.jar を SBT Option で指定してあげたら動きました。

build.sbt の修正

build.sbt を 開いたら最後の行に

lazy val helloworldNative = project.in(file("helloworld-native")). settings(libSettings). settings( nativeVerbose := true, nativeClangOptions := Seq("-O2") ). dependsOn(scalalib)

を追加します。
なぜか、こちらの環境では ScalaNativePlugin, ScalaNativePluginInternal が赤くなり依存関係の解決ができませんがコンソールでのコンパイルは通ります。

次に、 helloworld-nativeというディレクトリと
その中に、 helloworld.scala を作ります。

ファイル内容は下のとおりです。

package helloworld
import scalanative.native._, stdlib._
object Main { def main(args: Array[String]): Unit = { fprintf(__stdoutp, c"Hello World: Scala Native!!!") }
}

実行

コンソールからsbtを起動し、sbtシェルに入ったら下記のように実行します。

project rtlib
publishLocal
project nscplugin
publishLocal
project helloworldNative
run

Hello World: Scala Native!!! と実行されたら成功です。

バイナリが作られたか確かめる

runcompileを実行すると、バイナリが下記ディレクトリに作られます。
./target/scala-2.11/helloworldnative-out

これをそのまま実行することができます。
サイズは 14Kでした。