路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

そうこうしているうちにC++0xのワーキングドラフトが

2008-10-09 20:24:33 | プログラミング
某巨大掲示板より。

PowerShellやらScalaやらで遊んでいたら、ビッグニュースが。

C++0xの最新ワーキングドラフトでは、コンセプトが入ってるらしい。

ムーブセマンティクスといい、とても「C++っぽい」変更ですね。

こっちも目が離せないなあ。

Scalaのお勉強

2008-10-09 15:22:52 | プログラミング
インストールしました。
Scalaチュートリアル読みました。

今、「First Steps to Scala」を読んでます。
http://www.artima.com/scalazine/articles/steps.html

気づいた点。

・構文がJavaとはいろいろ違う。

一番アレ?となったのは、[]が汎用型に使われていて、配列の要素のアクセスが()になってること。

・varとvalがある。後者があるのが関数型言語っぽい。

ただ、valはJavaのfinalみたいな扱いらしく、

val greetings: Array[String] = new Array[String](3)
greetings(0) = "hello"

とできるのがちょっとアレかも。

(2008/10/21 追記)
mutableな変数や配列の話も含めて、まとまった内容が見つかりました。

記事「Is Scala Not "Functional Enough" ?」
http://www.codecommit.com/blog/scala/is-scala-not-functional-enough
より。

内容はおおよそ、タイトル通り。MLやHaskellと比較して、あんまり関数型言語じゃない、型推論がしょぼいし副作用ありありだよ、と主張してます。

おっしゃるとおりですけど、そういうデザインだしなあ。
(2008/10/21 追記 ここまで)

・型システムが謎。

Javaのクラスをそのまま使えるようにしてるというのもあるけど、ごちゃごちゃしているかも。

val a: int = 1
val b: Int = 1
val c: java.lang.Integer = 1

とかできるのは参った。

isInstanceOfで判定すると、全部trueが返ってくる。

for (i <- d) {
| println(i.isInstanceOf[int])
| println(i.isInstanceOf[Int])
| println(i.isInstanceOf[java.lang.Integer])

よく分からない。

(2008/10/14 追記)
みずしまさんにコメントをいただきました。
intはIntの別名で、java.lang.IntegerとIntとは暗黙的に変換されるようです。
(2008/10/14 追記 ここまで)

・参考文献
samwynさん?の「Scala開眼」
http://www.h7.dion.ne.jp/~samwyn/Scala/scalaindex.htm
に密度の濃いーまとめがありました。

これを見て、Scalaが型推論、パターンマッチング、高階関数や遅延評価などを含んだ立派な関数型言語であることが分かりました。

共変性と反変性が簡潔に記述できるのも良い感じ。

アノテーションがJavaのそれとは違っていたりするのも面白い。

・参考文献2
syttruさんの日記経由で、
http://d.hatena.ne.jp/syttru/20080322/1206213360

Javaプログラマ向けのチートシート見つけました。
A. Sundararajanさん、「Scala for Java programmers」
http://blogs.sun.com/sundararajan/entry/scala_for_java_programmers

コンパクトでいい感じだ。

・開発環境
そろそろコンソールも飽きてきたので、Eclipseのプラグインを導入します。
AWAWAさんの「Scala開発環境の構築(Eclipse編)」
http://d.hatena.ne.jp/AWAWA/20080507/1210132904
を参考に。

ファイルメニューから、Scala objectが作れなくて一瞬焦る。
パッケージを作ってからじゃないとダメなのでした。
なるほどー。