新城@筑波大学情報です。こんにちは。

In article <m3oesw2i6q.fsf@kzin.dip.jp>
        Mito <co_mon@ybb.ne.jp> writes:
> 現在のC言語でも読みやすく、よいプログラムを作ることは可能だ
> と思いますが、コンパイラや規格のために阻害されるようなことが
> あるということなんでしょうか?

そういうことです。「現在の」C言語は、もちろん完璧ではないので。
改良の余地はまだまだあります。

> # Cのポインタには大小関係なんて存在しないと思っているんです
> # が、これは間違った見識だったでしょうか?

大小関係は、あります。ポインタとポインタを引き算してもいいで
す。引算した結果は、符合付の整数です。あとポインタと整数を足
算引算してもいいです。

type1 *p, *q ;
int x ;
   x = p - q ;
   p -= x ;

p++ は、p += 1 と同じですけど、+= 1 でなくて += 100 でも
+= -1000 でもいいです。

> # つまり、上の例では↓ならまだいいかなってところだと思うん
> # ですが。
> #         for (p = &a[0]; p != &a[10]; p++)

これは、ループの終了を != でやるのは、やりたくないですね。
安全側に倒したい。

> また、Cは歴史的な経緯であまり大きな規格の変更はできないので
> はないかと思いますが、過去の資産を捨ててもコンパイラと規格を
> 変更するだけの意義があるのでしょうか?

C言語は、歴史的に見ると大改定を繰り返してきた言語じゃないで
すかね。Fortran には負けるかもしれないけど。たとえば、昔のC
言語だと、x += 1 を x =+ 1 と書いていました。x =*y と書くと 
ポインタと紛らわしいので、今のように改訂されました。enum を
入れたとか、関数のプロトタイプ宣言ができるようになった改訂も
大きかった。今でもそういうのを使わないでプログラムを書いて
いる人も知っています。

イマイチな改訂は、まず、void * 。void は許せるけど、void * 
にそんな意味を持たせるなんて。const もパッとしません。
昔に遡ると、static というキーワードはやめてほしいかった。
変数は、いいとして関数に static って付けるやつ。関数は全部
機械語で静的に存在するものです。Java も static は真似するこ
とはなかったろうに。

改訂されないような言語は、死んだ言語です。昔の言語で誰も使わ
なくなったような言語は、改訂されません。生きている言語である
限り、改訂は避けられないでしょう。

gcc の closure (関数の中に関数を定義)とか typeof とかcase の 
... での範囲とかどうなったんでしょうね。gcc とか Visual C++ 
とか、標準にはない独自の拡張は多いのですけれど、それを標準に
しようというような話は、誰かがやっているんじゃないですか。

私が改訂して欲しいのは、ぱっと思いつくのは、ビット数付きの宣
言です。たとえば、

int:32 x ;

とすると、32 ビットになるとか。私は ASCII でいいけど、文字列
リテラルを Unicode にして欲しいとかいう人もいるんじないです
かね。C言語というと、"\n" の意味がわかるとかっこいい、とい
うのもあったのでしょうが、画面がないコンピュータも多いし。

> 単細胞の私には他の言語に乗り換えたほうが幸せになれそうな気が
> しているのですが。

同感です。今でもC言語ではなくて、Javaとか他の言語で書い
た方がいい場合はかなり多いと思います。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\