2013년 11월 6일 수요일
C++ 컴파일러 선택의 문제.
C++ 컴파일러 선택의 문제.
32bit 인가. 64bit 인가.
Exception handling 은 무엇인가? ( SJLJ, DWARF, and SEH )
Threading model 은 posix thread 인가 win32 threaad 인가.
MinGW 인가 TDM-GCC 인가.
http://qt-project.org/wiki/MinGW-64-bit
http://tdm-gcc.tdragon.net/quirks
http://mingw-w64.sourceforge.net/
2013년 10월 19일 토요일
LLVM Introduction
Introduction to the LLVM Compiler System.
http://llvm.org/pubs/2008-10-04-ACAT-LLVM-Intro.pdf
2008 년 문서로 추정된다.
LLVM 에대한 개념을 설명한 문서다.
LLVM Project 란 무엇인가?
New compiler architecture built with reusable components.
다음과 같은 여러가지 컴파일러 기술로 이루어져있다.
- Optimizer , Code Generator
- llvm-gcc, Clang Front ends
- 그외 기타등등...
http://llvm.org
그런데, 왜?
그런데, 왜 이 시점에 뜬금없이 C 컴파일러를 또 만든단 말인가?
이미 세상에는 GCC, Xcode, Visual Studio ... 등등 수 많은 C 컴파일러가 있는데..
왜. 하필이면. 또 C 컴파일러란 말인가?
그 이유는.
1. 기존 오픈소스 C Compiler 가 침체되었다고 보기 때문이다.
그렇게 보는 이유는 다음과 같다.
- 수십년된 code generation 기술을 기반으로 한다.
- cross-file optimization 과 같은 현대적 기술을 사용하지 않는다.
- code base 가 오래되서, 배우기 어렵고, 대대적인 변경이 어렵다.
- 다른 응용프로그램에서 컴파일러기술을 재사용하기 어렵다.
- 새로운 버전이 릴리스될때마다 속도가 더욱 느려진다.
(음... 일리 있네..)
그래서 현대적기술을 사용하여 컴파일러 요소기술을 만들었고,
이것을 모듈화 시킨것이 LLVM 이다.
이것이 좋다는것을 증명하려면, 이 요소기술위에서 돌아가는 컴파일러가 있어야 한다.
그래서, LLVM 개발자는 LLVM-GCC 4.2 를 만들었다.
LLVM-GCC 4.2 는 다음과 같은 특징을 가진다.
- C, C++, Objective C, Ada and Fortran
- Standard GCC command line option
- ....
즉, LLVM-GCC 4.2 는 C Front-end 는 GCC 4.2 를 쓰고, Optimizer 와 Code Generator 는 LLVM 을 쓰는 물건이다.
( 이걸 왜 이렇게 복잡하게 섞어 놓는거지..? )
이걸 이렇게 섞어서 LLVM 을 쓰면 다음과 같은 좋은 점이 생긴다.
1. 기존에는 없었던, Link Time Optimization 이라는 새로운 기능이 가능해진다.
2. 컴파일 시간이 줄어든다.
3. 실행시간이 빨라진다.
결론은 장점이 분명 존재한다.
기타 다음과 같은 LLVM 의 특징과 장점이 있다.
- 새로운 언어를 만들때 LLVM 을 target 으로 쓸수있다.
- Just-In-Time optimization 과 compillation 을 제공한다.
- Better tools for source level analysis of C/C++ program
LLVM 기술로 만들어진것중에 Clang 이란것이 있다.
Clang 은 이런것이다.
- C, Objective-C, and C++ front-end.
- GCC 와 호환성 유지.
- 컴파일 속도 향상.
- 알아보기 편한, 컴파일러 에러메시지.
( 별거아니네. 뭐야, GCC 랑 똑같은건가..? )
컴파일 속도는 GCC 보다 Clang 이 좀 빠른가 보네.
- C++11 support 에서도 Clang 은 뛰어나다.
C++11 compiler support shootout: Visual Studio, GCC, Clang, Intel
( http://cpprocks.com/c11-compiler-support-shootout-visual-studio-gcc-clang-intel/ )
- 이렇게 좋은 Clang 인데... Visual Studio 에서는, MinGW 에서는...
... Windows 에서는 아직 찬밥이라는 현실.
( http://llvm.org/docs/GettingStarted.html )
Windows8 에서 MinGW64 로는 빌드가 되지 않는다.
( MinGW32 로는 빌드가 된다. )
- LLVM, Clang 은 완료된 프로젝트가 아니다.
현재, 개발 진행중인 프로젝트다.
뭔가, 안되거나 없으면 정상이다.
예를 들어 Clang 링커가 없다면, 정상이다.
지금 개발 중이다.
The lld project aims to to be the built-in linker for clang/llvm.
Currently, clang must invoke the system linker to produce executables.
현재로서는, MinGW 에 있는 링커 또는 Visual Studio 에 있는 링커를 써야한다.
현재로서는, MinGW 에 있는 링커 또는 Visual Studio 에 있는 링커를 써야한다.
피드 구독하기:
글 (Atom)