河野真治 @ 琉球大学情報工学です。

In article <YAS.05Dec12001348@kirk.is.tsukuba.ac.jp>, yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes
> const じゃなくて、invariant ということで、プログラムの外から
> 与えるというのは、好きです。コンパイル時には決まらなくても
> 実行時に決まるというものが特に。実行時特化できるやつね。

pragma みたいな感じですか。

> そういうのも、コンパイラに入れて欲しいけれどね。

なんでもかんでもコンパイラに入れるってのが間違いだと感じてい
るんだよな... プログラム言語の実行意味論がどんどん複雑になる
のを良いとは思いません。どっちかっていうとReflection の方が
まし。

   #reflect malloc(hoge) "read_only"
   a = (fuga)malloc(hoge);

みたいな感じか?

> In article <IRtmf.5$r61.1@news3.dion.ne.jp>
>    wvn <wvnveowije@yahoo.co.jp> writes:
> > 典型的な例として
> > void foo(const char * const a)
> > {
> >     ...
> >     a = b;  // error.
> >     ...
> >     a[2] = '\0'  // error.
> > }
> > // error.
> > の部分がコンパイル時にチェックできるものがありますが、
> 
> これ、どちらか一方は OK かと思ってました。両方ダメでもいいけ
> ど、片方だけ OK にしたい時にはどうやって書くのですか?

二つある const のうち、対応する const を落せば良いはずです。

> volatile は、次の場合に必要になります。
> 
> (1) 共有メモリ型マルチプロセッサでプログラムを書く時
> (2) ハードウェアのレジスタをたたく時
> 
> 全部の領域が volatile と思うと、最適化全然かかりませんよ。

1 clock 単位でvolatileだったら、コンパイラも書けないはず...
これも volatile なんじゃなくて、register/cache invalidate 
なんだよね。あるいは、read_once かな。

volatile は、cast で使うものだと思ってますが、構造体の
field で見掛けた時は、ちょっとショックだった。

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科