'gc'와 'gccgo'의 주요 차이점은 무엇입니까?


89

두 가지 인기있는 Go 컴파일러 인 'gc'와 'gccgo'의 주요 차이점은 무엇입니까? 빌드 성능? 런타임 성능? 명령 줄 옵션? 라이선스?

나는 어떤 것이 가장 좋은지에 대한 의견을 찾는 것이 아니라 그들의 차이점에 대한 기본적인 개요 일 뿐이므로 어떤 것이 내 필요에 가장 적합한 지 결정할 수 있습니다.


3
시간이 지남에 따라 어떻게 변했습니까? 현재 2019 년
Leo Gallucci

답변:


110

" gccgo 설정 및 사용 "에서 자세한 내용을 볼 수 있습니다 .

Go 언어 용 컴파일러 인 gccgo. gccgo 컴파일러는 GCC의 새로운 프런트 엔드입니다.
gccgo는 gc 컴파일러가 아닙니다.

" GCC 4.7.1의 Gccgo "(2012 년 7 월) 설명 된대로

Go 언어는 항상 구현이 아닌 사양에 의해 정의되었습니다. Go 팀은 해당 사양을 구현하는 두 가지 컴파일러 인 gc 및 gccgo를 작성했습니다.

  • Gc는 원래 컴파일러이며 go 도구는 기본적으로이를 사용합니다.
  • Gccgo는 다른 초점을 가진 다른 구현입니다.

gc에 비해 gccgo는 코드 컴파일 속도가 더 느리지 만 더 강력한 최적화를 지원하므로 gccgo로 빌드 된 CPU 바인딩 프로그램은 일반적으로 더 빠르게 실행됩니다.

또한:

  • gc 컴파일러는 x86 (32 비트 및 64 비트) 및 ARM과 같이 가장 많이 사용되는 프로세서 만 지원합니다.
  • 그러나 Gccgo는 GCC가 지원하는 모든 프로세서를 지원합니다.
    모든 프로세서가 gccgo에 대해 철저하게 테스트 된 것은 아니지만 x86 (32 비트 및 64 비트), SPARC, MIPS, PowerPC 및 Alpha를 포함한 많은 프로세서가 있습니다.
    Gccgo는 gc 컴파일러가 지원하지 않는 운영 체제, 특히 Solaris에서도 테스트되었습니다.

당신은 표준 이동 릴리스에서 이동 명령을 설치하는 경우, 이미 지원은 통해 gccgo -compiler옵션 : go build -compiler gccgo myprog.


간단히 말해서 : gccgo : 더 많은 최적화, 더 많은 프로세서 .


그러나, 주석 에 의해 OneOfOne ( 소스 ), gccgo 지원 이동, 최신 이동 릴리스 사이의 동기 이탈 종종있다 :

gccgo는 버전 go v1.2까지만 지원 하므로 1.3 / 1.4 (팁)에서 새로운 것이 필요한 경우 gccgo를 사용할 수 없습니다. –

GCC 릴리스 4.9 에는 gccgo의 Go 1.2 (1.3 아님) 버전이 포함됩니다 .
GCC 및 Go 프로젝트의 릴리스 일정이 일치하지 않습니다. 즉, 1.3은 개발 브랜치에서 사용할 수 있지만 다음 GCC 릴리스 인 4.10에는 gccgo의 Go 1.4 버전이있을 가능성이 높습니다.


twotwotwoBrad Fitzpatrick의 프레젠테이션 슬라이드 에 대한 의견

gccgo는 아주 좋은 코드를 생성
하지만 이스케이프 분석이 부족합니다. 많은 작은 할당 + 쓰레기로 성능을 저하
시킵니다. GC는 정확하지 않습니다. 32 비트에 적합하지 않습니다.

twotwotwo는 다음을 추가합니다.

