  We introduce Yao, an extensible, efficient open-source framework for quantum
algorithm design. Yao features generic and differentiable programming of
quantum circuits. It achieves state-of-the-art performance in simulating small
to intermediate-sized quantum circuits that are relevant to near-term
applications. We introduce the design principles and critical techniques behind
Yao. These include the quantum block intermediate representation of quantum
circuits, a builtin automatic differentiation engine optimized for reversible
computing, and batched quantum registers with GPU acceleration. The
extensibility and efficiency of Yao help boost innovation in quantum algorithm
design.
