Re: PL/1, Origin of struct
In article <030911215310.M0126955@flame.hirata.nuee.nagoya-u.ac.jp> takao@hirata.nuee.nagoya-u.ac.jp writes:
>ただ, 対応するポインタ変数を確保することによって「コンパイラが配
>列の大きさを意識しなくていい」ということは言えると思います.
>
>これは 2次元以上の配列になると影響してくるんですが, C で a[M][N]
>という配列 (M, N は定数) を確保したときに a[i][j] をアクセスしよ
>うとすると, 実質的に *(a[0] + i*N + j) という計算をすることになり,
>このため N を記憶しておく必要があります (場合によっては i*N とい
>う乗算も必要). ところが, BCPL では同じ配列に対して a の分に加えて
>a!0〜a!(M-1) の分も確保します (a の内容は a!0 のアドレス, a!i の
>内容は a!i!0 のアドレス). こうすると a!i!j のアクセスに必要な処理
>は C で書くと *(*(a + i) + j) となり, N の値を記憶する必要はなく
>なります (しかも乗算も不要).
このこと自体は解るんですが、
だからって、配列を切る際に、
コンパイラが有無を言わせずポインタ変数を確保する理由には
ならないような気がするんですけどねえ……
そういうアクセス法が必要だとプログラマが判断した場合に、
明示的にプログラミングによって確保するとする方が、
BCPLの哲学にも合っているような気がします。
戸田 孝@滋賀県立琵琶湖博物館
toda@lbm.go.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735