OS X의 llvm, clang 및 gcc에 관한 질문이 있습니다.
llvm-gcc 4.2, llvm 2.0 및 clang의 차이점은 무엇입니까? 나는 그들이 모두 llvm을 기반으로한다는 것을 알고 있지만 어떻게 다른가?
빠른 컴파일 외에도 gcc보다 llvm의 장점은 무엇입니까?
OS X의 llvm, clang 및 gcc에 관한 질문이 있습니다.
llvm-gcc 4.2, llvm 2.0 및 clang의 차이점은 무엇입니까? 나는 그들이 모두 llvm을 기반으로한다는 것을 알고 있지만 어떻게 다른가?
빠른 컴파일 외에도 gcc보다 llvm의 장점은 무엇입니까?
답변:
LLVM은 원래 "낮은 수준의 가상 머신"을 의미했지만 이제는 기존 가상 머신이 아닌 다른 머신으로 성장 했으므로 이제는 그대로 유지됩니다. 컴파일러 및 적시 컴파일러를 빌드하는 데 사용할 수있는 표준화 된 중간 표현뿐만 아니라 라이브러리 및 도구 세트입니다. 자체 중간 표현 이외의 다른 것을 컴파일 할 수 없습니다. 그렇게하려면 언어 별 프론트 엔드가 필요합니다. 사람들이 LLVM을 참조한다면 아마도 저수준 라이브러리와 도구를 의미 할 것입니다. 어떤 사람들은 Clang 또는 llvm-gcc를 "LLVM"이라고 잘못 언급하여 혼동을 일으킬 수 있습니다.
llvm-gcc는 GCC의 수정 버전으로 GCC 자체 대신 LLVM을 백엔드로 사용합니다. GCC의 새로운 플러그인 시스템을 사용하여 GCC를 방해하지 않고 동일한 작업을 수행하는 DragonEgg를 위해 더 이상 사용되지 않습니다.
Clang은 완전히 새로운 C / C ++ / Objective-C 컴파일러로, 자체 프론트 엔드와 LLVM을 백엔드로 사용합니다. 그것이 제공하는 장점은 더 나은 오류 메시지, 더 빠른 컴파일 시간 및 다른 도구가 컴파일 프로세스에 쉽게 연결되는 방법입니다 ( LLDB 디버거 및 Clang 정적 분석기 등 ). 또한 모듈 식이므로 C, C ++ 또는 Objective-C 코드를 분석해야하는 다른 소프트웨어의 라이브러리로 사용할 수 있습니다.
이러한 각 접근 방식 (일반 GCC, GCC + LLVM 및 Clang)에는 각각의 장단점이 있습니다. 내가 본 마지막 몇 가지 벤치 마크 세트는 GCC가 대부분의 테스트 사례에서 약간 더 빠른 코드를 생성하는 것으로 나타 났지만 (LLVM은 약간의 우위를 점했지만) LLVM과 Clang은 훨씬 더 나은 컴파일 시간을 제공했습니다. GCC와 GCC / LLVM 콤보는 훨씬 더 많은 코드를 테스트하여 C의 GCC 버전에서 작동한다는 이점이 있습니다. GCC에만있는 일부 컴파일러 특정 확장이 있으며 표준에 따라 구현이 달라 지지만 코드는 특정 구현에 따라 다릅니다. 시간이 지남에 따라 개선되고 있지만 Clang에서 작동하는 것보다 GCC에서 작동하는 많은 양의 레거시 C 코드를 얻는 경우가 훨씬 많습니다.
여기에는 두 가지가 있습니다.
LLVM은 그 위에 컴파일러를 구축하기위한 백엔드 컴파일러입니다. 대상 아키텍처에 적합한 코드의 최적화 및 생성을 처리합니다.
CLang은 C, C ++ 및 Objective C 코드를 구문 분석하고이를 LLVM에 적합한 표현으로 변환하는 프론트 엔드입니다.
llvm gcc는 gcc 4.2에 기반한 llvm 기반 C ++ 컴파일러의 초기 버전으로 CLang은 구문 분석 할 수있는 모든 것을 구문 분석 할 수 있으므로 더 이상 사용되지 않습니다.
마지막으로 CLang과 gcc의 주요 차이점은 생성 된 코드가 아니라 접근 방식에 있습니다. gcc는 단일체이지만 CLang은 라이브러리 모음으로 구축되었습니다. 이 모듈 식 설계는 예를 들어 IDE 또는 완성 도구에 대한 큰 재사용 기회를 허용합니다.
현재 gcc 4.6에서 생성 한 코드는 일반적으로 약간 빠르지 만 CLang은 그 격차를 좁히고 있습니다.