コンパイラーとインタープリターにバグはありますか?(ユーザーとして)バグに対処するにはどうすればよいですか?[閉まっている]


28

コンパイラの作業が本質的にソースコードをマシンレベルのコードに変換することである場合、コンパイラに不具合、つまり障害のある「翻訳」が存在する可能性があります

通訳についても同じことが言えます。必要なコンテンツを出力できない場合がありますか?

コンパイラ/インタープリターのバグを聞いたことはありませんが、存在しますか?


6
開発に彼らが最も確かに任意のオープンソースコンパイラのバグトラッカーでちょうど見存在します
ラチェットフリークの

7
コンパイラ/インタープリターのバグを聞いたことはありませんが、存在しますか? gccコンパイラのバグのメーリングリストを見つけました:gcc.gnu.org/ml/gcc-bugs
FrustratedWithFormsDesigner

47
これはあまり良い質問ではなく、常識的な質問をするだけです。

12
これまでのところ、コンパイラのバグに遭遇する可能性に対処するコメントや回答はありません。まず、独自のコードのエラーを除外するようにしてください。
ダンピチェルマン

6
簡単な答え:間違いなく。IDEとコンパイラーは通常、外の世界に出会う前に人生のほんの少しの範囲で実行されますが、開発者が少し賢すぎることに気付くコーナーケースは常にあります。
キース

回答:


51

はい

比較的成熟している言語よりも、積極的に開発されている言語のほうがそれらを見つける傾向があります(したがって、頻繁に大きな変化は見られません)。これがおそらく、ほとんどの言語が安定性のさまざまな「段階」でリリースされる理由です。ナイトリービルドは、完全にリリースされてアクティブに使用されているバージョンよりもリリース候補よりも安定している可能性がはるかに低くなります。

幸いなことに、これらの言語のほとんど(特にオープンソース言語)には、レポートを送信できる公開バグ追跡システムがあります。

私自身の経験では、Windows上のScalaでかなりあいまいだが深刻なバグに遭遇しました。調査結果をバグトラッカーに提出したところ、問題はかなり迅速に修正されました。その場合、言語開発者は、エラーログ出力に役立つメモを含めるのに十分なほど賢く、実際にコンパイラエラーであったことを示唆し、レポートの送信先を述べました。


気にしないでください。関連すると思われる新しい段落(承認待ち)を追加しました。コンパイラにはバグが含まれているだけでなく、悪意のあるコードが含まれている場合があります。
アンディ

@Andyは、モデレーターの1人がコメントまたは別の回答である必要があるものとして拒否したようです。
KChaloux

「はい」だけでなく、「はい!」:
ヘリオン

Cは成熟しており、積極的に開発されています。C ++も同様です。Javaも同様です。など。
djechlin

100

素人の言葉で:

すべてのプログラムにはバグがあります。

コンパイラはプログラムです。

エルゴ、コンパイラにはバグがあります。


55
さらに心配なのは、デバッガはプログラムです。したがって、デバッガにはバグがあります。
ダニエル・グラッツァー

19
@jozefg:では、デバッガをどのようにデバッグしますか?ウォッチャーを見るのは誰ですか?
FrustratedWithFormsDesigner

16
@FrustratedWithFormsDesignerウォッチャーウォッチャー、当たり前。
ジミーホッファ

9
@JoelFan「can have」を書いたので、その例外はカバーされています。「持っている」と言う場合、重要なプログラムのみを参照していることを指定する必要があります。「持つことができる」と言うことで、あなたはする必要はありません。
Tulainsコルドバ

8
「Hello world」プログラムは、バグのあるコンパイラに準拠している場合、バグが発生する可能性があります。
wtsang02



4

もちろん、コンパイラはソフトウェアだからです。

2005年、大企業向けに作成した非常に重要なソフトウェアでコードの一部が失敗しました。会社の修正には文字通り数百万ドルの費用がかかったため、もちろん大規模な調査を開始しました。

ありがたいことに(私の観点から)、この問題はDelphiのコンパイラの問題であることが判明しました。try finallyブロックでは、関数の戻り値が破棄され、呼び出し元に返される結果が完全にランダムになりました。これは文書化され、ボーランドによって認められました。

.NETは、特に初期の実装において、文字通り何百もの異なるメモリリークが発生することがよく知られていました。

私は、バグのないソフトウェアのようなものはないと主張します。コンパイラも例外ではありません。ただし、これらはほとんどのビジネスソフトウェアよりも徹底的にテストされており、賢く、批判的で、議論の多い人々によって消費されているため、その実績は実際には全体としてかなり良好です。


