『ビューティフルコード』
ビューティフルコード (THEORY/IN/PRACTICE)
- 作者: Brian Kernighan,Jon Bentley,まつもとゆきひろ,Andy Oram,Greg Wilson,久野禎子,久野靖
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/23
- メディア: 大型本
- 購入: 30人 クリック: 617回
- この商品を含むブログ (190件) を見る
- 4/18 Amazonからおすすめのメールがくる。
- 4/20 注文する。
- 4/25 Amazonから在庫がないというメールがくる。
- 4/29 Amazonの注文をキャンセルする。
- 4/29 紀伊国屋で注文する。
- 5/2 届く。
今年のゴールデンウィークはこれで退屈せずに済む。
29章の『エッセイのごときプログラム』はなかなか興味深い。特にRakefileの文法の話の中で、文法を既存のRubyにあわせる『シンプルさ』を追求するよりも、『人間の書くプログラムのシンプルさ』を選んだとあった。
(a)
task({:default => [:test]}) task(:test, lambda(){ ruby "test/unittest.rb" })
こう書くよりも
(b)
task :default => [:test] task :test do ruby "test/unittest.rb" end
こう書く方がより人間が書くコードとしてはシンプルになるということだ。
(b)の方がシンプルであるというより、(b)の方が『自然な表現』であると思った。
本の中でrakeのRakefileをDSL(Domain Specific Language)と言っていたが、DSLというのは、特定の目的のために最適化された言語という意味で、これはその目的にあった表現の『自然さ』の追求なのではないかと思う。
dformatプラグインを作って遊んでみた
これを改造して、
{{{#!dformat style bitwid .3 PDP-8 Instr 0-2 Op Code 3 Indirect Bit 4 Page-Zero Bit 5-11 Page Address }}}
こう書くと……
こんな画像に変換するMoinMoinのプラグインを作ってみた。
dformatはpicに変換するawkスクリプト(Bentleyの資料にあるやつ)で、そこからgpicでPostScriptに。またそこからGhostScriptでpngに変換しています。
もちろんpicプラグラインも。
{{{#!pic .ps -2 circle "DISK" arrow "character" "defns" CPU: box "CPU" "(16-bit mini)" { arrow <- from top of CPU up "input " rjust } arrow CRT: " CRT" ljust line from CRT - 0,0.075 up 0.15 \ then right 0.5 \ then right 0.5 up 0.25 \ then down 0.5+0.15 \ then left 0.5 up 0.25 \ then left 0.5 Paper: CRT + 1.05,0.75 arrow <- from Paper down 1.5 " ... paper" ljust at end of last arrow + 0, 0.25 circle rad 0.05 at Paper + (-0.055, -0.25) circle rad 0.05 at Paper + (0.055, -0.25) " rollers" ljust at Paper + (0.1, -0.25) .ps +2 }}}
こう書くと……
こんな感じに。
Variadic Templates
- http://d.hatena.ne.jp/faith_and_brave/20080208/1202461203
- http://www.kmonos.net/alang/d/2.0/variadic-function-templates.html
応用例としてprintfがあるようだ。
ネタとしてはPerlとかにあるようなpack, unpackを作り、ASN.1バイナリーエンコーディングなんてやるとカッコいいかも知れない。
Plan 9もMercurialを使っているみたい
久々に覗いてみたら hgweb の文字が。私が個人的に好感を持っているプロジェクトが次々とMercurialを使い出すのはなにかあるんだろうか。