JavaWorld誌に延々と連載が続く「XMLボキャブラリの理論と実践」。
これは実に素晴らしいですね。
最近、特に切れ味が鋭くなって、ドキドキ度がアップしています。
もはや、XMLに限定された話題ですらありません。今月号の第39回「XML構文からDOM APIへの道筋」の場合、扱っている対象はTin Toy XMLと呼ばれるXMLのサブセットですが、それ自体が対象というわけではなく、Tin Toy XMLのBNF定義からAPI仕様を導出する手順が対象となっています。これは、XMLとは関係のない一般のプログラムのAPI仕様の作成にも参考になる情報だと思います。
どんな風にBNF定義からAPI仕様を導出しているか §
今月号の第39回「XML構文からDOM APIへの道筋」では、BNF定義からAPI仕様を導出しています。
その過程は、それほど単純ではありません。
過程の要約を以下に引用すると、こんな感じです。
- BNF定義を構文生成関数の宣言に読み替えて、代数的な仕様を書き下ろす (このとき、構文生成関数だけでなく、逆の働きをする構文分解関数も導入する)
- 代数仕様からオブジェクト指向風のインターフェースを抽出し、等式か振る舞い制約への翻訳を行う (このとき、基本データ型と、オブジェクトと見なすデータ型の区別を行う)
たとえば、代数的な仕様を経由することが実にクールに感じられるのも良いのですが、それ以上に、「逆の働きをする構文分解関数も導入する」という一種の逆関数も同時に求めるところが素晴らしいと思います。関数と逆関数のペアを導出すれば、必然的に操作と逆操作の仕様が直交します。
また、基本データ型とオブジェクトを意識的に区別する態度も、重要な価値があります。そして、基本データ型は「プリミティブ(注:基本)データ型は、そもそも時間や場所とは無関係な存在」という説明がいい! けして実装の都合で基本データ型なるものがある、とは言いません。本来は数値なども全てオブジェクトであるのが理想的であるとも言いません。そうではなく、時間や場所とは無関係にただそこに存在するものがあり、それが基本データ型に対応するという考え方は現実的かつ深淵です。
お勧めではあるけれど §
この連載は、XMLに限定されず情報技術に携わる者はみな読む価値があると思います。
しかし、おそらく大多数の人は、これを読むだけの基本素養ができていないと思います。この業界では、そのような素養が要求されることはほとんど無く、それが必要だというコンセンサスもなく、おそらくは学習する手順もほとんど無いような気がします。たとえば、BNFを代数的定義に変換すると言っても、大多数は変換する前にBNFで挫折してしまうでしょう。
それでもお勧めするのは、目指すべき高みがそこにあるのだということを示すためです。人間、誰しも上昇志向を持つべきでです。安易な現状維持は、実際には後退につながります。「これで何もかも実現された、もはや新しいものなど残っていない」というような錯覚を持つべきではありません。世の中が変化している以上、人間も変化し続けるしかありません。そして、変化とは未知なるものに手を伸ばして獲得するしかありません。
ちょっと補足 §
同じ檜山正幸さんによる講演資料に触れた絶望はまだ早い? プログラミングの未来への輝ける進歩への希望がここにある? 檜山正幸さんのプログラムの正しさに関する講演資料というものを書いていますが、それと関連のある話です。
もう1つ補足 §
あのJava嫌いの川俣がJava雑誌を薦めるなど信じられない、という人がもしかしたら若干いるかもしれません。
多くの誤解があるようですが、個人的にJavaは嫌いではないです。Javaは悪い言語ではありません。もはや古くなって、今となっては真面目に使うのは辛いですが。むしろ、本来は悪くないJavaを、Sun MicrosystemsやJava信者達が寄ってたかってダメにした、という印象があります。逆説的にSun MicrosystemsやJava信者達の普及活動が、Javaの普及を鈍らせた面があると思います。本来なら、Javaにはもっと明るい未来があったはずだと思います。
という話はさておき、私がJava雑誌に掲載されている記事を勧めたからと言って、雑誌全体を勧めているなどという誤解はなさらないようにお願いいたします。