えーっと何をしなきゃいけないんだっけ。
とりあえずは俺以外でも作業できる環境を作らないとだめだな。 ということは、まず、
あたりか。
簡単なところで、割り当てリストから。 Subversion のレポジトリに ASSIGN てファイルを作っておいて、 アカウント名を書き込んでチェックインしたら OK ということにしよう。 えーと、*.rd と *.off を拡張子とってリストすれば終わりと。
次。依存関係を考えると、ツールかな。 パーサはだいたいできてるから、リストするツールを書けばいいだろう。
うむ。こんなとこか。 bc-list はパースして pp するだけという手抜き実装だ。 bc-convert は ReFe のコードを持ってきてでっちあげた。
それからサンプルファイル。 Object, String, Enumerable, Comparable があればよかろう。 あと組み込み定数と組み込み関数は記法が特殊なので俺が引き取るっと。 メソッドを置き換えるライブラリも一つ欲しいな。jcode にしよう。
最後に作業マニュアル。 ざっと書いてメール → 完。
(10:56)
もう Symbol が String に統合されるのは規定事項なのだろうか……。 やっぱ別物のほうがいいなあ。 Symbol を String のように扱いたい、というのはわかるけど、 それと継承関係を作ることは別の話だと思うんだよな。 どうせ破壊的メソッドは実装できないんだし、 いくつかメソッドを追加するだけで済ますわけにはいかないのだろうか。
やはりもう一発メールを投げてみよう。
(11:18)
ああ、そうか、ActiveSupport の件は Hash で同一視したいって話なのか。 ますます ActiveSupport が嫌いになってきた。
(11:27)
シェルスクリプトのユニットテストを書く必要が発生した。 …… shunitってあるのかな。ありそうだな。あるらしい。
うーむ。CVS HEAD 見てみたが、イマイチ好きになれない。特に関数名が。 これ使うなら「ふつりな」のときに自分で作ったやつのほうがいいや。 こんなやつ。
#!/bin/sh
. ./shunit.sh
assert_ok() {
assert_stdout "OK" $1
assert_status 0 $1
}
assert_out() {
assert_stdout "$1" $2
assert_status 0 $2
}
assert_out "Hello, World!" ./hello
assert_out "Hello, World!" ./hello2
assert_status 77 ./add
assert_out "ret=77" ./add2
assert_out "ret=77" ./sub
assert_out "ret=56" ./imul
assert_out "ret=2000" ./idiv
assert_out "i=0; i=1" ./lvar1
assert_ok ./if
assert_ok ./while1
assert_ok ./while2
assert_out "i=3; i=3; i=2; i=1; i=0" ./while3
assert_ok ./while-break
assert_ok ./while-continue
assert_out "i=3; i=2; i=1; i=0" ./for
assert_ok ./for-break
assert_ok ./for-continue
assert_ok ./immscope
test_finished
(13:25)
ちなみに、こんなハッシュを作って演算子をメソッド名に変換してた。
OP = {
'+' => 'add',
'-' => 'sub',
'*' => 'mul',
'/' => 'div',
'%' => 'mod',
'&' => 'bitand',
'|' => 'bitor',
'^' => 'bitxor',
'<<' => 'lshift',
'>>' => 'rshift',
'==' => 'eq',
'!=' => 'neq',
'>' => 'gt',
'<' => 'lt',
'>=' => 'gteq',
'<=' => 'lteq',
'&&' => 'logicaland',
'||' => 'logicalor'
}
ハッシュ側のキーは文字列なんだけど、 検索するときは intern してあった罠。 世の中ままならねーんですよ。
(16:39)