Chapter 15. Performance
This chapter covers
- Type hints
- Transients
- Chunked sequences
- Memoization
- Understanding coercion
- Reducibles
Now that you’ve spent a book’s worth of material learning the why and how of Clojure, it’s high time we turned our attention to the subject of performance. There’s a meme in programming that can be summarized as follows: make it work first, and then make it fast. Throughout this book, we’ve taught you the ways Clojure allows you to “make it work,” and now we’re going to tell you how to “make it fast.”
In many cases, Clojure’s compiler can highly optimize idiomatic Clojure source code. But there are times when the form of your functions, especially in interoperability scenarios, will prove to be ambiguous or even counter to compiler optimizations. Therefore, we’ll lead you through optimization techniques such as type hints, transients, chunked sequences, memoization, and coercion. Using a combination of these techniques will help you approach, and sometimes exceed, the performance of Java.
The most obvious place to start, and the one you’re most likely to encounter, is type hinting—so this is where we’ll begin.