2012-01-17 2 views
7

최신 GCC 버전을 사용하는 것이 안전한지 또는 사람들이 보통 몇 버전으로 돌아갈 지 궁금합니다. (상대적으로) 버그가 없다고 생각되는 신뢰할 수있는 버전이 있습니까, 아니면 안전하게 사용할 수있는 최신 GCC 버전을 안전하게 구할 수 있습니까?최신 GCC 버전을 사용해야합니까? (일반적으로 오늘 구체적으로)

편집 : 안전으로

- 난 실행의 측면에서 즉 주로 버그 무료, 의미한다.

+0

원한다면 C++ 11 지원 블리딩 에지는 여전히 어디입니까? – Flexo

+4

* 최신 * 의미 * HEAD * 또는 * 최신 릴리스 * (4.6.2 생각합니까?) 우리는 * safe *를 통해 생산에서 안전한 실행을 의미한다고 가정해야합니까? 또는 우리가 말하는 표준 준수입니다 (예.코드가 이식 가능하고 변경하지 않아도되므로 안전합니까?) –

+0

@MatthieuM. +1 나는 여기에서 실행 안전에 대해 이야기한다. ("life savint programs") – arne

답변

3

반대로 특별한 요구 사항이 없으면 필자는 (합리적으로 최신의) Linux 배포판에서 gcc 버전이 제공되는 버전을 사용하는 경향이 있습니다. 이 정책은 지금까지 나를 위해 꽤 잘 돌아갔다.

+0

그래, 그럼 내가 C++ 11을 지원하지 않는 오래된 2006 배포판을 가진 네트워크 리눅스를 사용하고 있기 때문에 나는 내 상황에 처해있다. 어떤 경우에는 내가 다운로드 할 버전을 명시 적으로 결정해야만했다. (시스템 관리자는 여기서 리눅스 버전을 업데이트하거나 일반적으로 작업하는 것을 가치있게 생각하지 않습니다.) – dan12345

3

나는 최신 기능을 구현하고 버그를 수정하지만 불행히도 새로운 버그를 도입하기 때문에 최신 버전을 사용하는 경향이 있습니다. 버그는 일반적으로 이상한 경우에 발생하므로 항상 최신 버전을 사용하는 것이 안전하다고 가정합니다.

2

더 나은 C++ 11 지원은 최신 gcc 버전입니다. gcc 4.7은 거의 릴리즈 준비가되었으므로, 한번 시도해 볼 수도 있습니다. 필자는 거의 모든 gcc 버전을 4에서 시작하여 개선 된 C++ 표준 준수 및 컴파일 시간 단축 및 최적화 프로그램 개선으로 자주 수행했습니다.

일반적으로 최신 g ++ 컴파일러를 사용하는 것이 좋습니다.

그러나 몇 차례 내가 사용하는 라이브러리에 문제가있었습니다. 예를 들어, g ++의 4.5 버전은 내가 사용하고 있던 boost :: xpressive 버전을 깨뜨 렸습니다. 또는 더 잘 말하면 도서관에서 무언가가 깨 졌음을 알았습니다. 게다가, g ++로 갈수록, 다른 컴파일러로 코드를 컴파일하려고 할 때 더 많은 문제가 생기고, 새로운 기능 구현에 뒤떨어져 있습니다.

필자가 생각하기에 최신 컴파일러 버전을 사용하고 새로운 표준이 제공하는 좋은 것들을 사용하면 더 생산적이고 더 행복한 프로그래머가되기 때문입니다. 그런 다음 코드를 다른 컴파일러로 이식해야하는 경우 필요한 코드 부분 만 수정하면됩니다. 결국에는 많은 시간이 걸리지 않습니다.

+0

초보자 코멘트를 다시 한 번 말하지만 어떤 상황에서 코드를 이식하고 싶습니까? 나는 그것을 쓰고있어, 내가 좋아하는 C++ 컴파일러를 가져 가면된다. 아니면 코드가 나 이외의 다른 사용자에게 배포되는 상황을 언급하고 있습니까? 그냥 궁금해 – dan12345

+1

내가 프로젝트의 적어도 일부를 위해 컴파일러를 바꿔야했던 경우는 다음과 같습니다. Windows에서 프로젝트를 컴파일해야한다면 Windows에서 최신 gcc 버전을 얻는 것이 일반적으로 어렵습니다 (실제로는 그것을하는 방법을 아십시오). 또 다른 경우는 안드로이드 SDK 나 구글의 NaCl 같은 일부 SDK에 번들 된 gcc를 사용해야 할 때다. 또 다른 경우는, 예를 들어 인텔의 C++ 컴파일러를 시도하고 싶다면 루프를 최적화하는 것이 더 낫다는 것입니다 (인텔 컴파일러로 9 ~ 10 % 빠르게 실행되는 코드를 얻을 수는 있지만 오랜 시간이 걸렸습니다 전에). – dsign

1

정상적인 호스트 시스템에서는 OS/배포판에서 제공하는 것과 함께 가고, 병렬로 몇 가지 버전을 설치할 수 있습니다. 내 macosx 시스템에서 gcc-4.2 (OSX 표준), gcc-4.6.2, gcc-llvm (OSX 표준) 및 gcc-HEAD가 설치되었습니다. 그렇게하면 꽤 쉽게 할 수 있고, gcc-HEAD를 최신으로 업데이트 할 수 있습니다. 그러나 나날 개발을 위해 계속해서 작업하고 지원하는 버전을 가지고 있습니다.

상업용/업무용으로 사용하는 버전 번호를 적어두고 전체 컴파일러 툴체인을 백업하는 것이 좋습니다. 그래야 유지 보수가 필요할 경우 나중에 작동하는 동일한 시스템으로 돌아갈 수 있습니다 . 컴파일러를 약간 짜증나는 방식으로 바꾸는 것보다 더 짜증나는 일은 없습니다 (정의 누락 등등 ...).

임베디드 개발의 경우 훨씬 더 중요합니다. 실제로는 컴파일러 툴체인을 git에 저장합니다. gcc 버전의 약간의 충돌은 끔찍한 짜증나는 컴파일러 버그 (필자가 임베디드 플랫폼에서 자주 발생 함) 또는 예를 들어 40 바이트 크기의 범프가 프로젝트를 완전히 없앨 수 있음을 의미 할 수 있습니다.

관련 문제