Re: const volatile
In article <041202191553.M0126717@flame.hirata.nuee.nagoya-u.ac.jp> takao@hirata.nuee.nagoya-u.ac.jp writes:
>> これは合理的な説明のしようが無いので、覚えてもらうしかないですね。
>まあ「最初にそう決めた人に合理的な理由を聞いてみる」しかないですから.
それは多分無理なのではないかと……
というのも、おそらくは
「最初に決めた人にとって“想定外の発展”をしている」
のではないかと思われるからです。
constって元々は文字通り「不変なもの」だったと思われます。
そして、そこから必然的に派生する意味として「書き込み禁止」になった。
ところが、volatileとの組合わせなんてのが出てきたことによって、
派生だったハズの「書き込み禁止」が本質に変わってしまった
という経緯だったのではないかという推測が成り立ちます。
staticの扱いも似たようなものなんじゃないでしょうか。
autoって後から出てきたものじゃないんですか?
元々は「名無し」属性だったんじゃないでしょうか?
「名無し」だから文脈に応じて、つまり関数の中と外で意味が変わっても、
そう違和感は無いことになったわけでしょう。
で、関数内に関してはautoというキーワードの省略と考えることにしたんだけど、
関数外に関してはそれに相当するキーワードを作らなかった。
ここは私には理解できないところで、
遅くともANSI制定の段階で何か決めるべきだったように思います。
externが「外に存在するもの」であるのに対して、
「外に向かって開放するもの」という意味合いのキーワード。
何が適切なんでしょうね。
intだって似たようなところがあるんじゃないんですか?
現在ではshortやlongはshort intやlong intの省略形と定義されていますが、
元々はshortとintとlongが対等な存在だった。
これも、さらに遡ればintは「名無し」だったんじゃないかと思ってます。
shortと「名無し」とintが対等という方が素直だし……
(というか、単に現在の定義でintを全部省略した形と同じ)
閑話休題、
In article <m3eki958k6.fsf@nospam.maedapc.cc.tsukuba.ac.jp> maeda-news@ialab.cs.tsukuba.ac.jp writes:
>> ・関数の外で static となっていたら「そのファイルでのみ有効」
>> ・関数の中で static となっていたら「関数の外に出ても値が保存され
>> る」
>> ってことで.
>そう。記憶域の生存期間に関する話と、スコープに関する話の両方の意味で
>staticという語を使うんですよねえ。へんなの。
元々は、両方をセットにした概念だったんじゃないでしょうか。
「定義されているスコープの中で静的に存在するもの」という意味。
ところが、関数の中で定義されていたらスコープがその中のなのは当たり前だし、
関数の外で定義されていたら静的な存在なのは当たり前だから、
関数の内外で「冗長でない」性格が違ってくることになってしまった、
とまあ、こんな経緯だったんじゃないかと思っています。
戸田 孝@滋賀県立琵琶湖博物館
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