TOP > プログラマ2.0日報 > コードジェネレータ用の特選言語は?

あすなろBlogger

facebookに投稿 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク このエントリーをはてなブックマークに追加 この記事をクリップ! livedoorclip ユーザー数 BuzzurlにブックマークBuzzurlにブックマーク この記事をtweetする

コードジェネレータ用の特選言語は?

2008.07.16

さて、仕事からのネタです。Java ってマクロがないですから、

「定義」をするために、複数の関連しあうシンボルを定義し、データをとして作り上げるコードが、ムチャクチャたくさん必要だけど、作業自体は機械的で1回やればいいだけ...

な場合、「何かコードジェネレータ(「達人プログラマ」で言う「消極的コードジェネレータ」です)にそういう仕事はさせたい」と思いませんか?しかし、Java で開発しているケースでは、適当なスクリプト言語インタプリタがありません...から、

  1. 1. Java で使い捨てプログラムを書く
  2. 2. Emacs とかエディタのマクロ機能を使い倒す
  3. 3. 何かスクリプト言語インタプリタを導入する(Perl でも PHP でも Python でも Ruby でもお好きなものを...)

というあたりの解決が多いのかなぁ...とも思います。しかし、

Windows 環境だって Cygwin とか使ってるジャン!

というプログラマの現実から見るとき、第4の解決策として

  1. 4. bash で書く!

というのがあるのです。実はコレ私は最大の特選言語なんですね! パワフルで柔軟、しかも「特に何もしなくてもソコにある!」というメリット付きです。

まあ勿論、「コマンドラインの延長線上としての、シェルスクリプト」の知識では、これはできません。ちゃんと、「スクリプト言語として、bash を使い倒す」という勉強をしなくてはなりませんが、しかし一度身につければ、極めて強力なツールです。たとえば、適当なファイルから、1行の中に空白で区切られた2つの文字列を取得し、行数分だけループする...というありふれた処理は、

while read var1 var2
do
  echo "$var1 -- $var2"
done < ./myfile.txt

という風に書けてしまいます...ポイントは勿論、done(というかwhileブロック)に対してリダイレクトが書ける、ということと、組み込み命令のread が、その行を分解してシェル変数 var1, var2 にセットしてくれる、ということですよね!

ですから、

  1. 1. このループ処理
  2. 2. ヒアドキュメントを活用した出力フォーマット
  3. 3. 文字列加工は sed を活用
  4. 4. 数値計算は expr を活用

...といったあたりの処理を組み合わせれば、コードジェネレータくらいのことならばお手軽に出来てしまうのです! わざわざ「コードジェネレータのために Perl を入れる」とかしなくて済むのです。どうです?勉強する価値がこれありますよ!

ちなみに「スクリプト言語としてのシェル」を勉強すると、自動的にコマンドラインにも強くなります....そっちも極めてイイことですよねぇ...

投稿者 : 杉浦 こずえ | 投稿日時 : 2008.07.16 10:06

あすなろBLOGのトラックバック・コメントは承認制になっています。
すぐにブログに反映されませんので、ご了承ください。

トラックバックURL


コメントの送信








カレンダー

<< 2008年07月 >>

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

最新のエントリー

最新のトラックバック

最新のコメント

Tag

バックナンバー