How to call methods more efficiently in dynamic language

Tags:

Joel이 Ruby성능에 대해 Ruby Performance Revisited를 통해 약간의 혹평(?)을 했습니다. 특히 Joel은 유니코드 등에 대한 루비의 입장에 대해서도 비판적입니다. 실제로 루비는 Joel글의 링크에 있듯이 자바에 비해 50x 느리다는 자료도 있습니다.

음 그래서 루비가 나쁘다는 것이 주제는 아니고.. Avi Bryant가 Ruby and Strongtalk에 duck typing을 쓰는 언어가 어떻게 성능을 개선하는가에 대해 설명을 잘 해두어서 그에대한 글을 올립니다. 커멘트 중에 보면 Digging into interface calls in the .NET Framework: Stub-based dispatch라는 글에 대한 링크가 있는데 역시 한번 볼만한 듯합니다.

한마디로 요약하면, ‘메소드가 몇번만 불려도 어떤 메소드에 대한 call인지 정보를 알 수 있고, 따라서 indirection없이 정확한 주소로 한번에 점프가 가능하다’란 것입니다. Avi Bryant는 따라서 vtable을 사용하는 C++ virtual method보다 더 빠르게 수행이 가능하다고까지 주장합니다. 그런데 지금의 Ruby가 느린이유는? 물론 구현이 Naive하기 때문입니다.

이런 방법들이 JIT등의 근간이 되는 건가 보군요..