路傍のプログラマ

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

メモ: Scalaのお勉強 #3 path-dependent typeとEnumeration

2008-11-05 22:27:55 | プログラミング
よく分からない。

object Direction extends Enumeration {
val North = Value("North")
val East = Value("East")
val South = Value("South")
val West = Value("West")
}

で、Directionというオブジェクトに結びついた型、Direction.Valueができるのは良いと思う。

でも、なぜ、forで回せるのだ。

scala> for (d <- Direction) print(d + " ")
North East South West

試しに、

object D extends Enumeration {
val North = 1
val East = 2
val South = 3
val West = 4
}

とすると、forで回せなくなる点からして、Value()というメソッドがなんかこっそりやってるのだろうなあ。

(2008/11/06 追記)

解決しました。

結論から言うと、メソッドValue -> Valのコンストラクタ -> 変数valuesという風になっていて、後は、for文のところで、for文 -> foreachメソッド -> ・・・ -> 変数values、となってます。

Enumeration.scalaに、

private val values: Map[Int, Value] = new HashMap

という行と(ここで、HashMapはmutableの方です)

protected final def Value: Value =
new Val(nextId, if (nextName.hasNext) nextName.next else null)

という行と

protected class Val(i: Int, name: String) extends Value {
・・・(略)・・・
values(i) = this
・・・(略)・・・
}

というのを見つけました。

後は、

for (d <- Direction) なんたら

がコンパイラによって、

Direction.foreach(d => なんたら)

に直されて、foreachメソッドの定義がどーたらこーたら、となります。

あーしんど。

BOF: Windows 7はやはりMinWin(ベース)だった

2008-11-05 18:20:54 | Birds-Of-Feather
記事「Windows 7 MinWin (the Core)」
http://news.softpedia.com/news/Windows-7-MinWin-the-Core-97159.shtml
より。

Windows 7(すなわち6.1)はVista(すなわち6)のマイナーバージョンアップですが、同時に、MinWinベースでもあるようです。

なんじゃそりゃ?という感じですが・・・

どうも、手品のタネは「MinWinは、Windowsのカーネルから、いろいろ取り除いて作ったもの」というところにあるようで。

つまり、カーネルのソースの関数を依存関係(コールグラフ)をたどって階層を作り(下の階層の関数は上の階層の関数を呼び出さない)、一番下の階層をMinWinとしたそうです。

その結果、MinWinは、最小の、スタンドアロンで実行できる、ブートできる、利用可能なもの、となったそうです。

Windows 7のコア=MinWin、というわけですね。

そういわれれば納得いくような。

(追記 2008/11/15)
記事「Windows 7 – 20 Features to Make Users Forget Vista SP1/SP2 and XP SP3
Milestone 3 Pre-Beta Build 6801 and Build 6801+」
http://news.softpedia.com/news/Windows-7-20-Features-to-Make-Users-Forget-Vista-SP1-SP2-and-XP-SP3-97979.shtml
より。

この記事にも、「3. MinWin – Windows 7 does not come with a new kernel, (中略) but what it does come with is an isolated core. 」とありますね。


Ubuntu 8.10で焦る

2008-11-04 13:24:22 | ubuntu linux
Ubuntu 8.10の正式版が出ていたので、

●早速、VirtualBox 2.0.4のゲストとしてインストールしました。

マウス統合が効かなくて焦ったのですが、
http://forums.virtualbox.org/viewtopic.php?p=43192&sid=7c2cecaae578c4cb1684bbd694324e21
に従って、

/etc/X11/xorg.conf

を修正したら直りました。

こころもち、キビキビしてる?かも。

●synapticで何も考えずにg++をインストールすると、バージョンが4.3に上がってます・・・

allocaを使ってるところでエラーが出ます。うわあ。

(2008/11/06 追記)

●日本語のフォルダ名を直す

Knowledge Database ITの
記事「UbuntuのユーザーホームをLinuxっぽくアルファベット表記に戻す。 」
http://it.kndb.jp/entry/show/id/2356
にしたがって、

端末(ターミナル)から
LANG=C xdg-user-dirs-gtk-update

コマンドラインでファイルをごそごそするのがだいぶ楽に。