[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] RE:[jfriends] 四方山話(was Re:[jfriend




前橋です。

さいとう さん:
> ただ、その昔、BDS C(BSDにあらず)を使っていた頃は、
> メモリマップを自分で考えて、ポインタに即値を代入して
> 使っていたのは事実です。

その昔、PC-9801のテキストVRAM領域を配列にマップして、ブロック
崩しを書いたことがあるのを思い出しました。言語は確かTurbo Pascal
だったはず。

同じくテキストVRAMを配列にマップして、乱数をばらまき、ソート
するプログラムも見ました。バブルソートとクイックソートの驚異
的な速度差がよくわかりました。これはCだったかな。

さらに昔には、PC-8001なんてのを使っていたりして、TL/1コンパ
イラで... とか言ってると年寄りの昔話ですが。

> ただ、そういう人達に対して、ひとくくりに
> 「Cは高級アセンブラである」とか「ポインタはアドレスでない」とか
> 言っちゃうのは、ちょっと無理があるかな、と思います。


全くもってその通りで、だから私のページでは、

|でも、現実にC言語でアプリケーションプログラムを書く上では、
| ポインタがアドレスであることを意識する必要など全くないもの
|です。いざバグるその時までは... って、 この辺がヨワヨワなん
|ですが(^^; 

「アプリケーションプログラム」と書いてるわけでして。
# どこまでアプリケーションか、という所の定義が曖昧だったりし
# ます (^^;

例えばカーネルでも書くんなら、やっぱりポインタをアドレスとし
て意識しなければならないこともあるでしょう。

|高級言語を使いたいのに、C言語を使わざるを得ない場合に、 

ってことも書いてます。

要は、

  いらんときまで低レベルの概念を意識すべきではない。
  ポインタはアドレスかもしれんけど、そーゆーことは
  忘れてろ。

と言っているわけです。

その方が、移植性も可読性も高いプログラムが書けるものです。

# てなわけで私はmemcpyとかmemsetとかはまず使わないんですが、
# 3次元ぐらいの配列をコピーする際、3重ループでぐるぐる回すかっ
# てとき、悩みはじめたりします (^^;

世間には、やっぱりどうにも「抽象化した思考」というのが
できない人がいて、そういう人がCの本なんか書いたりすると、
intやdoubleのサイズを固定で書いたりして「だからそれは処
理系依存だっちゅうに」という突っ込みを受けたりするわけ
ですが、

現実問題として、大抵のCの処理系では、領域破壊し放題なので、
メモリとアドレスの概念を理解してないとデバッグではまるわけで、
「一度は通らなければならない道」ではあります。

でも、いつまでもそのレベルで足踏みしているってのもね。

# そういやかつて有名だったな○お君のページには、「一番得意な
# プログラミング言語は機械語なんです」とか書いてあったような。

                                            de 前橋