Reflection and type hints

Sometimes, as Clojure is dynamically typed, the Clojure compiler is unable to figure out the type of object to invoke a certain method. In such cases, Clojure uses reflection, which is considerably slower than the direct method dispatch. Clojure's solution to this is something called type hints. Type hints are a way to annotate arguments and objects with static types, so that the Clojure compiler can emit bytecodes for efficient dispatch.

The easiest way to know where to put type hints is to turn on reflection warning in the code. Consider this code that determines the length of a string:

user=> (set! *warn-on-reflection* true) true user=> (def s "Hello, there") #'user/s user=> (.length s) Reflection warning, NO_SOURCE_PATH:1 ...

Get Clojure High Performance Programming - Second Edition now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.