プログラミング言語の学習 (「プログラミング言語の仕組み」書評)

プログラミング言語の仕組み」黒川利明著、朝倉書店、1997年出版 を読んでみた。10年以上前なので、かなり内容が古いかなと思っていたけれど、そこは専門家というところで、むしろ新しい部分もあるのではないかと思う。

黒川利明さんは関数型言語Lispの入門書を書いているし、構造化プログラミングについても記述が割かれているし、JAVAにも目を配っており、偏らずに抽象的なプログラミング一般について述べている。やや特徴的なところがあるとすると、「朱唇」という日本語で記述できるプログラミング言語にけっこう入れこんでおり、「予約語(reserved word)」を「術語」と訳す様に、やや癖があるけど面白いと思った。(いま検索したところ、朱唇は公開されていないようだ。ダウンロードできたら面白かったのに。)

読んでみてよかったと思うのは、あまり気にしなかった部分の説明があったところだと思う。(ただ、最近実はプログラミング言語の本を読んでいないので、どれほど個性的かは実のところ良くわからない。別の本も読み比べてみたいと思う。以下の記述は僕の主観という事でお願いしたいです。)


プログラミング言語の基本データ型(整数、真理値、ポインタ、文字など)とデータ構造(文字列、配列、ファイル、レコード、グラフ、リスト、木など)という区別ができるようになったのはよかったと思う。基本データとは、単一のデータの要素で、それが組み合わさってできたのが、データ構造だと言う。ここで文字は基本データ型であり、文字列はデータ構造だとしているのは興味深いけど、著者はそこにあまり意味はないという。難しいと思ったのは、リストで、これはけっこう独特のものを示している。(日常語のリストとあまり重ならないと思う)C言語特有だと思うんですけどね。(LispPascalにはあるのだろうか・・?)

それと配列とレコードの違いというのも興味深かった。配列とは同じものであるが数値の表現が異なるものの集合であり、レコードは数種類の基本データ型をいれる構造だと言う。ちょっとこのあたりはわかりづらいけど、まあなんとか、という感じです。

それと文(statement)の種類の豊富さとかですかね。入出力文、代入文、条件文、ラベル付き文、飛越し文、繰返し文、手続き呼出し分、データ領域割当文、データ領域解放文、ブロック文、宣言文、注釈文をあげており、けっこう数が多いんだな、と思いました。正直、データ領域割当文とデータ領域解放文はそれぞれ独立しててもいいのかな、というのが素朴な疑問ですが。でも最近のアプリなどは一定時間あるいは一定の操作をすると、メモリがオーバーしてしまうらしくダウンするのですが、これなんかは割当の解放を行っていないからなんだろうと思うのですが、そういう部分の記述があるのは、有り難いなあと思いました。まあ文や式やデータを箇条書きにして、具体的な言語に即さず抽象的にそれぞれ説明するのは面白い試みだなあと思いました。

複数のプログラムをまとめたものとして、モジュールとライブラリが出てきますが、その違い、ということも言及しており、モジュールはおおまかに値や引数を渡せばよく、外部からの動きがわからないもの、ライブラリは一つ一つ明示的に使うもの、という違いがあるらしい。モジュールは中身の動きがあまり良くわからないが、ライブラリは使途用途に応じて使う、というところが違うそうだ。多分モジュールの方がサイズが大きいのでしょうね。JAVAで使われるクラスライブラリはモジュールとライブラリの中間らしい。あまりピンとはこないのですが、なるほどなあと。

今使われているかはわからないけど、BNF記法がプログラミングを記述する際にも出てきて勉強になった。wikiをみるとALgolと関係が深いようですね。遺物みたいなものはとりあえずは必要ではないけど、プログラミングのより深い部分を理解するために頭の隅にでも置いておきたいかな。

まとめてみると、Adaとかでてきたのはびっくりしたけど、手続き型、論理型、関数型についてバランスのいい記述になっているなあと思いました。ただこの一冊だけではまだプログラミングができる様にはならないでしょう。けっこう抽象度が高い本なので、時間があるときに見ればいいと思いました。