mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Cygwin - Scala を使う!

[ プログラミング, 数学 ] [ Cygwin, Scala ]

こんばんは。

Cygwin 上で、オブジェクト指向の機能と関数型言語の機能を統合した汎用プログラミング言語 Scala を使えるようにしてみました。 今後本格的に使用するかどうかは別として、ちょっと触れてみたいと思った程度です。

現在、Scala は 2.9.1-1 が最新のようです。

以下が、環境構築記録です。

記録

0.事前準備

Scala は Java の実行環境がないと動きません。Cygwin で Java が使えるようになっている必要が有ります。 当方の場合は、Windows ネイティブ側に導入済みの JDK を Cygwin で使用できるような環境となっています。 もちろん、ランタイム JRE だけでもかまいません。

1.アーカイブダウンロード

Scala はビルドせず、アーカイブを展開するだけでよいので、配置したい場所にアーカーブをダウンロードします。 今回は “/usr/local/share” ディレクトリ配下としました。

2.アーカイブ展開

ダウンロードしたアーカイブファイルを展開します。

1
$ tar zxvf scala-2.9.1-1.tgz

3.環境変数の設定

.bashrc 等に以下のような内容で環境変数の設定を記述する。

1
2
export SCALA_HOME=/usr/local/share/scala-2.9.1-1
export PATH=$PATH:$SCALA_HOME/bin

そして、環境変数設定を有効化するために、"source .bashrc" とコマンド入力するか、Cygwin 自体を再起動する。

4.テスト用スクリプト作成

実行確認用のスクリプトを作成する。 今回は、モンテカルロ法で円周率を求めるプログラムとした。 【ファイル名:pi_montecarlo.scala】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import util.Random
import math.

object Pi_Montecarlo {
  def main(args: Array[String]) {

    val n = 10000
    val stream = Stream continually Random.nextDouble() zip  (Stream continually Random.nextDouble())
    val d = stream take n filter(x => (pow(x.1, 2.0) + pow(x._2, 2.0)) < 1.0) length
    val pi = d * 4.0 / n

    println( pi )

  }
}

5.インタプリタ実行

とりあえず、コンパイルせずにインタプリタ実行してみた。 構文等にエラーが無ければ実行される。

1
2
$ scala pi_motecarlo.scala
3.1388

6.コンパイル

コンパイルしてみた。

1
$ scalac pi_motecarlo.scala

構文等にエラーが無くコンパイルに成功すれば、class ファイルが作成される。 今回の場合、以下の5ファイル。

  • Pi_Montecarlo$$anonfun$1.class
  • Pi_Montecarlo$$anonfun$2.class
  • Pi_Montecarlo$$anonfun$3.class
  • Pi_Montecarlo$.class
  • Pi_Montecarlo.class

7.実行確認

作成された class を以下のようなコマンドで実行してみる。

1
2
$ scala -cp . Pi_Montecarlo
3.1348

8.その他

対話型の実行環境(REPL)も利用できるようですが、Cygwin 環境?では JLineReader のエラーが発生します。 “-nobootcp” オプションをつけると JlineReader のエラーは発生しませんが、その後の挙動がおかしいです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ scala
Failed to created JLineReader: java.lang.NoClassDefFoundError: Could not initialize class org.fusesource.jansi.internal.Kernel32
Falling back to SimpleReader.
Welcome to Scala version 2.9.1-1 (Java HotSpot(TM) Client VM, Java 1.7.0_03).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

$ scala -nobootcp
Welcome to Scala version 2.9.1-1 (Java HotSpot(TM) Client VM, Java 1.7.0_03).
Type in expressions to have them evaluated.
Type :help for more information.

scala>


関数型言語もおもしろそうですね。 Twitter でもある部分に使用されているようだし。

以上です。

Comments