Quantum programming in ordinary Julia, assisted by LLM agents
Every textbook quantum algorithm begins with "given an oracle for f", and every quantum programming framework answers with a circuit-drawing API and good luck. In an effort to address this challenge, I have been experimenting with an end-to-end Julia toolchain that closes the gap between ordinary code and quantum programs. Given a plain Julia function, no macros, no special types, still callable, Bennett.jl extracts its LLVM IR and compiles it into a provably reversible circuit, which Sturm.jl, a quantum programming language where the quantum–classical boundary is a type boundary, then calls as an oracle. I describe the design choices behind this pipeline across three packages: Sturm.jl (quantum programs that read like ordinary Julia), Bennett.jl (the reversible compiler), and BennettVM.jl (a reversible interpreter for programs no fixed circuit can express). In practice, the compiler routinely handles code it has never seen, including Base.sin, unchanged, bit-faithful to 1 ulp. LLM coding agents built most of this system, automating workflows that previously would have involved much yak shaving and frustration. As a consequence, time-poor persons with little software engineering expertise (such as myself!) can now build the tools they wish existed. I will directly address practical challenges including keeping agent-generated code honest (physics-level law tests caught real bugs that output statistics missed), the true cost of compiled circuits against hand-optimized ones, and the hard boundary where unbounded loops stop being oracles.
I am a theoretical physicist.
I am passionate about diversity in science and quantum mechanics.