Nim is statically typed.[9] It supports compile-time metaprogramming features such as syntactic macros and term rewriting macros.[10] Term rewriting macros enable library implementations of common data structures such as bignums and matrices to be implemented efficiently, as if they were builtin language facilities.[11] Iterators are supported and can be used as first class entities,[10] as can functions, allowing for the use of functional programming methods.