予約語がない?PL/Iの自由奔放すぎる世界へようこそ
こんにちは。メインフレームの深淵へようこそ。
普段、JavaやC#、あるいはCOBOLの世界で暮らしている方にとって、この「PL/I」という言語は、まるで異世界の魔法のように見えるかもしれません。
今日は、そんなPL/Iの最も個性的で、かつ初心者を一番悩ませる「予約語が存在しない」という仕様について、紐解いていきましょう。
「予約語がない? じゃあ、何をどう書けばいいの?」と不安になる必要はありません。実はこれ、プログラマの自由を極限まで尊重した、PL/Iの設計思想そのものなんです。
—
1. 「予約語がない」とはどういうことか?
JavaやCOBOLには「予約語(Reserved Words)」がありますよね。例えば `IF` や `WHILE`、`DATA` といった単語を、変数名や関数名として使うことはできません。コンパイラが「あ、これは命令だな」と混乱してしまうからです。
しかし、PL/Iにはそれがありません。PL/Iにとって、単語は「文脈(コンテキスト)」で判断されます。
想像してみてください
あなたが「IF」という名前の変数を作ったとします。
PL/Iコンパイラは、あなたのコードを見てこう考えます。
> 「ふむ、ここにある『IF』は、文脈的に見て変数として宣言されているな。だからこれは命令ではなく、箱の名前(変数名)として扱おう」
逆に、文法的に正しい位置に『IF』があれば、「おっと、これは条件分岐の命令だな」と切り替えます。非常に柔軟で、空気を読むのが上手な言語なんです。
—
2. 実例で見てみよう:混乱と平和の境界線
言葉だけだと少し怖いですよね。実際のコードを見てみましょう。
1
/ PL/Iの驚きの宣言例 /
DECLARE IF CHARACTER(10) INIT(‘こんにちは’);
DECLARE THEN CHARACTER(10) INIT(‘世界’);
/ どちらも変数名として使えてしまいます /
PUT SKIP LIST(IF);
PUT SKIP LIST(THEN);
/ もちろん、文脈次第で本来の命令としても機能します /
IF IF = ‘こんにちは’ THEN THEN = ‘PL/I’;
このコード、読めますか?
`IF IF = ‘こんにちは’ THEN THEN = ‘PL/I’;`
最初は目が回りそうになりますよね。「IFが命令なのか変数なのか、どれがどれだか!」と。
しかし、PL/Iコンパイラは厳格に「左側にあるIFは条件文の開始、その次のIFは変数名」と正しく解析します。
—
3. なぜこんな「危うい」仕様なのか?
これには歴史的な理由があります。1960年代、PL/Iは「科学技術計算も事務処理も、これ一つで全部できるようにしよう!」という壮大な野望のもとに設計されました。
もし、将来的に新しい便利な命令(キーワード)を追加したくなったとき、予約語だらけの言語だと、既存のユーザーが変数名に使っている単語と衝突してしまい、過去のプログラムが動かなくなってしまいますよね。
「予約語をなくせば、言語を拡張しても既存のプログラムを壊さないで済む!」
そんな、「未来のエンジニアへの配慮」からこの仕様は生まれたのです。メインフレームが半世紀以上稼働し続けている背景には、こうした「後方互換性を殺さない」という凄まじい執念があるのですよ。
—
4. 初学者が気をつけるべき「落とし穴」
とはいえ、現場でこんな書き方をしたら、先輩にこっぴどく怒られます(笑)。この仕様、便利な反面、読みやすさ(可読性)を著しく損なうリスクがあるからです。
実務で意識すべきポイントは以下の2点です。
- キーワードを変数名に使うのは、技術的には「OK」だが、倫理的には「NG」
- たとえコンパイラが許しても、人間が混乱します。`IF` や `SELECT` 、 `DO` といった単語を変数名にするのは絶対にやめましょう。
- スペルミスが「謎の変数」を勝手に作ってしまう
- PL/Iには「デフォルト宣言」という仕様があり、宣言していない変数を使うと、勝手に型を推論して変数を作ってくれます。もし `WHILE` と書くべき場所を `WHEIL` と間違えたら……コンパイラは「ああ、WHEILという名前の新しい変数を使いたいんだね」と解釈してしまい、バグの温床になります。
—
最後に:怖がらなくて大丈夫です
PL/Iのこの仕様は、慣れると「ルールに縛られない自由」として心地よくなってきます。
他言語から来た皆さんは、その経験を活かして、「予約語がないからこそ、自分たちで読みやすい命名ルールをしっかり守ろう」と意識するだけで、誰よりも美しいPL/Iコードを書けるようになるはずです。
メインフレームのコードは、先人たちが何十年もかけて磨き上げてきた資産です。その中にある「予約語のない自由な世界」を、ぜひ楽しんでみてくださいね。
また何か気になることがあれば、いつでも聞きに来てください。あなたのメインフレーム・ジャーニーを応援しています!
