Go 언어는 다음 이유로 인해 빠르게 컴파일됩니다. 1. 템플릿 컴파일 부담이 없습니다. 3. 버전 1.5 이후 부트스트랩 컴파일러 최적화 4. 더 적은 키워드, Go 언어 컴파일 과정에서 코드 분석을 단순화합니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, GO 1.11.2, Dell G3 컴퓨터.
이제 컴파일 속도, 실행 속도, 메모리 관리 및 동시 프로그래밍을 포함하여 Go의 여러 주요 기능이 있습니다.
물론 Go 언어 설계가 완전히 처음부터 시작되는 것은 아닙니다. 처음에 Go 팀은 Go 언어용 컴파일 프런트엔드를 설계하고 구현하려고 시도했는데, 이는 기계로 컴파일되었습니다. 이 gcc용 프런트엔드 컴파일러는 현재 Go 컴파일러 중 하나인 gccgo이기도 합니다.
Go의 컴파일이 빠른 이유에 대해 이야기하는 대신 C++의 컴파일이 느린 이유에 대해 먼저 이야기하겠습니다. C++도 gcc로 컴파일할 수 있습니다. 컴파일 속도의 차이는 대부분 언어 설계 자체에서 비롯될 가능성이 높습니다.
문제를 논의하기 전에 설명해야 할 한 가지는 여기에서 비교한 컴파일 속도는 모두 정적 컴파일에서의 속도라는 것입니다.
정적 컴파일: 컴파일러는 실행 파일을 컴파일할 때 사용된 링크 라이브러리를 추출하고 링크를 실행 파일로 패키징해야 합니다. 컴파일 결과에는 하나의 실행 파일만 포함됩니다. 문서.
동적 컴파일: 실행 파일은 독립된 라이브러리 파일과 함께 제공되어야 합니다. 실행 파일의 크기를 줄이기 위해 라이브러리를 실행 파일로 패키징하지 마세요. 실행 중에 라이브러리를 호출하세요.
두 가지 방법에는 각각의 장점과 단점이 있습니다. 전자는 서로 다른 버전의 라이브러리의 호환성 문제를 관리할 필요가 없으며, 후자는 메모리 및 저장소 사용량을 줄일 수 있습니다(다른 프로그램이 동일한 라이브러리를 공유할 수 있기 때문). 어느 쪽이 더 좋고 어느 쪽이 더 약한지는 Go의 기본 컴파일 방법은 정적 컴파일입니다.
우리가 논의하고 싶은 질문으로 돌아가서: C++ 컴파일이 느린 이유는 무엇입니까?
C++ 컴파일이 느린 이유는 두 가지입니다.
1. 헤더 파일의 포함 방법
2. 템플릿 컴파일
C++에서는 포함 방법을 사용하여 헤더 파일을 참조하므로 코드가 늘어납니다. 예를 들어 동일한 프로젝트의 N개 파일에 동일한 헤더 파일이 포함된 경우 컴파일러는 각 코드 조각에 헤더 파일을 도입하므로 동일한 헤더 파일이 컴파일됩니다. N 번(대부분 불필요함)
C++에서 사용하는 템플릿은 일반 프로그래밍을 지원하기 위한 것입니다. 다양한 유형의 일반 함수를 작성할 때 큰 편의를 제공할 수 있지만 이는 컴파일러에 많은 것을 추가합니다. 컴파일 부담.
물론 C++에는 이 두 가지 문제에 대한 후속 최적화 방법이 많이 있지만 많은 개발자는 이에 너무 많은 시간과 에너지를 소비하고 싶어하지 않습니다.
대부분의 프로그래밍 언어는 파일을 도입하는 방식으로 헤더 파일을 포함하는 대신 import 모듈을 사용합니다. Import는 반복적인 컴파일 문제를 해결합니다. 물론 Go에서는 템플릿 컴파일에도 import 방법을 사용합니다. 디자인 측면에서 Go는 단순한 접근 방식을 따르며 디자인 프레임워크에 함수형 프로그래밍을 포함하지 않습니다. 따라서 템플릿 컴파일로 인한 시간 오버헤드가 없습니다. (일반 지원이 부족하다는 것도 Go 언어에 불만족하는 이유이기도 합니다.) .
그래서 내 생각에는Go가 빠르게 컴파일되는 이유는 다음과 같습니다.
1. 가져오기 참조 관리 방법을 사용합니다. 2. 버전 1.5 포스트 부트스트랩 컴파일러 최적화. 4. 키워드가 적습니다. Go 언어에는 25개의 키워드가 있습니다:break
default func interface select case defer go map struct chan else goto package switch const fallthrough importif range type 에 대해 return var Go 언어의 키워드를 의도적으로 적게 유지하는 이유는 컴파일 과정에서 코드 분석을 단순화하기 위한 것입니다. 다른 언어와 마찬가지로 키워드는 식별자로 사용할 수 없습니다.
그래서 컴파일 속도를 높이고 C++를 포기하고 Go로 전환하려면 제네릭 프로그래밍의 장점을 포기할지 여부도 고려해야 합니다.
참고: Go 2 버전에서는 제네릭이 지원될 수 있습니다.
참고:
Go는 C++의 궁극적인 성능을 달성할 수 없지만 대부분의 경우 매우 유사합니다.
Go와 Java는 알고리즘 시간 오버헤드 측면에서 거의 동일하지만 메모리 오버헤드 측면에서는 Java입니다.
위의 대부분의 상황에서 최소한 Go의 시간과 메모리 오버헤드는 Python보다 훨씬 좋습니다.권장 학습: Golang 튜토리얼
위 내용은 Go 언어 컴파일이 빠른가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!