메뉴

문서정보

목차

원문 : Will Go replace C in the next two decades ?

Go는 C언어를 대체 할 수 있을까 ?

그렇지 않다. 애초에 Go는 C/C++를 대체하기 위한 목적으로 디자인하지 않았다. Go는 구글의 네트워킹 인프라스트럭처를 유지하던 C++ 의 엄청난 복잡성과 긴 컴파일 시간을 해결하기 위한 C++의 대체폼으로 설계됐다.

여기에서 중요한 점은 프로그래머들은 구글러이며, 연구자들이 아니란 것이다. 그들은 일반적으로 매우 젊고, 이제 막 학교를 졸업했으며, 아마도 Java 나 C/C++, Python들을 배웠을 것이다. 그들은 훌륭한 언어를 이해할 능력은 없지만 좋은 소프트웨어를 개발하기 위해서 "언어를 사용"하고 싶어한다. 따라서 우리가 제공하는 언어는 이해하기 쉽고 채택하기 쉬워야 한다. - Rob Pike

Go는 C++의 대항마로 설계된 적이 없다. C/C++이 진정한 시스템 프로그래밍 언어라면, Go는 응용 프로그래밍 언어에 가깝다고 할 수 있다. 이들은 상호교환 할 수 없다.

Go는 정적 언어가 가지는 성능과 안정성과 동적언어가 가지는 편리함과 재미를 결합하려는 시도다. - Rob Pike

C/C++은 Go로 할 수 있는 모든 것을 할 수 있다. 반면 Go는 C/C++에서 허용하는 많은 것들을 허용하지 않고 있는데, 이는 언어의 복잡성을 크게 줄이는 역할을 한다.

Go는 기본적으로 서버 소프트웨어를 위해서 디자인 됐으며 본질적으로 동시성, 비동기 그리고 멀티스레드를 지향하고 있다. 이것은 함수형 프로그래밍이나 멀티스레딩과 같은 혁명적인 것은 아니지만 고루틴(goroutines)와 채널 덕분에 비동기 멀티스레드 코드를 보다 쉽게 개발 할 수 있게 도와준다.

우리는 멀티 코어 프로그래밍 문제를 해결했다고 생각하지 않는다. 다만 특정 종류의 문제들을 좀 더 쉽게 풀 수 있도록 멀티 코어 아키텍처를 이용 할 수있는 환경을 구축했다고 생각한다. - Rob Pike

Go는 개발자의 생산성을 높이기 위해서 디자인됐다.

생산성은 엔지니어링 관리 규칙에서 가장 중요한 요소이다. 반면 엔지니어에게는 즐거움이 가장 중요한 요소다. 하나는 다른 하나에서 유래한다. - Rob Pike

메모리 관리

GC를 실행하는 언어는 C/C++을 대체할 수 없다.

런타임

런타임은 소프트웨어를 쉽게 만들 수 있게 도와준다. 하지만 비용이 들어간다.

전반적인 복잡도

간단한(덜 복잡한)언어는 일반적으로 유연성이 떨어지므로 간단한 언어가 복잡한 다른 언어를 대체할 수는 없다.

성능과 메모리

좋은 C 코드는 어셈블러와 수작업으로 CPU 명령을 건드리지 않고도 개발자가 원하는 만큼의 속도를 보장한다. Go와 같은 언어로는 이러한 성능을 달성 할 수 없다.

생태계

진지한 언어가 되기 위해서는 좋은 생태계가 필요하다. 수백개의 (다른 언어에는 이미 존재하는) 바퀴를 새로 만들기 위해서 삶을 소비하고 싶지는 않을 것이다.

개발 툴

좋은 툴은 생산성을 극도로 향상시킨다. Go는 품질에서, C/C++은 수량에서 장점을 가지고 있다.

상호 운용성

Go는 일반적으로 사용하는 상용 하드웨어 전용으로 설계됐다.