言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

近況

P1060408

簡単に最近の事を書く。

最近また論理機械を作っている。以前タコ糸や段ボール等を使ってコンピュータの動作を再現しようと試みたが、機構的に不安定であまり人に見せられるような物では無かったので、今回より頑丈な仕組みを目指して週末ごとに実験している。写真は左が NOT 回路、右が OR 回路の模型だ。理屈でいうとこの二つを組み合わせるだけでありとあらゆる論理回路を構成出来るはずだが、色々問題があって苦労している。今までノートに定規とコンパスで製図をしてから作っていたが、ノートに収まらない大きさになって来たので、今日ふと製図に Illustrator を使ってみた。昔買ったんだけど使いこなせずずっと眠らせたままだった。鉛筆より速く製図出来るようになるまで随分練習が必要だけど、みんなやってるんだからきっと便利なのだろう。週末はほとんど Illustrator の練習で費やして全然ノコを触れずストレスを溜めてしまった。

あとプログラミングでは、 AVM2 用のアセンブラ/逆アセンブラがやっと完成した。このアセンブラはどういう物かというと、S 式で ASM2 のマシン語ニーモニックを書くと、それをアセンブルしてくれる。http://github.com/propella/abckit/tree/master ついでに Scheme の練習も兼ねている。さらについでに出来るだけ副作用を使わないで関数型プログラミングをする練習も兼ねている。なぜアセンブラを自作したかというと、AVM2 の仕様書を読んでどうにもよく理解出来ない部分を確認したかったからだ。本来の目的である自作言語を Flash Player で動かすという所まではまだ果てしない距離がある。

関数型プログラミングの部分は、Scheme でも部分部分ではちゃんと副作用無しで書けるんだけど、副作用が無いと辛いのは二つ以上の情報を更新するような場合だ。例えばコードを読んでツリーを返すだけなら楽に関数として書けるが、同時に例えばシンボルテーブルと、ジャンプラベルを同時に返したい時は辛い。パターンマッチとカリー化があれば防げるような繰り返しのコードを沢山できてしまって汚くなってしまった。継続渡しでやるとすっきりするけど、編集しずらいコードになってしまう。あとパフォーマンスを気にした時、cons で逆からリストを組み立てて後で reverse するという技も、なんかださい。まあ色々勉強になってよかった。

あと、いまさらながらポニョを観た。他の人の感想を読んでたかもしれないけど、思ったよりまともだった。砂糖菓子の弾丸は撃ちぬけないのような話では無くて安心した。