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について調べてみよう。

Apache MavenによるJavaプロジェクトポータビリティの向上

Apache MavenによるJavaプロジェクトポータビリティの向上
http://japan.internet.com/developer/20070109/27.html


社内の人に教えてもらったMaven2の良さげなページ。


ps. なんだかんだ言ってもMaven2は敷居が高いなぁ。
  そもそもあれだけ複雑なXMLの手書きは無理があると思う。

Scalaで書かれたWebアプリフレームワークlift Web Framework

lift Web Frameworkは、Java仮想マシン上で動作する関数型言語Scala」で書かれたWebアプリケーションフレームワーク。既存のフレームワークのよい点を積極的に取り入れながら開発が進められており、Smalltalkフレームワーク「Seaside」に搭載されている粒度の細かいセッション管理およびセキュリティ機能や、Ruby on Railsの手軽さ、Erlangフレームワーク「ErlyWeb」で用いられている高いスケーラビリティを実現する設計などが、すでに取り込まれている。


 また、Railsのような簡潔な記述が可能な一方で6倍程度高速に動作し、高いパフォーマンスが期待できるという


Scalaはキラーとなるようなフレームワークがあれば、
ブレイクするんじゃないか、と思っていましたが、
もう既にそれっぽいのがあるんですねぇ。


ホットデプロイのようなことが出来るかどうか気になるなぁ。