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について調べてみよう。
Scalaで書かれたWebアプリフレームワークlift Web Framework
lift Web Frameworkは、Java仮想マシン上で動作する関数型言語「Scala」で書かれたWebアプリケーションフレームワーク。既存のフレームワークのよい点を積極的に取り入れながら開発が進められており、Smalltalkのフレームワーク「Seaside」に搭載されている粒度の細かいセッション管理およびセキュリティ機能や、Ruby on Railsの手軽さ、Erlangのフレームワーク「ErlyWeb」で用いられている高いスケーラビリティを実現する設計などが、すでに取り込まれている。
また、Railsのような簡潔な記述が可能な一方で6倍程度高速に動作し、高いパフォーマンスが期待できるという
Scalaはキラーとなるようなフレームワークがあれば、
ブレイクするんじゃないか、と思っていましたが、
もう既にそれっぽいのがあるんですねぇ。
ホットデプロイのようなことが出来るかどうか気になるなぁ。