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
を付けるのを忘れないようにしましょう。
$ brew install --with-clang llvm ... $ brew install bdw-gc
- ローカルにデプロイ(参考: [Developer Guide] How to compile this project · Issue #51 · scala-native/scala-native · GitHub)
$ 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-g c/7.4.2/lib")
この、nativeClangOptions
というsettingKeyは、ここで定義されていて、要はclangに渡すオプションを格納するためのものです。インクルードパスとライブラリパスの両方を渡してやります。なお、ここでは、明示的にbdw-gcをインストールしたディレクトリにパスを通しましたが、うまくやればそもそもここでつまづく事はない…かもしれません。うまくいかない場合はこの辺をいじればなんとかなるということでもあります。
- 再度実行
> run
なにやら色々warningが出ますが、それはともかく、赤枠で囲った部分が表示されればひとまず成功です。
Scala Nativeを試してみたいけど、うまく行っていない人が居るようだったので、とりあえず走り書き程度ですが、参考になればと思います。気が向いたら、サンプルプログラムをちょっといじってなんかやってみたいと思います。