ari님의 '성능에 대한 미신'을 읽고
ari님의 글 '성능에 대한 미신'(http://sparcs.kaist.ac.kr/~ari/each/article.each.463.html)에 대한 트랙백입니다.
다른 항목에 대해서는 동의를 합니다. 그런데 4번 C++보다 C가 빠르다는 게 미신이라는 항목에 대해서는 논거가 부족한 것 같습니다. 말씀하신 게 틀렸다는 소리가 아니라 명약관화한 논거가 주어진다면 믿을 수 있겠다는 거죠.
분명히 C가 자동으로 제공하지 않는데 C++에서는 자동으로 제공되는 기능들이 (프로그래머도 인식하지 못하는 채로) 사용되거든요. 상속에 기초한 설계방식 자체가 다르기 때문에 단순 비교는 어렵겠지만 4번을 단순히 미신으로 몰아붙이기에는 좀 더 명확한 설명이 필요하다는 생각이 듭니다.
예를 드셨던 1+1같은 단순한 연산말고 모듈화되어 좀 더 복잡한 시스템이 만들어지면 성능차이가 있을지 없을지 궁금해지는군요. C++은 클래스를 여럿 만들어놓고 상속받고 확장시켜서 서로 연결해가며 시스템을 구성하잖아요. 하지만 C는 단순히 함수의 호출관계만 존재할 뿐입니다. C에는 control flow만 존재하니 data protection이나 data flow에 대한 상세를 제공하는 C++과 비교하기 좀 어렵다는 생각이 들거든요.
뭐, 그래도 시스템 성능은 90%의 리소스를 차지하는 10%의 바틀넥에서 결정이 되는 편이니 정말 컴퓨팅 파워가 요구되는 시스템이라면 C++이나 C나 별차이 없겠다는 점은 인정합니다. 그런 시시콜콜한 것까지 틀렸다거나 증거를 대라거나 하는 무례한 태도로 비칠까 걱정되는데 그런 건 아니니 혹시라도 오해는 안 하셨으면 좋겠구요.
제가 C++에 대해서 잘 모르니 ari님께 설명 부탁드려야겠네요. ^^
댓글 2개
ari
제가 하고 싶었던 말은 '똑같은 소스 코드를 C와 C++로 짠다면 생성되는 어셈블리는 거의 동일하며, 따라서 그들 프로그램의 성능은 거의 같다.' 라는 것이었습니다.
C와 C++로 서로 다른 소스를 짜놓고선 C가 더 빠르다느니, C++이 더빠르다느니 주장하는건 말도 안되는 것이죠.
이건 비단 C나 C++뿐만 아니라 Java와 그밖에 ML계열 언어까지도 포함되는 이야기입니다.
프로그래밍 언어라는 것은 인간이 알아보기 쉽게 만들어진 것이고, 컴퓨터가 실행하기 위해선 이들 언어를 컴파일한 어셈블리이고, 이런 어셈블리 단계에서는 각 언어들의 특징은 모두 사라져버리죠.
따라서, C++로 만든 프로그램이 혹시 너무 느리게 도는 것 같으면, 그건 C++ 자체의 한계라기보다는 C++ 컴파일러가 제대로 된 어셈블리를 생성하지 못한 것입니다. 그리고, 이런 최적화된 어셈블리를 생성하는 것은 언어 자체의 한계가 아니라 앞으로 더 빨라질 수 있는 문제이니 어떤 언어, 'C++이나 Java가 느리다'라는 말은 무의미한 것이죠.
CN
C++은 객체지향 언어가 아닌 다 패러다임 언어입니다. 그 중의 하나의 패러다임인 Generic Programming은 추상적이어서 코드를 읽고 쓰는 사람 모두의 지적 노동이 필요하지만 매우 신뢰성 높고 경제적이며 효율적입니다. C++을 하더라도 C와 같이 절차지향적인 프로그래밍을 하는 것도 문제가 없구요. 문제는 어떻게 프로그래밍을 하느냐겠지요 🙂