Software architectures, compilers, and languages specifically for quantum computing have
been studied by the academic community for more than a decade ([1–4] and references
therein). Researchers have implemented software and simulators that can be used in practice
to study quantum algorithms at many scales. While we cannot survey this work here, we
list a few of these projects, several of which include software that has been made readily
available: Liquid [5, 6], Scaffold [7, 8], Quipper [9–11], ProjectQ [12, 13], QCL [14, 15],
Quiddpro [16, 17], Chisel-q [18, 19], and Quil [20, 21].
Our goal in this document is to describe an interface language for the Quantum Expe-
rience that enables experiments with small depth quantum circuits. The language can be
generated by the Composer, hand-written, or targeted by higher level software tools, such
as those above. Before we do so, we discuss quantum programs in general to provide con-
text. General quantum programs require coordination of quantum and classical parts of
the computation. One way to think about general quantum programs is to identify their
distinct phases of execution [11]. Fig. 1 shows a high-level diagram of the processes and
abstractions involved in specifying a quantum algorithm, transforming the algorithm into
executable form, running an experiment or simulation, and analyzing the results. A key idea
throughout these processes is the use of intermediate representations. An intermediate rep-
resentation (IR) of a computation is neither its source language description, nor the target
machine instructions, but something in between. Compilers may use several IRs during the
process of translating and optimizing a program.
Will it be the end of us?
Nope, we got options