お問い合わせ

ホーム > COBOLのはなし > COBOLにまつわる昔話 〜 今もCOBOLは良いか 〜

COBOLにまつわる昔話 〜 今もCOBOLは良いか 〜

内田 正章

(注)
[1]このあたりの事情については、COBOLコンソーシアムのWebサイト「COBOLナレッジ」−「記事・論文」−『21世紀もCOBOLだね −COBOL生誕40周年トピックス−』に詳しい。
[2]田原総一朗の政財界「ここだけの話」 第18回。
http://www.nikkeibp.co.jp/style/biz/column/tahara/070705_18th/
[3][2]の記事からは、システムの古さが原因と言っているのが斉藤氏なのか田原氏なのかは判然としない。ただこの他にも、田原氏が「COBOLなどという戦前の教科書のようなものを使っていることが原因」という意味の論評をしていたことが記憶に残っている(出典は特定できないが)。
[4]田原総一朗著 文藝春秋社 1992.09.30発行。
[5]日経コンピュータ 2012.08.30号 日経BP社。
[6]実際のところ、金星ロケットMariner 1でトラブルを起こしたのは FORTRAN言語で記述された誘導プログラムだったとのこと。しかも、ネット上の情報によれば、失敗の原因には諸説あるようだ。ロケットの真偽はともかくとして、FORTRANでもピリオド一つでプログラムの意味が変わってしまうことがあるのは事実。
[7]「if (a==0) b=10;」で正しく動作していたときに、後から「c=20;」 を追加するようなときに問題が生じる。正しくは、「if (a==0) {b=10; c=20;}」。
また、Cでは「if (a=0) b=10;」などは犯しがちな間違いだ。「if (a=0) 〜 」では、aへの値の代入の結果の非0/0で真偽が決まる。この例の場合、a=0の式の値は0なので、つねに偽となる。
[8]CやJavaでは、構造体やクラス/内部クラスの形で別に宣言する必要があり、一つのレコードを素直な形で表現しにくい。レコード内に繰返し項目を含む場合には、Javaではさらに複雑な記述となる。
[9]COBOLにもオブジェクト指向機能が存在する。しかしここでは、多くのCOBOLプログラムが構造化手法で構築されている実態を踏まえて、Javaプログラムなどと対比。
[10]ムーアの法則とは、米Intel社のゴードン・ムーア博士が1965年に提唱した「半導体の集積密度は18〜24ヶ月で倍増する」という経験則である(ネット上の『IT用語辞典』から)。この法則は、博士の予想をはるかに超える長い期間にわたって成り立ってきたが、近年になって限界を迎えつつあるようだ。しかし、ICT分野での指数関数的進歩という意味では、まだ健在と言える。
[11]たとえば、スーパーコンピュータのシステム全体としての性能は、10〜11年に1000倍のペースで進化し続けている。1950年代に製造され、現在でも動態展示されているリレー式コンピュータは、推定数十FLOPS(FLoating Operations Per Second、1秒間に処理する演算の数〔演算とは、10進数で15けた程度の数どうしの乗除算など〕)。少々正確さに欠けるが模式的には、1970年にk(103)、80年にM(106)、90年にG(109)、2000年にT([テラ] 1012)、2010年にP([ペタ] 1015)FLOPSと進化してきた。2011年に世界No.1を記録した理化学研究所のスーパーコンピュータは10 PFLOPS(1016=1京[けい]=1兆の1万倍)の性能を達成し、「京」と命名された。その後も世界各国で性能競争が展開されていて、この分野におけるムーアの法則的成長はまだ健在の模様〔というより、ムーアの法則以上のテンポ〕。
なお、定説はないようだが、スーパーコンピュータという呼称は1970年代以降に登場か。また、一般のコンピュータの処理能力にはMIPS(Million Instructions Per Second、1秒間に処理するCPU命令の数〔100万単位、演算なら10進数で9けた以下の整数演算〕)が使われることが多かった。
[12]CPUの機種にもよるが、ワード境界の整列の有無で実行速度が変わることが多かった。整列ならCPUのレジスタを経由するload/store命令、非整列ならメモリー間で直接コピーするmove-character命令と、ハードウェア部隊から入手したCPUの命令実行時間情報をもとに使い分けた。
[13]れが今日にまで引き継がれていることは言うまでもない。しかし、その後の環境の進展/変化につれて、力点が変化してきたとも言える(後続部分を参照)。
[14]近年では、コンパイル時間の短縮に加え、構成管理ツールの適用によって必要最小限のソースプログラムだけをリコンパイルするようになり、コンパイル性能のウェイトは低下した。
[15]Graphical User Interface。ボタンやコンボボックス(ドロップダウンリスト付きのテキストボックス)などの部品を画面上に配置し、マウスなどによって操作する。直感的な操作が可能。対語は、文字ベースのCUI(Character User Interface)。
[16]あくまで、ユーザが作成するアプリケーションの配置の観点での意味。画面インターフェースはプレゼンテーション層を担うサーバアプリケーションの指示を受けてクライアントのWebブラウザという高度なシステムプログラムがGUIを実現する訳で、インテリジェンスの低かった端末と同レベルでないことは当然。
[17]大文字がベースというところが、インターネット時代にそぐわないとも言える。小文字も使用できるCOBOL言語システムが多いが、既存資産との整合性の点からも大文字主流が続くだろう。
[18]プログラムコードをどんどん入力していける度合いのつもり。この文章では、“記述性”をやりたいことを素直に表現できる程度という意味で使った(集団項目のところなど)。
[19]Java(や一部のC++)でも、小数部をもつ10進データが扱える。ただし、かなり使いにくい。COBOLコンソーシアムのWebサイト「COBOLナレッジ」−「COBOLのはなし」−『COBOL利用技術のご紹介 -第6回- COBOLかJavaか?』に詳しい。