「構造化プログラミング」の書籍に載っていたobj.x()の構文を、SMALLTALK80言語はサポートしていなかったことを、この記事で示す。
構造化プログラミング
まず、75年に出版された『構造化プログラミング』*1に載っているソースコードを引用する。
class Gauss(n); integer n;
begin array W, X[1 : n];
real procedure integral (f, a, b);
real procedure f; real a, b;
(中略)
end of Gauss;
......
ref(Gauss) G5, G7;
......
G5 :- new Gauss(5); G7 :- new Gauss(7);
......
G5.integral(F, A, B) ...... G7.integral(F, A, B) ......
(『構造化プログラミング』p.207より引用)
SMALLTALK80言語
続けて、SMALLTALK80言語のソースコードを抜粋してみよう。
Time now
Date today
Point x:100 y:150
Rectangle
orgin:(Point x:50 y:50)
corner:(Point x:250 y:300)
(『SMALLTALK-80 -言語詳解-』*2p.69より抜粋)
二つの言語の比較
まず、SMALLTALK-80言語にobj.x()構文はどこにも存在していなかった。開発者のゴールドバーグが執筆した『SMALLTALK-80 -言語詳解-』を見る限り、.(ドット)で中間演算子のようにつなげて使うソースコードは見当たらなかった。
一方で、「構造化プログラミング」の第三部で、上記のように、G5.integral(F, A, B)と書かれたソースコードが見つかった。
ここで、「構造化プログラミング」第三部では次のような記述があるので、引用しておく。
この小論では、プログラムを構造化するいくつかの方法を調べ、それらが概念の形成に関係していることを示す。
とくにその構造化の機構を重視して、プログラミング言語 SIMULA 67 を用いることにする。
『構造化プログラミング』p.197より引用)
このように、構造化プログラミングの例として、ダイクストラ達はSIMULA67言語を紹介したのである。このSIMULA 67言語がobj.x()のような構文をサポートしていたと考えらる。
実際に、その後のソースコードでも似た文が登場する。
current.wait(Q)
(『構造化プログラミング』p.244より引用)
結論
構造化プログラミングのobj.x()構文をSMALLTALK80言語はサポートしていないことが明らかとなった。このことは、言語の体系を考察する上で重要である。