コンパイラはどのように安定性を保証しますか?
-
29-09-2020 - |
質問
Cコンパイラが必要なとします。その程度のコンパイラの複雑さを考えると、そのコンパイラをC様言語で書くことが望ましいであろう。せいぜい、CコンパイラはCで書かれていますが、それはCコンパイラが始まる必要があります。コンパイラの早期反復の1つの作成で間違いがある場合は、それが伝播する可能性があります。コンパイラは、これが起こらないことを確認しますか?明らかに、プロセッサーでさえも、コードは完璧ではありませんが、あなたが安定性を測定していない場合は、あなたのコンパイラーが安定しているかどうかさえわかりません。どのような仮定がなされていて、正当化されていますか?私はそれが建築依存になると想像します。
編集:安定性によって、コードが意図したとおりに実行されることを意味します。
他のヒント
コンパイラに微妙なエラーが含まれていることが起こります。空気差しの誤差が検出され固定されるため、露光剤は無効です。
微妙なエラーを持つコンパイラ自体でコンパイルされているコンパイラは、露出エラーを持つ傾向があります。彼らはとても露骨なので検出が簡単です。これらの露骨のエラーは完全に素晴らしいソースコードによって生成されるので、それらは修正するのは難しいでしょう。
解決策は、バグが非常にまれで、コンパイラ内で非常にまれである十分な品質のコンパイラを作成することです。また、コンパイラのバグが非常に複雑なコードに影響を与えることを期待しているため、コンパイラ作成者は単純なコードを作成し、一般的なコーディングパターンに続くコードを書く必要があります。
1回の回答はテスト、テスト、テストです。例えば。GCCには、コンパイラが構築されるたびにチェックされているすべてのテストセットが付属しています。いわゆるトリプルテストを渡すために多くのコンパイラが必要です.C_1を与えるコンパイラCのコンパイラCのコンパイルコード。C_2を与えるC_1をC_2にコンパイルし、C_2を与えるC_2をC_2にコンパイルします。これでC_2とC_3はCでコンパイルされ、等しくなるはずです。そうでなければ、魚が起こっている何か。
退職者の「Academiaに埋め込まれています」ブログ、彼は周りに働く人々の一人です。LLVMコンパイラツール、およびコンパイラをより良くするために使用されるツールやテクニックに定期的に触れます。