IT TIP

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

itqueen 2020. 10. 24. 12:08
반응형

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


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

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


" 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는 여전히 강세를 보이고 있습니다.

참고 URL : https://stackoverflow.com/questions/25811445/what-are-the-primary-differences-between-gc-and-gccgo

반응형