Re: gcc 読み会中
河野真治 @ 琉球大学情報工学です。
In article <061216160110.M0173818@utogw.gssm.otsuka.tsukuba.ac.jp>, kuno@gssm.otsuka.tsukuba.ac.jp writes
> > 速度的に全然違うそうです。まぁ、テーブル読み込みのインタプリタ
> > と比べても仕方ないだろうとは思うんだけど。
> 速度が問題になるのかなあ。CPUがこんなに速くなってるのに。
lookup table だと分岐予測を不可能にするので、その意味でも
思ったより、影響します。
ただ、時間がかかるのは最適化の方なので、パーサが速くなっても
ねぇ。と普通は思うんだけど... 実は、そうではないです。
最近は、ソースが結構巨大。特に、
include ファイルがでかい
つまり、ソース自体が小さくて、最適化もさしてかからないんだが、
無駄な include をがんがん読む。この部分の速さは重要です。
特に、
C++
で顕著です。C++ でなくても、オブジェクト指向に書くと構造体と
クセサが増えるし。あと、inline ですね。使うか使わないかに
変わらず、include するしかないので。
gcc 4.0 は、preprocessor builtin でもあるので、その効果もあり
構文解析が速くなっているようです。
C++ のコンパイルの地獄の遅さに閉口している人は結構いると思う。
> いや、初心者がささっと作れるようにするのにはLALRパーサジェネレー
> タがいいと私は思ってますよ。でもプロ(級)がメンテするGCCならツー
> ル入ってるより全部コードの方が楽なのかなと想像します。もう構文解
> 析なんてどうでもいいからツール捨てるために書き直したとか。
LALRかどうかは、BNFからはわかりませんよね。あと曖昧性を自明
に解決しないので、エラーが出たと言って騒ぐ初心者が後をたたな
いという致命的な欠点があります。無理して取ると、汚くなるし。
さらに、構造体の構文解析とかをyaccでやらせてみるとわかるんですが、
文法の自由度が高すぎて、つい、top down に書いて、わけがわからなく
なってしまう。再帰下降法の方が、bottom upに書くしかないので、
文法構築のとっかかりが良いようです。
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科
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