A major goal of Julia is allowing people to write fast, generic numeric libraries cleanly and easily. In the process of designing the language, we have found that this requires some surprisingly advanced language features, including:
an expressive language of types
a theory of subtyping
a powerful multiple dispatch system
Lisp-style metaprogramming and macros
carefully designed equality, ordering and hashing
easy-to-use, implicit staged programming
These features have enabled high-performance, general libraries for problems such as optimization (think logistics, not compilers), numerical integration, and automatic differentiation, among others. We will give hands on examples of the kinds of problems we’ve encountered and how we’ve solved them, while highlighting recent developments in the language.