2009年12月27日日曜日

プログラム言語について -COBOL(1)-

ソフト会社に入社して最初に教わったCOBOLについてお話しましょう。

それまでプログラム言語であったアセンブラとfortranが、プログラムの処理ロジックや計算ロジックを記述する言語として開発されていました。その後に開発されたCOBOLでは、事務計算(会計や財務などの計算)向けの言語として開発されました。

それまでの計算機では、2進数の数値しかありませんでしたが、COBOLでは、10進数の数値が追加されて、計算誤差が発生しない10進数の数値が使えるようになりました。
例えば、2進数で0.1を表現しようすると
0×2-1 + 0×2-2 + 0×2-3 + 1×2-4 + 1×2-5 + 0×2-6 + 0×2-7 + 1×2-8 + 1×2-9 + …
となってしまい、2進数の小数表現が不可能となります。このため、利率の計算等で全く誤差が発生しないようにすることが不可能です。COBOLで導入された10進数の数値は、1バイトに1桁の数字を割りあて、10進数の計算をコンピューター上で実現しているので計算誤差が発生しません。

さらに、COBOLでは、プログラム自身がドキュメントとして使用できように、英文で文章を書くように処理を記述できるようになりました。プログラム記述では沢山のコードを書かなければなりませんが、fortranやアセンブラに比べ、プログラムソースを見れば、処理内容が分かる点が改善点となります。

しかし、COBOLはCODASYLによって定義されたCOBOL言語を元に、各コンピュータメーカーが独自に拡張をおこなったため、プログラム間の互換が完全に保たれなくっっているのが弱点となっています。特に、対話型に画面操作を行う処理、レポート作成処理、データーベースのアクセス方法などについて、各メーカー間で互換はありません。また、COBOLのもう一つの特徴である構造体を使ったコーディングでは、各処理系のメモリ配置や数値の構造を知った上でコーディングする必要があるので、すでに作れているプログラムを移行する際には、十分注意する必要があります。
このため、COBOLは、各社での互換のあるプログラム言語のように思われていますが、他のシステムに移行する際には、全部の処理を確認しなければ移行は不可能となります。オープンCOBOLと称するコンパイラーでも移植のためには、全ての処理を見直す必要があります。

C言語では、Unixで開発されたC言語を、各メーカーでそのまま移植しているケースが多く、また、共通ライブラリも各メーカーで同様の関数が用意されていることから、あまりこのようなことは発生しません。もっとも、C言語でもウィンドウ制御のプログラムが各メーカー毎に違うことはあるとは思いますが、COBOL程違ってる訳ではありません。

0 件のコメント:

コメントを投稿