Java上と.NET上での実行

以下のhello.scalaが変更無しに両方で実行出来るか試す。

object hello extends Application {
  println("Hello, world!")
}

Java

コンパイル。これでhello.classが出来る。(一緒にhello$.classも出来る)

> scalac hello.scala

直接hello.classを実行

> java -cp c:\scala\lib\scala-library.jar;. hello
Hello, world!

ラッパーを使って実行

> scala hello
Hello, world!

.NET編

コンパイル。これでhello.exeが出来る。(一緒にhello.msilも出来る)

> scalac-net hello.scala

直接hello.exeを実行

> hello
Hello, world!

ラッパーを使って実行(直接exeを実行する方が楽な気がするが…)

> scala-net hello
Hello, world!

sbaz

scalaでのcpan/pear/gemのようなツール。
sbaz help で引数に指定出来るコマンドがわかる
sbaz available でパッケージの一覧を表示
sbaz install foo でパッケージfooをインストール
.NET用のコンパイルをするには以下のパッケージをインストールしておく必要がある。

> sbaz install scala-msil

msilファイルのアセンブルにはilasm.exeを使うので、C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322にパスを通しておくこと。
別マシンにインストールしたものをコピーしてきたからかもしれないけど、scala/libにあるpredef.dllをhello.exeと同じフォルダに持ってこないと動かなかった。
scala/libには他にscalaruntime.dllとmscorlib.dllもあるけど、これは同じフォルダに持ってこなくても大丈夫だった。
mscorcfg.mscでの、.NET Configuration 1.1→マイコンピュータ→アセンブリキャッシュに追加すればいいのかもしれないが権限がないので不明。