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

In article <m3znfl5383.fsf@maedapc.cc.tsukuba.ac.jp>
        MAEDA Atusi <maeda@cc.tsukuba.ac.jp> writes:
> これは分かるんですけれど,g_10(), g_20(), g_4()とかがたくさんできるん
> じゃないか(だったらインライン展開の方が良いんじゃないか)ということです.
> あちこちからg(10, x, y)のように特定の引数だけで呼ばれるということが,
> そんなにあるものかどうか.あとは,specialize結果をちゃんと(同じインス
> タンスを呼ぶように)共有するのがそんなに簡単なのかどうか(色んなファイル
> から呼ばれてたり,とか).

specialization の結果のコードの共有をするような、specializer 
は、見たことがないですね。研究レベルでは、誰かがやっていそう
な気もするんだけれど。specialization は、高速化が目的なので、
「やりすぎて遅くなったらやらない」というスタンスです。そすい
う意味では、必ずうまく行くことになっているんだけど、うまくいっ
たかどうか誰が確かめるかという問題が残る、ということですかね。

逆に、コードの共有が本当に得なら、specialization の逆をすれ
ばいいんですよね。仮に generalization と呼ぶことにします。
(←正式の用語があれば、教えてください。) 簡単にできる 
generalization は、inline の逆に outline というか、わざと関
数呼出しにするものです。

前に、Tempo の開発元の一人に、inline の逆をしてみたらとは言っ
てはみたんだけど、そんなことを specializer に求められても、、、
みたいな反応でした。それはそうです。

In article <3989159news.pl@insigna.ie.u-ryukyu.ac.jp>
        kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> 河野真治 @ 琉球大学情報工学です。
> 自明な例だと、
>      inline fd(struct handle hd) { return  hd.hoge->hage->fugo->fd; }
> みたいな奴。で、これが、
>     fd(hd0) = fd(hd0) + 3;
> みたいな形で呼ばれるわけだな。(おっと左側には置けないが...)

C++の参照型を使えば、置けるんでしたっけ。C++の参照型は、
ソースが読めなくなるから一般的には使いたくはないんだけど。
OSの特権モードのような所なら許してもいいかな。

> そのあたりは色んな技術があるわけなんだけど... 何故、inline 
> だけが使われているのかと言うと、呼び出し側だけ見れば良いから
> なんだろうな。でも、最適化という観点から見れば、全体を見なけ
> ればだめなのは当然なんですけどね。

C言語だと inline は、マクロよりははるかに見やすいので、そう
いう意味では許すかなあ。register と同じように、そのうちコン
パイラが無視するんじゃないかなあ。

inline で意味的に違うのは、オブジェクトにシンボルが残らない
ことです。昔の Linux (2.2) なんか、この機能に頼っていて、
inline を外す、つまり、コンパイル・オプション -O2 を取ると、
リンク時にエラーになります。デバッグしたいだけなのに。今でも
そうなんでかかね。

In article <septgh95e3.fsf@astec.co.jp>
        Takuya KUDO <kudo@astec.co.jp> writes:
> 組み込み向けだとコードサイズが無視できなくてキャッシュに入る
> きるかどうかでパフォーマンスに大きな影響がでます。

メモリ使用量を減らすなら、インタプリタにするといいんですよね。
昔は2段階のインタプリタもあった思いました。でも、全部インタ
プリタというわけにもいかなくて、展開というかコンパイルという
か specialize すべき所もあるのでしょうけれど、誰がどうやって
判断するんでしょうね。

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