Mandatory note: I work at Quantinuum. Opinions are mine. Metaphors mine, inaccuracies mine, bad writing mine.
I'm posting this because we've done something cool, and now it has launched, I want to share it with software folk who aren't exposed to this field.
Hope you like it.
A primer to define terms.
A normal computer has bits and instructions. A quantum computer has qubits and gates.
In terms of computation they're different, but in terms of process it's the same deal.
I won't explain why qubits are different to bits. It's an enormous topic.
On computers, bits may be encoded as charges, voltage differences, etc.
On QCCD ion traps like Helios, qubits are encoded in the state of ions in a trap. Hence the name!
Throughout operation, you move these ions in and out of storage and gating zones, rearrange them, etc.
A user submits code (more on this later) that talks in an abstract language of qubits and gates.
They want to run it on your machine and get results.
They don't really care about ions, trap architecture, transport, gating zones. That's implementation detail for low level folk.
When they submit that code, you as a provider need to figure out the best way to map the abstract to reality - assign qubits to ions, transport them around the trap, fire gates, parallelise.
This is a hard thing to do optimally.
Qubits lose information fast, so optimal = good.
The usual solution? Analyse the user's code ahead of time.
This requires user code to be deterministic, or have minimal control flow that can be statically analysed.
Which is kind of okay. Much of the industry thinks in static quantum "circuits" like these:
Or, sometimes, basic control flow is allowed - supporting a few if statements (depending on measurement results mid-run). These are called "dynamic" circuits.
If there aren't many branches you can still traverse every possibility and come up with good overall hardware flow.
There's a point that this breaks down.
A major reason that people WANT control flow is that they want to correct quantum errors.
This means frequently making decisions throughout execution. Lots and lots of branching.
The circuit picture blows up.
That's low level stuff providers will do themselves one day, but isn't the only control flow puzzle in town.
AI for quantum! Not a buzzword.
In chemistry simulations, classical NNs could dynamically tune live quantum states to mimic arbitrary molecules
(the specific components I'm going to briefly talk about now are open source, so I'm going to link to them so you can check them out if you want)
To ensure that a program simply wouldn't compile if it violated constraints like this for quantum types, but allowed it for classical ones, an IR for hybrid computing was created: HUGR.
For something to compile to HUGR, it has to obey the rules.
Users can emulate stuff locally with Selene to try it out* from the same interface so they can see what it'll do when they submit it.
*within limits - UNIVERSALLY simulating 98 qubits would take 5 quettabytes of RAM. I said qubits were different.github.com/CQCL/selene
So users can create arbitrary programs (not just "circuits") with the control flow they need, try it out, then submit it to Helios.
E.g this:
Running a guppy program acting as host, JPMC had *full remote control* of Helios, live. No trickery.arxiv.org/abs/2511.03689
That users can run full hybrid programs on Helios is the result of an enormous effort on every detail, from that incredible little junction right up to guppy UX.
Also the choice of trapped ions. They're long-lived and take time to operate on, so CPU work can fit alongside them.
That comes to the end of the tour.
Thanks for making it to the end! Let me know what you think!
I hope you've enjoyed it, learned something new, and gained an glimpse into one of many streams of work that went into Helios.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
First of all, where has this been all of my life? As a user, the experience is incredible. Want to install something? Add a line to your config. Uninstall? Remove a line. Not sure? "nix-shell -p something" and try it out.
Want to configure something? You can always do it in the config file. I added three VPN clients to my machine today with five lines of legible text. And it just worked. Copied the config to my laptop, ran nix build, boom, the connection worked. This is ridiculously nice.
We're in the planning stage of a large refactor at the moment. So much of the past and current designs were influenced in some way or another by some conference talks. So I figured it's time for a C++ appreciation thread.
When I saw this, we were writing the first formal iteration of what became our most critical component. It shows how to catch edge cases in the type system instead of runtime tests.