かつて、Unix系OSで使われたシェルとして、Bourne Shellがあるが、1977年にリリースされていた初期のバージョンでは現在はもちろん、当時でさえC言語の書き方としては非常識な書き方をしていたという。これがIOCCCの発足するきっかけとなったという ((cf: The IOCCC FAQ 、ただし、1984年にリリースされたSystem V Release 4ではALGOL 68風の書き方から脱却したとのことである))。
さて、オリジナルのBourne Shellが現在はもちろん、当時でさえC言語の書き方としては非常識な書き方をしていたという理由として、C言語を学習したことのある人であれば、Version 7 UNIXにおけるBourne Shellのソースコードを参照すればわかるが、C言語をALGOL 68風に書くためのマクロを使用して、ALGOL 68のような書き方をしていたということに起因する。
これは、Bourne Shellを開発したスティーブン・ボーン氏がALGOL 68のコンパイラーの開発に携わった後に開発したという経緯があり、ALGOL 68の文法に熟知していた関係上、ALGOL 68に近い感覚で書けるようにするためにマクロを使用していたものと考えられる。
C言語においてはマクロというコンパイル時に特定の文字列を別の文字列に置き換えることが可能な機能を持っているが、Bourne Shellの場合は、あたかも他の言語で書かれているかのような錯覚を抱くほど極端な例であると考えている。
Bourne Shellの開発の経緯(特に開発者の経歴面)を考えてみると、ある程度は理解できる面はあるものの、基本的には、ちゃんとC言語の文法で書くのがあるべき姿だったのだろうが・・・。
とはいえ、今後、C言語のコードをマクロを駆使してあたかも他の言語のように見せるような書き方をするという事例は出そうにないだろうな。あったとしたら非常に困ることだが・・・。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。