neo 4달전 | parent | favorite | on: GN⁺: Clang 대 Clang 대결(blog.cr.yp.to)
Hacker News 의견
  • 컴파일러 작성자가 최적화로 인해 발생한 버그에 대해 책임을 지지 않음

    • 언어 표준에 따라 이러한 버그는 프로그래머의 잘못으로 간주됨
    • 이는 버그가 아니라는 증거임
  • Bernstein의 의견에 동의하지만, 때로는 잘못된 방향으로 나아감

    • 최적화의 이점은 사용 사례에 따라 다름
    • C 컴파일러가 언어로 표현할 수 없는 의미를 고려하지 않는다는 불만이 있음
    • "필요한 의미를 표현할 수 있는 언어를 사용하라"는 결론으로 요약될 수 있음
  • C와 C++는 상수 시간 보장이 필요한 알고리즘 작성에 부적합함

    • 표준은 실시간 개념이 거의 없음
    • 컴파일러 개발자를 비난하는 것은 잘못된 방향임
  • Intel CPU에서는 clang이나 다른 어떤 것도 사용자 모드에서 올바른 코드를 생성할 수 없음

    • DOITM을 설정하는 것은 불가능함
  • 컴파일러 작성자가 버그에 대해 책임을 지지 않는다는 주장에 동의하지 않음

    • 이는 기본적인 C의 "정의되지 않은 동작"에 대한 오해임
  • clang에는 clang::optnone 속성이 있어 함수별로 최적화를 비활성화할 수 있음

    • GCC에는 gnu::optimize 속성이 있어 최적화 수준을 설정할 수 있음
    • clang::no_builtins는 memcpy와 memset 최적화를 비활성화함
  • C에서 정의되지 않은 동작이 많아 다른 언어로 이동할 가능성이 있음

    • Python에서는 set 객체의 순서가 중요하지 않음
    • C 컴파일러는 코드 패턴을 분석하여 최적화를 시도함
    • 이는 허블 망원경의 문제 해결과 유사한 방식으로 더 나은 성능을 제공할 수 있음
  • 암호화 전문가의 목표에 동의하지만, 일반 목적의 컴파일러는 이를 고려하지 않음

    • 전문화된 컴파일러가 필요할 수 있음
  • 일부 언어와 컴파일러가 상수 시간 암호화 루틴 작성에 부적합하다는 것은 사실임

    • 모든 컴파일러와 비어셈블리 언어가 나쁘다는 결론은 잘못됨
    • 간단한 도메인 특화 컴파일러와 언어를 작성해야 함
  • 특정 함수 예시에서 SIZE_T_MAX 입력 시 정의되지 않은 동작이 발생함

    • 이와 같은 버그가 많지만 실제로는 중요하지 않음