【入門編】AUTOMATIC属性とSTATIC属性の生存期間 – PL/Iの基本構文とデータ制御実践ガイド

こんにちは!メインフレームの世界へようこそ。

COBOLやJavaから来た方にとって、PL/Iは「なんだか古臭い呪文みたいだ」と感じるかもしれませんね。でも安心してください。PL/Iは非常に論理的で、実は現代のプログラミング言語の「原型」とも言えるような、非常に懐の深い言語なんです。

今回は、PL/Iのデータ管理の心臓部である「AUTOMATIC」と「STATIC」という、メモリの住み分けについてお話しします。ここを理解すれば、もうPL/Iでメモリ管理に怯えることはありませんよ。

1. そもそも「変数の居場所」ってどこ?

PL/Iの世界では、変数を宣言するときに「お前はどこに住むんだい?」という属性を指定します。これがストレージクラスです。

一番よく使うのが `AUTOMATIC` と `STATIC` です。イメージしやすくするために、こんな例えを使ってみましょう。

  • AUTOMATIC(自動変数): 「使い捨てのメモ帳」です。関数(PROCEDURE)が呼ばれるたびに新しいメモ帳が渡され、関数が終わるとゴミ箱へ捨てられます。
  • STATIC(静的変数): 「会社の共有掲示板」です。プログラムが起動している間中、ずっと同じ場所にあり続け、誰が書き換えてもその内容は維持されます。

2. AUTOMATIC属性:スタック上の「おひとりさま」

PL/Iでは、明示的に指定しない限り、変数は基本的に `AUTOMATIC` になります。

1
MY_PROC: PROCEDURE;
/ この変数はAUTOMATIC。PROCEDUREに入るたびに生成され、抜けると消える /
DCL COUNTER FIXED BIN(31) AUTOMATIC INIT(0);

COUNTER = COUNTER + 1;
PUT SKIP LIST(‘現在の値は:’, COUNTER);
END MY_PROC;

このコードを3回呼び出すとどうなるでしょう?答えは毎回 `1` です。
呼び出しのたびに「新品のCOUNTER」がスタック領域に用意され、処理が終われば綺麗さっぱり消去されるからです。これが安全で管理しやすい理由ですね。

3. STATIC属性:プログラムの「古参兵」

一方で `STATIC` は、プログラムが動いている限り、その場所から一歩も動きません。

1
MY_PROC: PROCEDURE;
/ STATICはプログラム開始時に一度だけ生成され、終了まで消えない /
DCL STATIC_COUNTER FIXED BIN(31) STATIC INIT(0);

STATIC_COUNTER = STATIC_COUNTER + 1;
PUT SKIP LIST(‘累計回数:’, STATIC_COUNTER);
END MY_PROC;

これを3回呼び出すと、結果は `1, 2, 3` と増えていきます。
「累計」をカウントしたい時や、重いデータを一度だけ読み込んで使い回したい時には非常に便利です。ただ、メインフレームのバッチ処理では「前の実行時の値が残っていてバグになった!」なんていう古典的なミスが起きやすい場所でもあるので、少し注意が必要ですね。

4. 再帰呼び出し(Recursion)で起きる「事件」

さて、ここが一番面白いところです。PL/Iは再帰呼び出し(自分自身を呼び出すこと)が非常に得意な言語です。

もしあなたが `STATIC` を再帰処理の中で使ったらどうなるでしょうか?
自分自身を呼び出すたびに、同じ「共有掲示板」を全員で奪い合うことになります。これはカオスですよね。

  • AUTOMATICなら: 再帰のたびに「自分専用のメモ帳」がスタックに積み上がるので、他の再帰階層と干渉しません。
  • STATICなら: 全ての階層が同じ変数を参照するため、値がめちゃくちゃに書き換わります。

再帰を行うプログラムを書くときは、必ず `AUTOMATIC` を活用してください。これがPL/Iのメモリ管理の「鉄則」です。

まとめ:怖がる必要はありません

PL/Iのコードを初めて見たとき、`DCL`(宣言)の多さに圧倒されるかもしれません。でも、一つずつ紐解けば、それは「コンピュータに対して、このデータをどこにどう配置してほしいか」を丁寧に伝えているだけなんです。

  • 基本は `AUTOMATIC`(関数が終われば消える、安全第一!)
  • どうしても値を保持したい時だけ `STATIC`(会社の掲示板、管理は慎重に!)

この使い分けさえ押さえておけば、メインフレームの巨大なプログラムだって怖くありません。もしコードを読んでいて「これどっちだっけ?」と迷ったら、いつでもこの「メモ帳 vs 掲示板」の例えを思い出してくださいね。

皆さんのメインフレーム・ライフが、少しでも快適で楽しいものになりますように!また次のステップでお会いしましょう。

タイトルとURLをコピーしました