2005년 5월 29일 오전 6:08 (GMT+9)

많은 사람들이 Smalltalk는 느리다고 한다. 정말 그렇게 느린가?

결론부터 말하면, 그렇다Smalltalk는 느리다.

그러나 위의 한 문장을 보고 바로 이 글을 그만 읽으려고 생각한다면 내가 여러분이 '단편적인 사람'이라고 생각해도 화내지 말자. ^^

속도에 대해서 이야기를 할 때에는 필연적으로 '비교'를 해야 한다. 도대체 느리다면 얼마나 느린 것이고, 빠르다면 어느만큼 빠른가?

빠른 속도를 자랑하는 경주용 자동차

빠른 속도를 자랑하는 경주용 자동차

편안하게 운전할 수 있는 승용차

편안하게 운전할 수 있는 승용차

여러분이 일반적으로 사는 도시라는 환경 속에서 일상적으로 이용한다면 이 둘 중에 어느 것을 택할 것인가? 곰곰히 생각하며 아래 글을 끝까지 읽어주시기를, 정중하게 부탁드리는 바이다.

1. 벤치마크 테스트

벤치마크의 대명사, 하노이의 탑

벤치마크의 대명사, 하노이의 탑

Smalltalk의 속도를 비교할 때 자주 등장하는 언어가 C 언어이다. C언어에 비해서 Smalltalk는 느리다고 말한다. 그리고 그것은 사실이다.

아시다시피, C언어에서는 소스 코드를 번역할 때(compile-time) 모든 것이 이미 결정이 되어 있다. 자료형(data type)도 고정되어 있고, 함수도 그렇다. 이미 번역을 할 때 컴파일러는 모든 것을 알고 있다. 따라서 C에서 만든 프로그램은 실행 속도가 빠르다. 실행 시간에 무언가를 결정할 일이 없기 때문이다.

반면 Smalltalk에서는 소스 코드를 번역할 때 결졍되어 있는 것은 거의 아무 것도 없다. 모든 것은 번역할 때가 아니라 실행할 때(run-time) 그제서야 결정된다. 지금 번역하고 있는 소스 코드가 어떤 형태의 객체를 사용할지도 모르고, 내가 보낸 메시지를 받은 객체가 어떻게 반응할지 전혀 알 수 없다. 결국 Smaltlalk로 만들어진 프로그램은 실행될 때 여러 가지 상황을 직접 판단해서 결정을 내려야 한다.