In this post, we describe an important aspect of constructing and compiling complex quantum operators—specifically, how large operators built from many smaller pieces can be represented and resolved. Let’s say we want to create a unitary operator acting on a large...
Quantum Programming Abstractions
What does it mean to program a quantum computer? Why are we still stuck specifying individual qubit gates by hand? And what would a true quantum programming language look like?
Right now, programming quantum computers is done through quantum circuits—specifying how qubits rotate on their Bloch spheres or how they become entangled with one another. This is an extremely low-level approach, comparable to programming a classical computer by adjusting the voltages across its transistors. Yet, this is the dominant paradigm adopted by widely used quantum software frameworks such as Qiskit, Cirq, CUDA-Q, and PennyLane.
These frameworks sometimes include libraries of reusable circuits, which can make things more manageable, but this is still far from true quantum abstraction. Other approaches attempt to wrap quantum operations in classical compilation infrastructures like LLVM. While useful, these are not quantum-native models of computation—they carry over classical assumptions that are often not very relevant to quantum computing.
The push for higher-level abstractions isn’t just theoretical—it’s driven by pressing practical needs. As qubit counts grow, designing and optimizing quantum circuits by hand quickly becomes infeasible. Add in the complexity of error correction and fault tolerance, and manual circuit construction becomes virtually impossible. And if the only way to express a quantum algorithm is through low-level circuit details, reasoning about algorithms—let alone building robust applications—remains out of reach for most developers.
Clearly, we need a higher-level programming model for quantum computing. But because the field is so new, it’s not yet obvious what form that model should take. What seems likely is that it won’t look much like classical abstractions. We believe that such a model will emerge gradually, shaped by advancing hardware, growing algorithmic sophistication, and repeated patterns in how people interact with quantum systems.
This blog series chronicles our attempt to build just such a high-level quantum programming language—one born from the real, day-to-day challenges of developing a usable quantum computing stack. Our goal is to create something intuitive, powerful, and compatible with a range of underlying qubit technologies. Join us on the journey.