OS X에서의 LLVM과 Clang
OS X의 llvm, clang, gcc에 대한 질문이 있습니다.
llvm-gcc 4.2, llvm 2.0 및 clang의 차이점은 무엇입니까?모두 llvm을 기반으로 구축된다는 것은 알고 있습니다만, 어떻게 다른가요?
gcc에 비해 llvm의 장점은 무엇입니까?
LLVM은 원래 "Low-level Virtual Machine(로우 레벨 가상 머신)"을 의미했지만, 이제는 기존 가상 머신과는 다른 개념으로 성장함에 따라 그 자체로 간주되고 있습니다.컴파일러 및 저스트 인 타임 컴파일러 구축에 도움이 되는 표준화된 중간 표현뿐 아니라 라이브러리 및 도구 세트입니다.중간 표현 이외에는 컴파일 할 수 없습니다.그러기 위해서는 언어 고유의 프런트엔드가 필요합니다.LLVM만 언급한다면 아마도 낮은 수준의 라이브러리와 툴만을 의미할 것입니다.Clang 또는 llvm-gcc를 "LLVM"이라고 잘못 부르면 혼동을 일으킬 수 있습니다.
llvm-gcc는 GCC 자신의 백엔드로 LLVM을 사용하는 GCC의 수정 버전입니다.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만이 가지는 컴파일러 고유의 확장도 있습니다.또, 표준에서는 실장이 다른 것을 허가하고 있습니다만, 코드는 특정의 실장에 의존합니다.시간이 지남에 따라 개선되고 있지만, 레거시 C 코드를 대량으로 취득하면 GCC에서 동작하는 것보다 GCC에서 동작하는 것이 훨씬 더 가능성이 높습니다.
여기에는 두 가지가 있습니다.
LLVM은 그 위에 컴파일러를 구축하기 위한 백엔드 컴파일러입니다.타겟 아키텍처에 적합한 최적화 및 코드 생성을 다룹니다.
CLang은 C, C++ 및 Objective C 코드를 해석하여 LLVM에 적합한 표현으로 변환하는 프런트 엔드입니다.
llvm gcc는 gcc 4.2 기반의 llvm 기반 C++ 컴파일러의 초기 버전입니다.CLang은 해석 가능한 모든 것을 해석할 수 있기 때문에 현재는 사용되지 않습니다.
마지막으로 CLang과 gcc의 주요 차이점은 생성된 코드가 아니라 접근 방식에 있습니다.gcc는 일체형이지만 CLang은 라이브러리 스위트로 구축되어 있습니다.이 모듈식 설계를 통해 IDE나 완료 도구 등을 재사용할 수 있습니다.
현시점에서는 gcc 4.6에서 생성되는 코드가 일반적으로 조금 더 빠르지만 CLang이 격차를 좁히고 있습니다.
llvm-gcc-4.2는 GCC 프런트엔드를 사용하여 코드를 해석한 후 LLVM을 사용하여 컴파일된 출력을 생성합니다.
"llvm 컴파일러 2.0"은 clang 프런트 엔드를 사용하여 코드를 해석하고 LLVM을 사용하여 컴파일된 출력을 생성합니다."clang"은 사실 이 프런트엔드의 이름일 뿐이지만 컴파일러 전체의 이름으로 자주 사용됩니다.
언급URL : https://stackoverflow.com/questions/5708610/llvm-vs-clang-on-os-x
'programing' 카테고리의 다른 글
Vue.js 2.5+에서 Vuetify와 함께 Vue-IMASK를 사용하는 방법 (0) | 2022.08.28 |
---|---|
ISO/IEC 웹사이트 및 C 및 C++ 규격에 대한 과금 (0) | 2022.08.28 |
Axios-한 번에 여러 요청을 작성합니다(vue.js). (0) | 2022.08.28 |
vue 부트스트랩 b-table 셀 내부에 링크 생성 (0) | 2022.08.28 |
Android Studio 및 Gradle에서 소스 1.7을 설정하는 방법 (0) | 2022.08.28 |