1P by neo 4시간전 | favorite | 댓글 1개
  • 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는 다양한 언어에 적용 가능하며, 빠르고 효율적으로 파일을 줄이는 데 유용함.
    • 오픈 소스 블로그로, 오류가 있으면 변경 제안 가능함.
Hacker News 의견
  • 한 사용자는 파일을 줄이는 방법을 공유하고, 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를 추천함

    • 어셈블리 프로그램을 최소한의 집합으로 줄이는 데 여러 번 사용했으며, 매우 유용한 프로그램임