이 글은 ari님의 글 '성능에 대한 미신'(http://sparcs.kaist.ac.kr/~ari/each/article.each.463.html)에 대한 두번째 트랙백입니다. 답글로 남기기에는 너무 길어서져 트랙백으로 보냅니다.
제 블로그에 남겨주신 답글은 감사히 읽어보았습니다.
그런데 제가 궁금한 것은 C와 C++, Java는 태생적으로 다른 언어이고 어떤 하나의 작업을 위해서 다른 코드를 생성할 수 밖에 없고 그 다른 코드가 다른 어셈블리 인스트럭션을 만들어 낼 수 밖에 없습니다. 단순 연산이라면 동일한 어셈블리 코드를 만들어내지만 그거야 무의미한 비교라는 생각이 들거든요.
단순 연산말고 좀 더 복잡한 작업을 구현해야 하는 상황에서 '비교'를 하게 된다면 다른 코드가 나올 수 밖에 없고 그럼 성능 차이가 발생할 수 있다는 결론에 이르게 됩니다. 비교라면 어떤 최종적인 작업차원에서 비교해야지 상이한 언어로 똑같은 코드를 만들어낸다는 게 어렵겠죠.
게다가 제가 첫번째 트랙백에서 언급했다시피 C++이나 Java를 쓰기 때문에 프로그래머가 의도하지 않아도 자동으로 사용될 수 밖에 없는 기능들(예를 들면 폴리모피즘에 관련된)에 관련된 어셈블리 코드들이 프로그래머가 알게 모르게 생성될 것이거든요. 그게 장점일 수도 있지만 그런 기능이 굳이 필요없는 경우에는 성능 저하의 원인이 될 수 있다고 봅니다.(OOP 언어를 최적화기 어려운 이유도 같은 맥락에서 연유한다고 봅니다.)
제 의문을 요약하면 ari님께서 전제하시는 '똑같은 소스 코드를 C와 C++로 짠다면'이라는 가정이 처음부터 불가능하므로 동일한 작업을 위해 작성한 것이라 해도 다른 소스 코드가 나오게 되고 그럼 성능 차이가 약간이나마 쌓이게 될 것이고 결국 반복작업이라도 하게 되면 성능차이가 눈에 띌만큼 보이지 않겠는가하는 것이죠.
예를 들면 OS를 C++이나 자바로 만들지 않는 이유가 나름대로 있지 않을까요? 그게 설계 편의성에서 차이가 있을 수도 있지만 성능면에서 차이가 있어서일 수도 있다고 생각이 듭니다.
C++을 잘 알지 못하니 제대로 배워봤으면 하는 욕심이 있는데 Java로도 쩔쩔매고 있는 형편이라… 이런 이야기를 겁없이 떠든다니 좀 부끄럽기도 하네요.