ドメイン固有言語を活用したら?
2009.01.30
Windows だって、要するに cygwin とか擬似UNIX環境で仕事をするわけですから、 (g)awk って確実に存在しています(勿論 UNIXは言うに及ばずね)。で今回、
csv で出力されたデータのチェック
をしなければならないことになりました。2つの csv 出力が対応しているかどうか...のチェックです。勿論、
一方が他方に対して、その(複数フィールド・複数列の)合計とか
自明でない関係を持っていますから、それをチェックしないといけません。
以前、
コードジェネレータに bash を使うと、バッチリ使える
という話を書いたことがありますが、さすがにこっちは
フィールドで分解し、数値を扱う
ものなので、bash では力不足です。で...ですが、勿論 perl を入れて、Perl でチェックスクリプトを書くというのでもイイのですが、
そういう用途の「ドメイン固有言語」として、ちゃんと AWK があるじゃん。
ということを強調したいな...と思います。だって、
適当なセパレータ(この場合はcsvですからカンマ)でフィールドを切り分けて、それぞれの列で合算したり、行ごとに集計したり、切り上げ・切捨て・四捨五入...とか倍率を掛けたり割ったり....
という仕事のまさにそのために、昔から awk がUNIXには付いてきていたわけです。これ栄えあるベル研開発スクリプト言語ですしね(苦笑)。
A は Alfred Aho の「A」
Wは Peter Weinberger (今Googleに居るそうです)の「W」
Kは Brian Kernighan の「K」
と、歴史....に思いを馳せるのもいいのでは?
実際入力をフィールドにバラして、合計したり...という仕事をさせるスクリプトは、AWK だと極めて簡潔です。
awk は汎用的なツールであって、汎用的な言語ではない
というあたりが一番のポイントではないか、と思います。あ、勿論 AWK は形式的な定義としてはチューリング完全な言語であることは承知の上ですが、
これだけCSVファイルのチェックのような特定分野で使いやすいのは、そりゃ特定用途に特化した「ドメイン固有言語」なんだからでね!
というあたりを強調したいわけです。ハッカーとそれ以外のプログラマの最大の差....って何かというと、私が一番しっくりする違いは、
新しい言語を憶えるコストが極めて低く、心理的な障壁がほとんどないのがハッカー
という違いを感じます。要するに「プログラミング言語上のマルチリンガル」であること、に馬鹿にならない大きなメリットがあるのです。つまり、「使っている言語を相対化して捉えることができるかどうか?」という能力なのではないのでしょうか。AWK には AWK の「良さ」があり、その「良さ」が最大に発揮できるタスクならば、ぜひとも awk を使おうよ...と、思いませんか?フツーにそこにあるんですしね!
投稿者 : 杉浦 こずえ | 投稿日時 : 2009.01.30 14:52





