-
C-Reduceの活用
- C-Reduceは、Regehrとその同僚たちが開発したツールで、Cコンパイラのバグ再現ケースを最小化するために使われる。
- たとえば、Clangのバグを引き起こす10,000行のCファイルを縮小したいときに有用である。
- C-ReduceはC言語だけに限定されず、さまざまな言語に適用できる。
-
C-Reduceの要件
- 決定論的な条件が必要。
- 高速な再現ケースがあると、縮小の速度向上に役立つ。
- C-Reduceが縮小できる、変更可能なソースファイルが1つ以上必要。
-
RustPythonのバグ事例
- RustPythonで発生したバグを報告するために、スクリプト
interesting.sh を作成。
- スクリプトはRustPython実行後、特定のエラーメッセージを
grep で探す。
-
C-Reduceの実行
- C-Reduceを実行し、ファイルサイズを50%以上縮小することに成功。
--not-c オプションを使ってCに特化したパスを避け、Python向けに最適化した。
- 結果として、迅速かつ簡単にファイルを縮小できた。
-
結論
- C-Reduceはさまざまな言語に適用可能で、ファイルを高速かつ効率的に縮小するのに有用である。
- オープンソースのブログであり、誤りがあれば変更提案が可能。
1件のコメント
Hacker Newsのコメント
あるユーザーはファイルを縮小する方法を共有し、RustPython と scrapscript を使ったセットアップ方法を説明している
git cloneコマンドを使って RustPython と scrapscript をクローンし、cargo build --releaseでビルドするinteresting.shファイルをダウンロードして実行権限を付与するnix run nixpkgs#creduceコマンドを使ってファイルを縮小するC-Reduce の使用を勧めており、Shrinkray というツールもあわせて試すことを推奨している
C-Reduce に関する論文が 2012 年に発表されたことに言及している
C-Reduce を初めて知り、git bisect を初めて見つけたときと同じような面白さを感じたという
C-Reduce の例を示す記事を見つけたが、各反復で何を削除するかをどう決めているのか理解しにくいという声がある
C-Reduce は非常に有用だと評価されている
デルタデバッグは新しい概念ではない
SQL でもよく動作し、職場で使っているという
C 言語以外でも動作する理由の説明がなければ信じがたいという意見がある
C-Reduce の優れた後継ツールとして cvise を勧める声もある