Hello Worldを書いてみる

前々から気になっていたプログラミング言語Scala
HelloWorldを書いてみました。


HelloWorld.scala

object HelloWorld
{
  def main(args: Array[String]): Unit = 
  {
    System.out.println("Hello World")
  }
}


環境構築は http://www.scala-lang.org/ からダウンロードした
scalaアーカイブを解凍して、そのフォルダに環境変数SCALA_HOMEをセット。
そして、環境変数PATHにSCALA_HOME\binをセットするだけ。


早速、コンパイルしてみる。

> scalac HelloWorld.scala

HelloWorld.class と HelloWorld$.class が生成される。


$が付いているクラスは何なんだろうという疑問はあるが、ひとまず実行。

> scala HelloWorld


実行結果

Hello World


javaコマンドでも実行してみる。(実行結果は同じ)

> java -classpath %SCALA_HOME%\lib\scala-library.jar;. HelloWorld


HelloWorld.class と HelloWorld$.class の中身が
とても気になったのでデコンパイルしてみる。


HelloWorld.class

public final class HelloWorld
{

    public static final int $tag()
    {
        return HelloWorld$.MODULE$.$tag();
    }

    public static final void main(String args[])
    {
        HelloWorld$.MODULE$.main(args);
    }
}


HelloWorld$.class

import java.io.PrintStream;
import scala.ScalaObject;

public final class HelloWorld$
    implements ScalaObject
{

    public static final HelloWorld$ MODULE$ = this;

    public HelloWorld$()
    {
    }

    public void main(String args[])
    {
        System.out.println("Hello World");
    }

    public int $tag()
    {
        return scala.ScalaObject.class.$tag(this);
    }

    static 
    {
        new HelloWorld$();
    }
}


$tagメソッドだとかtag$メソッドを除けば、
だいたいどんな処理なのかは理解できる。
うーん、tagメソッドの存在がとても気になるなぁ。
次回はtagについて調べてみよう。