Summary
In this chapter, we have discussed the easiest way to increase GHC Haskell's performance: tweaking compiler and Runtime System flags. Enabling optimizations, compiling via LLVM, and enabling LLVM optimizations is a quick route to a usually very respectable performance. Although most of the time GHC's sophisticated, heuristic optimizations produce faster code, this is not always the case. Some optimizations produce slow and even incorrect code under certain situations. Unsafe functions in particular interact badly with many optimizations. Furthermore, eager inlining may produce very big binaries.
We discussed features in the Runtime System and how to enable and configure them. Light-weight (green) threads were cheap, scheduled by RTS, and enabled easy concurrent evaluation via sparks, but were limited with regard to foreign system calls. The parallel and generational garbage collector also had multiple tunable parameters to experiment with.
In the next chapter, we will learn...