『ビューティフルコード』

ビューティフルコード (THEORY/IN/PRACTICE)

ビューティフルコード (THEORY/IN/PRACTICE)

  • 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のRakefileDSL(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

応用例としてprintfがあるようだ。

ネタとしてはPerlとかにあるようなpack, unpackを作り、ASN.1バイナリーエンコーディングなんてやるとカッコいいかも知れない。

AsciiDocでRevision History

見ないうちに8.2.5と随分バージョンが上がったみたいだけど、相変わらずrevisionhistoryがイマイチだなあ。ここだけ専用のDocBookを用意しないといけないのが面倒。

これって、バージョン管理ツールとの連携を踏まえて履歴を外に出す方がいいんだろうか。

gitもMercurialもAsciiDoc使ってるんですねえ。やや広まってきたかな。

AsciiDoc version9なるものを発見。

AsciiDocの方もMercurialを使っているのか。ほほう。なんかいろいろ繋がってきましたな。

次はA-A-Pか。

Advanced Message Queuing Protocol(AMQP)

非常に気になる。またもやErlangかあ。別件で調べていた時もErlangが出てきた。やたら絡んでるなあ。