読者です 読者をやめる 読者になる 読者になる

TL/1 の変なところ (変数)

プログラミング言語 TL/1 の重要な特徴のひとつとしては、変数が挙げられる。 TL/1 の変数はどれも 1 バイト整数なので型の細かい区別がない。 単変数と配列があるくらいのものだ。

そして、定数として使えるのも 1 バイトサイズ、すなわち 0〜255 と制限されている。 リテラル表記は十六進数で $0〜$FF と書くことも出来るし、文字で 'A' とか 'B' とかいった形でも表現できるが、どの表現方法をとっても意味は同じだ。

VAR A
BEGIN
  A := 65
  A := $41
  A := 'A'  % この 3 種類の表現方法は全く同じ意味

  A := 300  % 255 を越える定数は NG
END

配列の大きさとして指定できるのも 255 が最大となっている。 配列を宣言するときの大きさの指定は定数でなければならないという制限があるので上述の制限から自動的にそうなる。 但し、配列の大きさに数字 N を指定した場合の意味は 0〜N までを添字として受付けるという意味であって N 個の値を格納できるという意味ではない。 これは C 等とは微妙に異なるのでうっかりしないように注意が必要だろう。

ARRAY A[10]    % 11 個の場所が確保される
BEGIN
  A[10] := 20  % 添字に 10 を与えても OK
END

常識的に考えればいくら 1980 年頃のマイコンでも配列の大きさが 256 バイトというのは制限されすぎだろうと思うかもしれない。 一応はもっと大きい配列を扱うことも出来る方法が用意されていて MEM 変数という名前が付いている。 これについては使用例を示した方がてっとりばやい。

VAR A
BEGIN
  MEM($CB, $C) := 10   % メモリアドレス CB0C に値 10 を書込む
  A := MEM($CB, $C)    % メモリアドレス CB0C から値を取出す
END

あらゆる範囲にアクセス可能なので、各アーキテクチャのメモリマップを見て空いている箇所を自分の判断で使うことになる。 まったく牧歌的な時代のプログラミング言語という印象だ。

Document ID: 4845c3932e1643a74859d66f019b05da