kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Scala Nativeを動かしてみた(1)

Scala Nativeはscalaのコードを(LLVMのIRを経由して)ネイティブコードにコンパイルするAOTコンパイラ(Ahead Of Time Compiler)です。その存在については、少し前にサイトができていたことで一部で話題になっていましたが、Scala Days 2016 NYCにて正式に公開されました。現在はPre-Release段階ですが、既にサンプルコードを試せるようになっていたので、環境を構築してみました(on Mac OS)。

$ git clone git@github.com:scala-native/scala-native.git --recursive

git submoduleとしてscala/scalaを持っているので、--recursiveを付けるのを忘れないようにしましょう。

  • llvm(clang)とbdw-gcをインストールする
$ brew install --with-clang llvm
...
$ brew install bdw-gc
$ sbt
> project rtlib
> publishLocal
> project nscplugin
> publishLocal
  • デモプロジェクトに移動(sbtを起動したまま)
> project demoNative
  • 実行(gc.hがないといったエラーが出るはず)
> run
  • bdw-gcにパスを通す
nativeClangOptions := Seq("-I/usr/local/Cellar/bdw-gc/7.4.2/include", "-L/usr/local/Cellar/bdw-gc/7.4.2/lib")

この、nativeClangOptionsというsettingKeyは、ここで定義されていて、要はclangに渡すオプションを格納するためのものです。インクルードパスとライブラリパスの両方を渡してやります。なお、ここでは、明示的にbdw-gcをインストールしたディレクトリにパスを通しましたが、うまくやればそもそもここでつまづく事はない…かもしれません。うまくいかない場合はこの辺をいじればなんとかなるということでもあります。

  • 再度実行
> run

なにやら色々warningが出ますが、それはともかく、赤枠で囲った部分が表示されればひとまず成功です。 f:id:kmizushima:20160512221647p:plain

Scala Nativeを試してみたいけど、うまく行っていない人が居るようだったので、とりあえず走り書き程度ですが、参考になればと思います。気が向いたら、サンプルプログラムをちょっといじってなんかやってみたいと思います。