『ふつうのコンパイラをつくろう』青木の9冊目の書籍『ふつうのコンパイラをつくろう』が来週出版されます。
『ふつうのコンパイラをつくろう』サポートサイト
http://i.loveruby.net/ja/stdcompiler/
前半はフツーのコンパイラ本っぽいですが、第3部あたりから本性を現します。 いきなりallocaを作り出したり位置独立コードを生成したりするあたりがよいところ。
なお、現在開催中(というか、もうすぐ終わりそう)の Ruby会議2009で限定先行販売中ですので、 Ruby会議に来ているかたはぜひぜひお買い上げください。
Ruby会議今年はいちおう3日間ぜんぶ参加予定。 ちなみに今日は寝坊したわけじゃなくて、 サポートサイトの準備とかしてたらこんな時間になってしまいました。 せめて角谷さんの take the red pill からでも聞きにいきたい。
そんなわけで、帰ってきたらいろいろ更新します。るりまとか。
(15:05)
帰国先々週土曜から先週土曜までラスベガスへ出張だった。 帰ってきて、最後の力で荷物ほどいて寝て、 起きたときはもう日曜が終わりかけていた。 どんだけ疲れてんだ俺……。
木金は休むかなあ。
(06:51)
■ hiroshi [青木さま、おつかれさま。お仕事で行かれたんですか?こちらは、規模が小さく北陸(黒部アルペンルート)(13日〜16日)行ってきました。疲れは無く、ますます快調になりました。]
■ hiroshi [青木さまは、お仕事!!僕は、温泉つかってました。忙しくならないかなぁ〜。もっと仕事をぉーー。]
■ ささだ [勝った?]
■ 青木 [150負けた]
■
5分半 [900負けた。
と思ったら、レッドソックスが7点差まくったので500戻しました。]
■ 2009 [新年:あけまして:おめでとうございます。]
■ vi好きちゃん [独自エディタ作りましたか?(青きさん書きました:emacsが嫌いなので、独自。。。)]
■
つよし [更新:する:しない::::::
欲することは、行うことが出来る。しかし、欲すること自体を欲することは出来ない。::E=MC**2を発見した人。]
■ 青田 [やる気なし、、、以上。。。。。]
最近のプログラミングさて、3ヶ月近く放置したことで この日記を見る人も激減していると思うので、 ここぞとばかりに適当なことを書き散らすことにする。
ふつぱいらのコンパイラがJavaなので、 最近家ではJavaばっかり書いている。 さんざんJavaで書きまくってると、 Javaも意外と悪くないなあと思うようになってきた。 先入観イクナイ。
でも Java 1.4 は本当にイクナイ。 generics のない静的型付きオブジェクト指向言語なんてありえん。 キャストの嵐がめどすぎる。 コンパイラも実は 1.4 対応なんだけど、Java 5 にすればよかった。 まさか 2 年以上かかるとは思ってなかったからなあ。
それとは対照的に C# は俺内評価が下がりぎみ。 Java ばっかりいじってたからかもしらんけど、どうも気に食わない。 もっとも、言語がというより IDE が気に食わない可能性も大。 メソッドが全部大文字で始まってるあたりが地味に嫌だ。 あと言語的には virtual を書かせるあたりが嫌だ。
一方、昼間は相変わらずシェルスクリプトばかり書いている。 シェルスクリプトもそれほど悪くないのだが、 500行を越えるとウンザリしてくる。 特に素の sh にはローカル変数がないので地獄を見る (見た)。 ksh であっても local があったりなかったりして嫌だ。 しかたないので防衛的に、 常に alias local=typeset を入れておかなければいけない。
それと、UNIX の常識的なルールに従う限りは問題ないのだが、 スペースの入ってるパスもちゃんと扱おうとか、 マルチバイト文字の入ってるパスもちゃんと扱おうとか、 そういう余計なことを考えるととたんにウザくなる。 local basedir="$(dirname "$(dirname "$0")")" とか書くのはもう疲れた。 何回クオートすればいいんだよ!
スペースやマルチバイト文字の入ってるパスなんて 実際にはないだろうと考えて無視したいところだが、 SUA (SFU) だとフツーにありうるから困る。 あの環境には心底ウンザリだよ。
最近のプログラミング (2)そんなわけで結論としてはやっぱり Ruby がいいなあー、 ということになったのであった。 最近はちょっとしたツールくらいしか書いてないけど、実に楽だ。 each と map がサクッと書けるだけで感動できる。
もっとも、そのへんはシェルスクリプトでも意外と 同じようなことができるわけだが、 行より細かい単位の文字列処理がからむと Ruby が圧倒的に楽でいい。 awk とか sed とか cut とか expr とか駆使して チマチマ処理していると発狂しそうになる。
そもそも echo に移植性がない時点で泣ける。 こないだ発見したバグなんてひどかった。 "C:\WINDOWS\SUA\home\bwuser" っていうパスを echo すると "\b" がバックスペースになってしまうというバグ。 こんな感じのコードで発覚した。
echo ".export report file = `NativePath "$path"` > "$tmp"
この時は cat + ヒアドキュメントで回避できたのだが、 いつか回避できないときが来るような気がしてならない。 恐ろしい。
最近のプログラミング (3)Ruby が楽だという話をするはずなのに、 気付くとシェルスクリプトに対する不満に変わっているのはなぜだろう。
やっぱねー、Ruby はいいよねー。 例外あるからエラー処理が楽だし、配列もハッシュテーブルもあるし。
ちなみにシェルスクリプトの嫌なところをもう一つ。 以下のコードで $stat が絶対に変化しない理由を述べよ。
#!/bin/ksh
main() {
stat=0
cat $file | procfile
exit $stat
}
procfile() {
if ! sed .....
then
echo "$0: error: sed failed" 1>&2
stat=1
return 1
fi
}
main "#@"
ヒント: 次のコードなら $stat は変化する
#!/bin/ksh
main() {
stat=0
procfile < $file
exit $stat
}
procfile() {
if ! sed .....
then
echo "$0: error: sed failed" 1>&2
stat=1
return 1
fi
}
main "#@"
そのてん Ruby ならこんな変な罠はないし、 オブジェクトを返せるから情報の受け渡しには苦労しない。
あと、仮引数だよな。 関数の仮引数を明示的に書けないのは非常に、非常に、非常によくない! ソースコードのわかりやすさが極端に下がる。
もちろん、もっと単純な、 スカッとパイプライン一本で解決するような話なら シェルスクリプトはめっちゃ楽なんだけどさ。 やっぱ根本的にシェルスクリプトに向いてない処理を やろうとしてる気がするな。 真剣に Java 化を考えよう。
(01:19)
AMD64のRIP相対アドレッシングAMD64 はいいよねー。何がいいって、 汎用レジスタの本数が増えたことが一番だが、 RIP(プログラムカウンタ)相対アドレッシングが地味によい。 おかげで PIC でもグローバル変数アクセスが超簡単。 グローバル変数からのロードもこんなコードで一発ですよ。
movq gv@GOTPCREL(%rip), %rax
x86だとサンクをcallしてスタックから 戻りアドレスを取って……と激しくめどい。
(02:31)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
■ 運の強い人 [『ふつうのコンパイラをつくろう』
何のコンパイラ作ったのかしら?
プログラミング言語作ったってこと?
ANSI CとかC++とかコンパイルできるのか?
つまり、「プログラミング言語」作ったのか「C、C++、コンパイラ」作ったってこと、、
どっちよー、、、]
■ 運の強い人 [
書き込みの削除をお願い致します]
■ 村上ゆうや [尊敬してます!]
■ 上間つよし [尊敬しています。青木本を読む事で能力アップ。]