嫌われプログラミングの代弁者

「何で頭ごなしに嫌う人間が居るのか」を色々考える

COBOL言語である 4

COBOL言語でない(さらに別案)

宣言型プログラミングというものがあるそうで、オブジェクト指向プログラミングの「次世代」として、関数型と双璧を成していました。

これは、

  • プログラムを固定して、動作を変化させるデータ(プロパティとか設定情報とかいう言い方で知られている)を大量に送り込む事で処理を進める

やり方との事です。

コボラーの視点から見ると

コボラーの視点から見ると、これは、

  • ごく少量のメモリでの動作

を成立させるために、常套手段として用いていた手法でした。もちろん、

  • 出来る問題は限定されます

万能ではありません。

どういう事情だったのか?

メモリは千バイト程度しか使えなかったのですが、

  • MT(磁気テープ)上に記憶を持ったり
  • ハードディスク(DASD)上にMTを模した記憶を持ったり

は出来ました。

そして、メモリではまな板よろしく、
「動作を変化させるデータ」1個分(1つ前のデータとの差分が必要な場合は2個分)だけ用意し、MTやDASDから「動作を変化させるデータ」をどんどん流し込んで、結果をまた「動作を変化させるデータ」としてMTやDASDに吐き出す、

というやり方で、何百万件、何千万件、それ以上、の処理が可能でした。

いわゆるバッチ処理です。そしてこれは宣言型プログラミングに通じると思います。

それなら、コボラー的に見ると、プルーブンな手法だと理解出来ます。

例えば

例えば、MS Accessで何百万件のデータをクエリを使ってJOINさせる事は不可能です。
多分ですが、

  • クエリをする際には、データすべてを仮想記憶に置いて
  • 非常に早いJOINが出来る様にしている

動作だと想像され、仮想記憶の限界の4GBのまな板を超えてしまうと、進まなくなってしまうのも納得です。

それをやれという課題が出たことが有り、テーブルをMTに見立てて、マッチング処理をやって切り抜けた事が有りました。
何万件で、Accessのクエリだとかろうじて仮想記憶の限界内だった場合に、何百万時間(途中までやった時の処理件数と、全体件数から推定)かかるはずの処理が、数分で終わったりしました。

まさに、

  • 出来る問題を限定する代わりに、簡便で見通しの良い記述が可能

な手法の白眉です。皆さんもどんどんお使い下さい。

結論

どちらにせよCOBOLの問題とは無関係で、これからも「COBOL言語である」事でプログラミングが嫌いになる人は存在し続ける事でしょう。