高木 渉(株式会社 日立製作所)
COBOLの国際規格の改訂版(ISO/IEC 1989:2023)が、2023年1月に発行されました。
COBOLを担当する国際規格委員会(ISO/IEC JTC 1/SC 22/WG 4)は、2017年に、この版の規格の開発を始めました。まず、過去に委員会に要望が寄せられていたけれども、まだ規格に取り込まれていなかった機能を、90年代まで遡って拾い上げ、そのうち、規格に導入したいとの要望の多かった機能を追加していきました。
こうしてできた規格案に対して国際投票が行われ、2022年4月までに賛成国多数で承認されました(賛成: 10, 反対: 0, 棄権: 14)。その後、編集上の変更などを経て、国際規格として発行されたのは2023年1月です。
本稿では、規格に導入された新機能を紹介します。規格の前書きにある新規機能の一覧に沿って、項目ごとに概要を説明します。ただし、組込み関数と翻訳指示に関する項目は、割愛します。
SEND文とRECEIVE文で、非同期のプロセス間メッセージ通信を行う。通信相手のプロセスが存在する場所は問わない。MCS (message control system) の存在が想定されている。MCSは実装者定義である。
複数のやり取りが入り乱れても送受信する電文を対応させるために、message tagを使う。
SEND文は、別プロセスに電文を送るとともに、message tagを取得する。送信した電文に対応する電文を受信するには、このmessage tagを指定してRECEIVE文で実行する。電文を受信する側のプロセスでも同様である。RECEIVE文は、別プロセスからの電文を受け取るとともに、message tagを取得する。受信した電文に対応する電文を送信するには、このmessage tagを指定してSEND文を実行する。
なお、この機能のSEND文/RECEIVE文は、1985年版のCOBOL国際規格にあった通信機能単位の文とは異なる。通信機能単位は、2014年版のCOBOL国際規格で機能単位ごと削除された。
ブール列とブール列との間で、排他的論理和の演算をする演算子(B-XOR)が追加された。
ブール列に対して左右へのシフト演算をする、単純なシフト演算子(B-SHIFT-L、B-SHIFT-R)、及び循環シフト演算子(B-SHIFT-LC、B-SHIFT-RC)が追加された。
COBOLの語(利用者が定義する変数名など)の長さが、31文字から63文字に延長された。文字数で長さを示していて、文字の表現のために占めるバイト数は、この規定に関係しない。
CONTINUE文に秒数が指定できるように拡張されて、プログラムの実行を一時停止できるようになった。
DELETE文が追加された。DELETE文は、ファイルの中の特定のレコードを削除し、DELETE FILE文は、ファイルそのものを削除する。
直前に実行した入出力文の状態が2桁の英数字の変数に格納されるという仕様がある。この入出力状態が '0x' の形ならば、直前の入出力文の実行は成功であるが、'x' の部分が '0' でないときには、小さな異常が検出されていたことを示す。従来の共通例外の仕掛けでも、入出力文の成否は判別できるが、成功しても小さな異常を伴っていることは判別できなかった。そこで、'0x' の 'x' の部分が '0' でなかった場合を検出するためのEC-I-O-WARNING例外条件が追加された。
外部属性のファイルやデータ項目に対して、複数のプログラム間で、属性が整合していないという例外が定義され、検知することを選択できるようになった。
PERFORM文で、繰り返しの終了条件にUNTIL EXITを指することで無限ループを作れるようになった。
PERFORM文に新たな機能が追加され、PERFORM文の開始からEND-PERFORMまでの範囲の文で発生した例外を処理する機構ができた。このPERFORM文の範囲の最後に、例外名を付けたWHEN句とその例外を処理する文を書いて例外を処理する。
INSPECT文が文字列を検出する動作を、対象文字列の末尾から実行することができるようになった。
ファイルの編成として、行末に改行コードに相当する文字を置くことでレコードを区切る編成のファィルが追加された。
動的長基本項目の長さを、SET文で操作することができるようになった。
副キーによるファイルアクセスで、キーが特定の値の場合に、そのレコードがなかったかのように動作することができるようになった。
ファイルやデータ項目を指定し、それらに対してCOMMIT文を実行して値を確定し、ROLLBACK文を実行して、前回COMMIT文を実行したときの状態まで戻すことができるようになった。
PACKED-DECIMALの数字データ項目が符号なしの場合、符号用に割り当てられる領域がないことを指定できるようになった。
PICTURE句で、ユーザーが指定するPICTURE編集文字に対応して、任意の長さの単純挿入の文字列又は正負の符号文字列として定義できるようになった。
数字編集項目に対し、VALUE句で定数を指定して値を設定する場合の規則が追加された。
EXTERNAL属性付きで型宣言ができるようになった。この型で記述されたデータ項目には、EXTERNAL属性が付く。
以上