3

今日では、「C/C++ コンパイラは、手書きのアセンブリよりも優れたコードを生成する」というのが一般的なマントラです。または「コンパイラは、手で書くよりも優れたコードを生成します。」

しかし、これが真実であることをどうやって知るのでしょうか? HLL コンパイラ コードの品質に関する貴重な研究はありますか? C/C++ だけでなく他の言語についても、この主題に関するいくつかの作品を読みたいと思います。

ありがとう

編集: この件についての議論や、個人的な意見や考えは求めていません。主題に関する研究への参照について質問しています。そのような研究には、検証可能な主題に関する実験的または理論的研究が含まれている必要があります。

そのような情報がない場合は、この質問に答えないでください。私はすでにこの件に関するあなたの考えをすべて知っています。

4

3 に答える 3

2

あなたが疑問に思っているマントラは、実際には Fortran の説明そのもので Backus ら自身によって導入されました。

[プログラマー] は、このジョブを手動でコーディングするのに 3 日かかり、デバッグに未知の時間を加えた可能性があり、実行速度の大幅な向上は達成されなかったと推定しました。

現代の観点からすると、あなたの質問の問題は、コンパイラによって生成されたコードを評価することではなく、人間によって生成されたコードを評価することです。十分に大きなプログラムに対して完全に手書きのアセンブリ コードを提示することはめったにありません。

それでも、人間が限られた量のコードを書くだけでよい状況では、このような比較が可能です。たとえば、次のように考えてください。

人間とコンパイラによって生成されたコードはほんの一部です。または

コードは DSP 用に生成されます。また、手書きのコードは数十行または数百行の C コードのサイズに適しており、800 行の C コードのプログラムは大きいと見なされます。

また、 Sufficiently Smart Compilerの既知の問題があります。理論的には必要なアルゴリズムはすべてよく知られていますが、実際には、さまざまな理由により、コンパイラーまたはコンパイラー開発者はそれらを適用できません。この問題の典型的な例をここで分析します。

コンパイラが非常に悪い仕事をするよく知られた例の 1 つは、インタプリタ ループの中心にあります。

ある時点で、議論は次の段階に移りました。自動生成されたコード ジェネレーターは、手書きのコード ジェネレーターと同じくらい優れたコードを生成します。

于 2013-02-14T04:18:36.870 に答える