【入門編】STATICストレージクラスの永続性とモジュールロード時の初期化 – PL/Iの基本構文とデータ制御実践ガイド

PL/Iの「STATIC」って何者?メインフレームの記憶領域を攻略する

こんにちは。メインフレームの世界へようこそ。
JavaやCOBOLの経験がある方にとって、PL/I(ピーエル・アイ)という言語は、少し古風で、それでいて非常に合理的で強力な相棒のように感じるはずです。

今日は、PL/Iを学ぶ上で最初にぶつかる壁のひとつ、「STATIC(静的)ストレージクラス」についてお話しします。「静的」なんて言うと難しく聞こえますが、実はとても人間味のある仕組みなんですよ。

1. プログラムの「持ち物」を整理しよう

プログラムを書くとき、私たちはデータを保存するために変数を用意しますよね。PL/Iには、そのデータを「どこに、どれくらいの期間」置いておくかを決めるストレージクラスという概念があります。

その中で最も基本的なのが `STATIC` です。

STATICってどんな存在?

イメージしてみてください。あなたのプログラムを「オフィスでの仕事」だとします。

  • 自動変数(AUTOMATIC):

仕事のたびに付箋やメモ帳を取り出し、仕事が終わったら捨ててしまうもの。

  • 静的変数(STATIC):

オフィスに備え付けられた「キャビネット」です。プログラムが起動している間、ずっとその場所にあり、誰かが中身を書き換えれば、次に誰かが来たときもその書き換えられた中身が残っています。

つまり、`STATIC` は「プログラムが動いている間、その場所に居座り続けるデータ」のことです。

2. 実際にコードを見てみよう

PL/Iのプログラムは、`PACKAGE` や `PROCEDURE` という箱の中に書かれます。`OPTIONS(MAIN)` は、「ここがプログラムの入り口ですよ」という合図ですね。

/i
DEMO_PROG: PROCEDURE OPTIONS(MAIN);

/ STATIC変数の宣言:プログラム実行中はずっと値を覚えている /
DCL COUNTER FIXED BIN(31) STATIC INIT(0);

/ 普通の変数:このPROCEDUREを抜けるたびにリセットされる /
DCL TEMP_VAL FIXED BIN(31) AUTOMATIC;

COUNTER = COUNTER + 1;
PUT SKIP LIST(‘呼び出し回数: ‘ || COUNTER);

END DEMO_PROG;

この `COUNTER` は、プログラムが終了するまでその値を裏切りません。もし、このプログラムが複数回呼ばれるような設計であれば、`COUNTER` は呼ばれるたびに1ずつ増え続けていくことになります。

3. なぜ「STATIC」を使うのか?

「じゃあ、全部STATICでいいじゃないか!」と思うかもしれませんね。でも、そうは問屋が卸さないのがメインフレームの面白いところです。

記憶の永続性とメモリの節約

すべてを `STATIC` にすると、メモリという名の「オフィス」がすぐに満杯になってしまいます。使わないデータはさっさと片付ける(`AUTOMATIC`)、長く使いたいものだけキャビネットにしまう(`STATIC`)、というメリハリが、大規模な基幹システムを動かす知恵なんです。

4. 「REENTRANT(再入可能)」という難所

さて、ここからが少しだけプロの領域です。
メインフレームの世界では、一つのプログラムを複数のユーザーやジョブが同時に使うことがよくあります。これを「再入可能(REENTRANT)」と呼びます。

ここで注意点です。

  • STATIC変数は「共有」される:

全員が同じキャビネットを覗き込むことになります。もし「Aさんの作業データ」を `STATIC` に置いてしまうと、Bさんがそれを上書きして大惨事になります。

  • REENTRANTなプログラムを書くなら:

原則として、変数は `AUTOMATIC` を使いましょう。そうすれば、呼び出されるたびに自分専用の「新品のメモ帳」が割り当てられるので、他の人の作業と混ざることがありません。

5. 初学者の方へのアドバイス

PL/Iのコードを読んでいて、`STATIC` という文字を見つけたら、こう心の中で唱えてみてください。

> 「ああ、君はプログラムが終わるまで、そこにずっと座っているんだね」

そう思うだけで、バグ調査の際に「あれ? なんでこの値が残ってるの?」という疑問が、「あ!STATICだから前回の値が残っているんだ!」と解決できるようになります。

メインフレームのレガシーコードは、一見すると無機質ですが、実は非常に論理的で、先人たちの知恵が詰まった結晶です。怖がる必要はありません。一つひとつ、変数の「性格」を知ることから始めていきましょう。

また困ったことがあったら、いつでも聞きに来てくださいね。あなたのメインフレームライフを応援しています!

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