Approximating molecular wave functions
involves heavy numerical
effort; therefore, codes for such tasks are written completely or
partially in efficient languages such as C, C++, and Fortran. While
these tools are dominant throughout quantum chemistry packages, the
efficient development of new methods is often hindered by the complexity
associated with code development. In order to ameliorate this scenario,
some software packages take a dual approach where a simpler, higher-level
language, such as Python, substitutes the traditional ones wherever
performance is not critical. Julia is a novel, dynamically typed,
programming language that aims to solve this two-language problem.
It gained attention because of its modern and intuitive design, while
still being highly optimized to compete with “low-level”
languages. Recently, some chemistry-related projects have emerged
exploring the capabilities of Julia. Herein, we introduce the quantum
chemistry package Fermi.jl, which contains the first implementations
of post-Hartree–Fock methods written in Julia. Its design makes
use of many Julia core features, including multiple dispatch, metaprogramming,
and interactive usage. Fermi.jl is a modular package, where new methods
and implementations can be easily added to the existing code. Furthermore,
it is designed to maximize code reusability by relying on general
functions with specialized methods for particular cases. The feasibility
of the project is explored through evaluating the performance of popular ab initio methods. It is our hope that this project motivates
the usage of Julia within the community and brings new contributions
into Fermi.jl.