「正式に検証された」ソフトウェアがあります。数学的に機能することが証明されています。場合によっては、正式に検証されたコードにもバグがあります。IIRC Javaのクイックソート実装は正式に検証されましたが、オーバーフローは考慮されませんでした。
デビッドプランプトン

1
ソフトウェアは何でしたか?C'mon :)
ロックラン

2

バグだけでなく、故意のマルウェアもあります。

Brian Kernighanが元のUnix Cコンパイラに実装した「ログイン」トロイの木馬は、これらの中で最もよく知られています。http://cm.bell-labs.com/who/ken/trust.htmlの記事にはこれに関する背景があります。


1
それが実際に実装されたことは明らかですか?
キーストンプソン

これは非常に興味深いトピックですが、この質問にはまったく関係ありません。

@delnan私は同意しません。質問の中心にあるのは、「コンパイラーをどれだけ信頼できるか」です。
アンディ


0

はい。

また、コンパイラだけでなく、インタープリター/デバッガー、およびサードパーティのソフトウェアツールも使用します。

現在、サードパーティのソフトウェアを使用しており、いくつかの問題が発生しています。時々、バグを見つけて報告してくれてありがとう。:)

それらの一部には、メモリリークもあり、クラッシュにつながります。ここでの重要な質問は、サードパーティのツールまたはコンパイラに、アプリケーションが正しく動作するためのバグがあるかどうかをどのように判断するかです。


あなたの重要な質問は、停止問題
-wtsang02

0

コンパイラーは、ある言語(ソース言語)で書かれたプログラムを読み取り、それを別の言語(ターゲット言語)の大部分が機械語である同等の別のプログラムに変換するプログラムです。

ソース言語コードが行ごとにスキャンされるコンパイラのさまざまなフェーズがあります。ソース言語コードでスキャンされるすべてのキーワードを追跡するシンボルテーブルがあります。

フェーズ1:字句解析プログラム-ソースプログラム内のすべての文字を読み取り、トークン(int、char、float、if-else、for、whileなど)の論理的な分離を形成します。

フェーズ2:構文アナライザー-トークンのストリームの構造を分析します。後置/前置などを含む式の階層的解析(a = b + c * d)

フェーズ3:セマンティックアナライザー-トークン(実数、浮動小数点など)および演算子の優先順位などの多くのタイプチェック。

フェーズ4:中間コードジェネレーター-a = b + c * de(temp1 = c * d、temp2 = temp1 + b、temp3 = temp2-e)

フェーズ5:コードの最適化-
排除するさまざまな分析(制御フロー、データフロー、変換):冗長コード、定数伝播、部分デッドコード、共通部分式、ループ不変コード

フェーズ6:コード生成-レジスタに値を入れるターゲットコード(ほとんどのアセンブリ言語)の生成

これらのフェーズはすべて、よく書かれたプログラムにすぎず、その中にN個の欠陥がある可能性があります。


-1

もちろん、コンパイラは単なるプログラムであり、その作者もバカです:)。言語仕様にさえバグがある可能性があります。例:c#+ foreach + lambda

またはPythonでは、インタープリターのバグ:evil astをコンパイルすると、インタープリターがクラッシュします。

コンパイラー/インターペッターのバグを確認したい場合は、phpをご覧ください。整数オーバーフローに関する有名なバグがあります。最初の修正はから始まりましたif (size > INT_MAX) return NULL;物語の続き


コンパイラライターはバカではありません。コンパイラーは非常に複雑であるため、フィールドに入る障壁もかなり高くなります。したがって、それらを書く人々は、普通の人がするように間違いを犯さないことを期待できます。
jszpilewski

foreach / lambdaはバグではなく、ラムダが追加される前に行われた特定の良心的な設計決定に帰着します。
アンディ

@Andy、私が知っているように、誰もこの決定がどんな問題を引き起こすかを知りませんでした。なぜバグではないのですか?
ヴィクトルLOVA

@jszpilewskiそのテキストの後に笑顔が見えますか?
ヴィクトルロヴァ

1
彼の質問は仕様にバグがあるかどうかではなく、コンパイラにバグがあるかどうかということなので、OPを読み直すことをお勧めします。C#コンパイラは仕様に一致していたため、コンパイラにはバグがありませんでした。私はまた、あなたが再読み込み「ソフトウェアのバグがエラー、欠陥、故障である、またはコンピュータプログラムの障害」独自のウィキペディアの引用を提案
アンディ・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.