scalacをするのとしないのと
http://d.hatena.ne.jp/daisun/20080322/1206163454
の最後に書いた、コンパイルしなくても動くとか動かないとかの謎。
いまだ理解できていないし答えも出ていないけど
とりあえず考えたことをまとめておく。
Javaは?
まず、scalaもJVM上で動作するのでJavaについて考えてみる。
Javaは、
Javaはいったん.javaファイルをJVMが読む中間ファイル(.class)にコンパイル
して、JVMがそのファイルを実行する。
scalaインタプリタ?
そもそもスクリプト言語はインタプリタが逐次内部でコンパイルして
実行してたはず。
scalaもスクリプト言語。ってことはscalaインタプリタが入っている?
だから、PythonやRubyのように対話型のインターフェイスがある?
逐次実行を実験
以下をファイルに書いて実行してみる。
var hoge = new Hoge hoge.f class Hoge(){ def f() = print("xxx") }
Hogeがないって怒られる。
では。以下をscalacでコンパイルして実行
object O(){ def main(args: Array[String]){ var hoge = new Hoge hoge.f } } class Hoge(){ def f() = print("xxx") }
ちゃんと動く。
これは、コンパイル時に最適化しているからだろう。