お問い合わせ

ホーム > 新規格情報 > 2023年版COBOL国際規格の新機能の概要

2023年版COBOL国際規格の新機能の概要

高木 渉(株式会社 日立製作所)

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月です。

本稿では、規格に導入された新機能を紹介します。規格の前書きにある新規機能の一覧に沿って、項目ごとに概要を説明します。ただし、組込み関数と翻訳指示に関する項目は、割愛します。

(1) SEND文及びRECEIVE文を使用した非同期メッセージ通信機能

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国際規格で機能単位ごと削除された。

(2) ブールの排他的論理和演算子

ブール列とブール列との間で、排他的論理和の演算をする演算子(B-XOR)が追加された。

(3) ブールのシフト演算子

ブール列に対して左右へのシフト演算をする、単純なシフト演算子(B-SHIFT-L、B-SHIFT-R)、及び循環シフト演算子(B-SHIFT-LC、B-SHIFT-RC)が追加された。

(4) 63文字までの長さのCOBOLの語

COBOLの語(利用者が定義する変数名など)の長さが、31文字から63文字に延長された。文字数で長さを示していて、文字の表現のために占めるバイト数は、この規定に関係しない。

(5) プログラム実行を一時停止する時間を指定するCONTINUE文の拡張

CONTINUE文に秒数が指定できるように拡張されて、プログラムの実行を一時停止できるようになった。

(6) ファイルを削除するDELETE FILE文

DELETE文が追加された。DELETE文は、ファイルの中の特定のレコードを削除し、DELETE FILE文は、ファイルそのものを削除する。

(7) 成功した入出力文での警告を扱う非致命的なEC-I-O-WARNING例外条件

直前に実行した入出力文の状態が2桁の英数字の変数に格納されるという仕様がある。この入出力状態が '0x' の形ならば、直前の入出力文の実行は成功であるが、'x' の部分が '0' でないときには、小さな異常が検出されていたことを示す。従来の共通例外の仕掛けでも、入出力文の成否は判別できるが、成功しても小さな異常を伴っていることは判別できなかった。そこで、'0x' の 'x' の部分が '0' でなかった場合を検出するためのEC-I-O-WARNING例外条件が追加された。

(8) プログラムをまたがる外部項目の属性の検査

外部属性のファイルやデータ項目に対して、複数のプログラム間で、属性が整合していないという例外が定義され、検知することを選択できるようになった。

(9) UNTIL EXIT指定を使ったPERFORM文の無限ループ

PERFORM文で、繰り返しの終了条件にUNTIL EXITを指することで無限ループを作れるようになった。

(10) PERFORM文の例外検査形式を使った文内例外処理

PERFORM文に新たな機能が追加され、PERFORM文の開始からEND-PERFORMまでの範囲の文で発生した例外を処理する機構ができた。このPERFORM文の範囲の最後に、例外名を付けたWHEN句とその例外を処理する文を書いて例外を処理する。

(11) 逆方向への文字列検査をするINSPECT文の拡張

INSPECT文が文字列を検出する動作を、対象文字列の末尾から実行することができるようになった。

(12) 行順ファイル編成

ファイルの編成として、行末に改行コードに相当する文字を置くことでレコードを区切る編成のファィルが追加された。

(13) 動的長基本項目の長さを設定するSET文の拡張

動的長基本項目の長さを、SET文で操作することができるようになった。

(14) ALTERNATE RECORD KEY句のSUPPRESS WHEN指定を使用した索引ファィルでの副キー抑止

副キーによるファイルアクセスで、キーが特定の値の場合に、そのレコードがなかったかのように動作することができるようになった。

(15) COMMIT文及びROLLBACK文を使用した選択可能なコミット及びロールバック処理機能

ファイルやデータ項目を指定し、それらに対してCOMMIT文を実行して値を確定し、ROLLBACK文を実行して、前回COMMIT文を実行したときの状態まで戻すことができるようになった。

(16) USAGE句のNO SIGN指定によって定義される符号なしPACKED-DECIMAL項目

PACKED-DECIMALの数字データ項目が符号なしの場合、符号用に割り当てられる領域がないことを指定できるようになった。

(17) PICTURE句のEDITING指定を使用した利用者定義のPICTURE句

PICTURE句で、ユーザーが指定するPICTURE編集文字に対応して、任意の長さの単純挿入の文字列又は正負の符号文字列として定義できるようになった。

(18) 数字編集項目に対するVALUE句の拡張及び変更

数字編集項目に対し、VALUE句で定数を指定して値を設定する場合の規則が追加された。

(19) 外部項目としての型宣言

EXTERNAL属性付きで型宣言ができるようになった。この型で記述されたデータ項目には、EXTERNAL属性が付く。

 

以上