GCC vs clang / LLVM — 각각의 장단점


20

GCC vs clang / LLVM의 장단점은 무엇입니까?


3
누구의 장단점? LLVM은 엄청나게 많은 지원 아키텍처가 필요한 경우를 제외하고는 컴파일러의 백엔드보다 훨씬 뛰어납니다. 그러나 나는 당신이 최종 사용자에 대해 이야기한다고 가정합니다.

답변:


19

gcc는 매우 성숙하고 설치하기 쉬우 며 (적어도 대부분의 시스템에서) 많은 시스템의 기본 컴파일러이므로 많은 경우 사람들은 거의 인식하지 못하고 설치합니다. 이 제품은 열악한 아키텍처로 포팅되었으므로, 모호한 하드웨어를 대상으로해야하는 경우 즉시 사용할 수 있습니다.

clang은 훨씬 더 최신입니다. 특히 C ++ 템플릿의 경우 훨씬 더 나은 오류 메시지를 생성합니다. 많은 경우에 훨씬 빨리 실행됩니다. 기본적으로 라이브러리 세트로 빌드되므로 동일한 프론트 엔드를 사용하고 동일한 입력을 이해하는 등의 다른 프로젝트 (예 : 코드 분석기)가 많이 있습니다. 백엔드로 llvm을 사용하면 유연성이 향상됩니다. 코드를 생성하는 방법.


17
  1. Clang은 훨씬 더 나은 오류보고 기능을 제공합니다. 예를 들어, 호출 한 함수 이름으로 오타를하면 Clang은 오타 일 가능성이 있다고보고하고 (올바른 이름을 제안) GCC는 알 수없는 함수 이름에 대해 불평합니다.

  2. x86 / x86-64를 대상으로하는 경우 GCC는 일반적으로 더 빠른 코드를 생성합니다. ARM의 경우 상황이 모호하므로 종종 Clang이 더 잘 최적화됩니다. 또한 AFAIK Clang은 코드 크기 최적화를 지원하지 않습니다.

  3. GCC는 많은 휴리스틱을 사용합니다. 이는 일반적인 경우에는 성능에는 좋지만 일부 소스 수준 최적화 (예 : 루프 언 롤링)를 수행하려는 경우에는 끔찍합니다. 작은 소스 코드 변경만으로도 GCC가 완전히 다른 출력을 생성 할 수 있습니다. Clang은 더 예측 가능하며 일반적으로 원하는 코드를 생성합니다.

  4. Jerry Coffin과 달리 Clang보다 훨씬 어려운 소스에서 GCC를 빌드하는 것을 발견했습니다. Clang의 시작하기 페이지 의 절차는 항상 저에게 효과적 이었습니다. GCC에 대한 비슷한 매뉴얼 은 첫 시도에서 결코 작동하지 않았습니다. GCC는 특정 버전의 GMP, MPFR, MPC, Parma Polyhedra Library 및 CLooG에 종속되어 있으며 특정 GCC 릴리스에 적합한 버전을 찾기 위해 여러 번 반복해야했습니다 (예, 해당 라이브러리의 최신 버전을 사용하면 작동하지 않습니다) ).

  5. Clang이 GCC보다 더 나은 테스트를 받고 있다는 느낌이 듭니다. GCC의 공식 릴리스 만 사용하지만 때로는 잘못된 코드가 생성되었습니다. Clang의 경우 일반적으로 트렁크 버전을 사용하지만 (빌드하기 쉽기 때문에) 잘못된 출력을 생성하는 것을 보지 못했습니다.

  6. GCC는 Linux 세계에서 거의 표준이며 Linux 소프트웨어에서 널리 사용되는 많은 비표준 기능을 추가합니다. Clang은 GCC와 호환을 시도하지만 때로는 조용히 무시합니다. 가장 중요한 것은 Clang은 OpenMP를 지원하지 않는 것입니다. 그러나 GCC에서 지원하지 않는 확장 기능도 있지만 유용 할 수 있습니다 (예 : 추가 기능 내장 함수 __buildin_addc).

  7. 컴파일러 연구를 원하거나 어떻게 작동하는지 궁금하다면 Clang / LLVM 소스 코드를 더 쉽게 찾을 수 있습니다. Clang / LLVM 코드는 컴파일러가 읽을 수있는 것이 아니라 사람이 읽을 수있는 코드입니다.

  8. (AINAL 면책 조항 적용) Clang / LLVM 라이센스는 상용 또는 비공개 소스 제품과 같이 코드로 수행 할 수있는 작업에 대해 더 많은 자유를 제공합니다. Clang 컴파일러 런타임 (compiler-rt 라이브러리)이 허용되는 MIT 라이센스하에있는 동안 GCC 런타임 라이브러리 라이센스에 또 다른 제한 계층이 추가됩니다.

요약 : 프로그램을 개발할 때는 Clang, 최종 빌드에는 GCC를 사용하여 컴파일하십시오 (그러나 더 빠르지 않고 깨지지 않도록하십시오). 컴파일러 연구를 수행하는 경우 Clang / LLVM을 사용하십시오.


흥미롭게도 Clang에 내장 기능이 내장되어 있다는 것을 결코 알지 못했습니다. 그러나 __builtin_add그렇지 않아야 __buildin_addc합니다. 어쨌든, Clang은 addccarry와 비교를 사용하여 광범위한 추가를
경험할

나는 의미 __builtin_addc하지 않는다__buildin_addc
phuclv

여기에서 성능 비교가 오래되었습니다. 보다 최근의 벤치 마크에 따르면, clang은 x86 / 64의 gcc보다 약간 반 이상 테스트 (예 : openbenchmarking.org/result/1605071-HA-GCCCLANG568 )
Jules

3

새로운 CPU 아키텍처 또는 새로운 최적화가 있고 GPL에서 이들을 오픈 소스로 사용하려는 경우 gcc에 기여할 수 있습니다. 그러나 gcc는 덜 모듈 식이므로 수정 / 추가를 추가하는 데 더 많은 작업이 필요할 수 있습니다. 오픈 소스 프로젝트에 새로운 아키텍처 나 최적화를 제공하고 싶지만 GPL 라이센스가 아닌 경우 LLVM / clang에 기여할 수 있습니다. 법률 부서가 후자를 허용하는 회사가 있습니다.


-3

현재 (2011 년 8 월 11 일) GCC는 Clang보다 많은 C ++ 0x 기능을 지원합니다. 이러한 기능을 원한다면 당연한 일입니다. GCC는 당신의 선택입니다.


이 답변은 내 연구에 따라 지정된 시간 내에 정확하고 유익합니다.

8
그러나 오늘 (28/07/2012) 기준으로 더 이상 유효하지 않기 때문에 실제로는 좋은 대답이 아닙니다. Clang은 GCC 이상을 지원합니다.
DeadMG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.