gimmesilver's blog

Agbird.egloos.com

포토로그



Function call performance in Ruby 프로그래밍

Ruby Performance Revisited - joel
Ruby and Strongtalk - bryant

 조엘이 루비추종자들에게 flame을 걸었군요.(테이_ble님도 이걸 보면 흥분하실런지도...^^)
 루비와 같은 동적 언어는 컴파일과정에서 타입 추론 과정이 없기 때문에 매소드 호출 과정에서 객체의 실체를 추적하는 과정이 필요해서 강타입 언어에 비해 성능이 떨어진다라는 이야기를 했지만 Avi Bryant 라는 사람이 그렇지 않다는 주장을 했습니다.
 제가 이해한 것이 맞다면 루비는 실행 시점에서 한번 타입 추적이 발생하고 나면 해당 통계 정보를 저장하고 있다가 이 정보를 토대로 최적화를 수행하기 때문에 성능 상에 문제가 없다는군요...

 예전에 조엘의 책에서 강타입 언어가 제공하는 타입 검사 기능이 과연 유용한가?에 관련된 글을 읽은 적이 있습니다. 그 글의 요지는 타입 검사 때문에 프로그래밍을 복잡하게 하는 것 보다 차라리 쉽게 프로그래밍하고 타입 안전성 문제는 테스트 과정에서 해결하면 된다는 것이었습니다.

 저는 루비나 파이썬같은 동적 언어를 사용해 본 적이 없기 때문에 타입 검사가 있는 언어로 약간 불편하게 프로그래밍하는 것과 타입 검사 없이 일단 빠르게 프로그래밍하고 나서 기능을 테스트하는 것 중 어떤 것이 더 좋은지는 잘 모르겠습니다. 물론 저 같은 경우는 C++의 타입 검사 및 타입 추론 기능을 적극적으로 이용하는 편이기 때문에 이와 같은 동적 언어의 주장이 많이 어색합니다.(정적 바인딩을 이용한 오류 체크에 관해서는 이 글에서 잠깐 언급했습니다.)

 굳이 따진다면 저는 타입 추론 기능이 있는 언어가 좋습니다. 그래서 Objective-C를 공부할 때 id타입에 대해 좋은 점을 잘 못느끼겠더군요...

 하긴 비록 루비 프로그래머는 왜 C++에서는 객체에 메소드 하나 호출하기가 이렇게도 복잡하냐고 불평할지 모르겠지만요...:)

덧글

  • 테이_ble 2006/09/13 16:06 # 답글

    DHH 블로그를 먼저 봐서 ^^;; 조엘 불쌍.
  • silverbird 2006/09/14 18:01 # 답글

    // to 테이_ble
    불쌍할 것 까지야...모를 수도 있는거죠 뭐...^^
    어쨌든 내년 쯤에는 Smalltalk나 ruby를 한번 공부해보려고 합니다. 만약 루비를 공부하게 된다면 그때는 테이_ble님을 많이 괴롭힐지도...;)
댓글 입력 영역