# 어떤 언어에서도 사용할 수 있는 C-Reduce 기술

> Clean Markdown view of GeekNews topic #17995. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17995](https://news.hada.io/topic?id=17995)
- GeekNews Markdown: [https://news.hada.io/topic/17995.md](https://news.hada.io/topic/17995.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-28T10:34:23+09:00
- Updated: 2024-11-28T10:34:23+09:00
- Original source: [bernsteinbear.com](https://bernsteinbear.com/blog/creduce/)
- Points: 1
- Comments: 1

## Topic Body

- # C-Reduce의 활용

  - C-Reduce는 Regehr와 그의 동료들이 개발한 도구로, C 컴파일러 버그 재현기를 최소화하는 데 사용됨.
  - 예를 들어, Clang 버그를 유발하는 10,000줄의 C 파일을 줄이고 싶을 때 유용함.
  - C-Reduce는 C 언어에만 국한되지 않고 다양한 언어에 적용 가능함.

- # C-Reduce의 요구 사항

  - 결정론적 조건 필요.
  - 빠른 재현기가 있으면 감소 속도에 도움을 줌.
  - C-Reduce가 줄일 수 있는 하나 이상의 변경 가능한 소스 파일 필요.

- # RustPython 버그 사례

  - RustPython에서 발생한 버그를 보고하기 위해 스크립트 `interesting.sh` 작성.
  - 스크립트는 RustPython 실행 후 특정 오류 메시지를 grep으로 찾음.

- # C-Reduce 실행

  - C-Reduce를 실행하여 파일 크기를 50% 이상 줄이는 데 성공.
  - `--not-c` 옵션을 사용하여 C에 특화된 패스를 피하고 Python에 맞게 최적화함.
  - 결과적으로 빠르고 쉽게 파일을 줄일 수 있었음.

- # 결론

  - C-Reduce는 다양한 언어에 적용 가능하며, 빠르고 효율적으로 파일을 줄이는 데 유용함.
  - 오픈 소스 블로그로, 오류가 있으면 변경 제안 가능함.

## Comments



### Comment 31786

- Author: neo
- Created: 2024-11-28T10:34:24+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42258103) 
- 한 사용자는 파일을 줄이는 방법을 공유하고, RustPython과 scrapscript를 사용하여 설정하는 방법을 설명함
  - `git clone` 명령어를 사용하여 RustPython과 scrapscript를 클론하고, `cargo build --release`로 빌드함
  - `interesting.sh` 파일을 다운로드하고 실행 권한을 부여함
  - `nix run nixpkgs#creduce` 명령어를 사용하여 파일을 줄임

- C-Reduce의 사용을 추천하며, Shrinkray라는 도구도 함께 사용해볼 것을 권장함
  - Shrinkray는 포맷에 독립적이며 C-Reduce가 잘 작동하지 않는 경우에도 유용함

- C-Reduce에 대한 논문이 2012년에 발표되었음을 언급함
  - John Regehr et al.의 논문을 통해 C-Reduce의 작동 방식을 설명함

- C-Reduce를 처음 알게 되었고, git bisect를 처음 발견했을 때와 같은 흥미로움을 느낌
  - 나중에 필요할 때 사용하기 위해 기억해 두기로 함

- C-Reduce의 예시를 보여주는 기사를 발견했으나, 각 반복에서 무엇을 제거할지 결정하는 방법에 대한 이해가 어려움
  - 토큰화 과정이 있을 것으로 추측되지만, 프로그래밍 언어 간에 어떻게 작동하는지 이해하기 어려움

- C-Reduce가 매우 유용하다고 평가함
  - CSmith를 사용하여 무작위 테스트 프로그램을 생성하고, 충돌 시 자동으로 C-Reduce를 사용하여 문제를 줄임

- 델타 디버깅은 새로운 개념이 아님
  - "delta"라는 델타 디버깅 구현은 19년 이상 되었으며, 오픈 소스로 공개됨
  - LLVM 소개에서는 표준 델타 디버깅 도구로 언급됨

- SQL에서도 잘 작동하며, 직장에서 사용 중임
  - SQLancer를 통해 발견함

- C 언어 외의 언어에서도 작동하는 이유에 대한 설명이 없으면 믿기 어려움
  - LLM을 사용하지 않기 때문에 더욱 혼란스러움

- C-Reduce의 좋은 후속 도구로 cvise를 추천함
  - 어셈블리 프로그램을 최소한의 집합으로 줄이는 데 여러 번 사용했으며, 매우 유용한 프로그램임