또 다른 슬라이드에서는 gccgo가 아닌 ARM 코드 생성이 불안정하다고 언급합니다.
프로젝트에 흥미로운 옵션이라고 가정하면 대상 아키텍처의 사용 사례에 대한 바이너리를 비교할 수 있습니다.


peterSO의 의견 , 이동 1.5 지금 (Q3 / Q4 2015) 수단 :

컴파일러와 런타임은 이제 완전히 Go로 작성되었습니다 (작은 어셈블러 사용).
C는 더 이상 구현에 관여하지 않으므로 한때 배포판을 빌드하는 데 필요했던 C 컴파일러는 사라졌습니다 .

"Go in Go"슬라이드 에는 다음이 언급되어 있습니다.

C는 사라졌습니다.
참고 : gccgo는 여전히 강세를 보이고 있습니다.


버 칸트는 요청 코멘트에 경우 gccgo무엇 gc부터 부트 스트랩했다.

Jörg W Mittag 답변 :

아니요, gccgo이후 에 나타났습니다 gc.

gc원래는 C로 작성되었습니다. 동일한 사람들이 디자인 한 Unix의 후속 버전 인 Plan9 운영 체제 의 Ken Thompson의 C 컴파일러를 기반으로 합니다. gc반복적으로 리팩토링되어 점점 더 많은 내용을 Go로 작성했습니다.

gccgoGo 프로젝트와 관련이없는 GCC 해커 인 Ian Lance Taylor 가 시작했습니다 .

최초의 완전 자체 호스팅 Go 컴파일러는 실제로 인터넷에서와 같은 방식으로 내 두뇌에서 사라진 것처럼 보이는 Windows 용 독점 상용 폐쇄 소스 구현이었습니다. 그들은 Go로 작성된 자체 호스팅 컴파일러를 가지고 있다고 주장했으며, gccgo아직 존재하지 않았던 시기에 Windows를 대상으로하고 Windows에서 gc설정하는 것이 매우 힘들었습니다. (기본적으로 전체 Cygwin 환경을 설정하고 소스 코드를 패치하고 소스에서 컴파일해야했습니다.) 그러나 회사는 제품을 마케팅하기 전에 접힌 것처럼 보입니다.

헥터 추 11월 2009 년 이동의 윈도우 포트를 해제 않았다
그리고 go-lang.cat-v.org/os-ports페이지가 언급 조 / 조셉 Poirier의 뿐만 아니라 초기 작업을. 에서 이 페이지 :

아는 사람 이 Windows 포트 제작에 참여한 사람 ( Alex Brainman -Hector Chu-Joseph Poirier) 중 한 명이 빌드 환경을 자세히 설명하는 위키 항목을 만들 수 있도록 요청할 수 있습니까?

거기에 추가하십시오 ( Wiating Web Apps in Go ) ! 光 京 (Wei Guangjing) .


4
golang.org/doc/go1.3#gccgo 그리고 더 중요한 것은 gccgo는 버전 go v1.2까지만 지원하므로 1.3 / 1.4 (tip)에서 새로운 것이 필요하면 gccgo를 사용할 수 없습니다.
OneOfOne 2014 년

1
@OneOfOne 좋은 점, 더 많은 가시성을 위해 답변에 귀하의 의견을 포함했습니다.
VonC 2014 년

1
@twotwotwo 좋은 찾기. 더 많은 가시성을 위해 답변에 포함했습니다.
VonC 2014 년

3
gccgo는 각 고 루틴에 전용 스레드를 제공하여 고 루틴을 구현한다는 것을 읽었습니다 (여러 고 루틴을 하나의 스레드에 다중화하는 것과는 반대로). 이것이 여전히 사실이라면 그것은 일부 사람들에게 큰 차이가 될 수 있습니다.
DragonFax

2
@LeoGallucci이 답변의 일반적인 아이디어는 Go 1.11 ( "gccgo : 더 많은 최적화, 더 많은 프로세서")을 의미합니다. stackoverflow.com/a/46970176/6309 에서 최신 그림을 볼 수 있습니다 .
VonC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.