トップ «前の日記(2017-07-08) 最新 次の日記(2017-08-07)» 編集

日々の破片

著作一覧

2017-07-29

_ UNIXプログラミング環境

アスキーの鈴木さんから頂いたUNIXプログラミング環境をざっと読み返して(だと思うんだけど、もしかすると実は初見かも)いろいろ考える。

1985年のまえがきがついているのだから、30年以上前の本だ。

読み始めて、すぐに、そうそう、昔(といっていいよな)はstty(セッティ)がすごく重要だったよなとか思い出す。間違えてバイナリーファイルをcatしたりviで開いたりすると、端末制御が無茶苦茶になって、改行されなかったり、エコーバックされなくなったり、操作できなくなる。かといって、Alt-F3で切り替えて殺したりとか、Xをクリックしたりして殺したりはできないから(つまり、RS232Cとかで本体と端末がつながっていて、その線にデディケート(日本語でなんと言うんだっけ?)されているから、その端末についているキーボードでどうにかするしかない。でも、Unixのシェルは忠実に口を開けているから(その前に:qが必要かも知れないわけだが)、sttyでリセットしてやれば済む。完全に覚えていないが、そのための魔法の呪文みたいなものがあったのだった。

で、nohupだ。そうそう(まあ、今でも使っているとは思うけど)。

そんな過去の亡霊のような本なので、当然、2つの考えが浮かぶ。

1つは高速道路主義者のおれで、いらんいらん、30年前の本がなんの役に立つ? 今は高度に専門化されているんだから、こんなUNIXの思想と仕組みと汎用コマンドについて書かれた常識本なんか読むだけ時間のムダムダ。

しかしもう1つはこう言う。おっさんたちは、これが基本として叩き込まれているわけで、少なくとも教養として知っているといないじゃ大違いじゃん。sttyは使う必要ないかも知れないし、今更edのコマンドを覚えても(昔は、viを使っていて操作を誤ってed(だと思うんだけどexだったか?)モードに入ってにっちもさっちもいかなくなることが度重なって結局ある程度覚えざるを得なかった)意味ないかも知れないけど、ファイルシステムやsortやsedみたいな基本中の基本コマンドを学んでおいて少しも損はないし、実際に使うシェルはbashやzshになっているかも知れないけど、シェルはシェルだし、全体を通して語られる小さな部分を組み合わせてユニなシステムを構成するという考え方とか、意味なさそうだと思ったところだけ読み飛ばしても十分にお釣りがくるほど価値があるじゃん。

シェルプログラミングの基本が学べる5章。

フィルタ(実はあらゆる点で考え方は再利用できる)について学ぶ4章。

システムコール(特にファイルシステムとプロセス)についての7章。

このあたりは、教養というよりも基盤知識として頭に入れておいたほうが良い(ものがコンパクトにまとまっている)。

白眉は8章のプログラム開発だ。

多分、想像できるものとは異なる。

演習として作るのは電卓なのだが、Cは知っていることを前提として、ここで特に重視されているのは、次の3つだ。

yacc (今ならbisonかbyaccだけど、パーサージェネレータ)

make

lex (今だとflexかな、字句解析機)

つまり、自分のためのDSLを本格的に(今の目から見ればであって、当時の感覚ではたかだか70ページの分量で、UNIXプログラミング環境を語る本の1/6強程度)作る方法についての解説となっている。

簡単なDSLなら、正規表現で実装する行指向言語で十分なわけだが、それでもパーサージェネレータは知っておくと便利(というか、BNFを読めるようになるとRFC読むのでも言語仕様を読むのでもえらく話が楽になとかいうか、読めないと辛いし)。それが70ページでまとめられた演習になっているのだから、読んだほうが良いとは言える。

というわけで過去の亡霊のようなところがないわけでもないが、おすすめするけど、どちらかというと会社の共有本棚に置いておく本という気もする。

UNIXプログラミング環境(Brian W. Kernighan)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え