There is no way to predict which quantum system will garner system share in the next years, but most large chip, system, and software companies are hedging their bets and establishing a quantum research effort in the form of hardware, simulations, or software stacks.
There are several hardware options for quantum systems; ion traps, superconducting circuits, linear optics, quantum dots, and a few others on the fringe, but for Microsoft, the approach of choice is called majorana zero modes. If that sounds esoteric, that’s because it is, which explains why Microsoft will not be in the quantum computing game in the foreseeable future, even if some of its programming teams are working on a standalone language to support this kind of projected system.
A lack of defined marked has not stopped Redmond teams from working on translating classical problems to the quantum space. As we recently learned at the International Supercomputing Conference (ISC) this month, there is a quite a concerted effort to start mapping key problems in cybersecurity, finance, materials science, and computational chemistry to these future machines.
The Q# language is at the core of Microsoft’s burgeoning effort. As Martin Roetteler, a researcher in the company’s compilers and tools group, explained at ISC, the goal is to build a future scalable quantum system from the dilution fridge to the stack of superconducting and microwave devices, all the way to a library and feature-rich language to hop between classical and quantum modes. He says the majorana zero modes approach to building the hardware system means that (in theory) the system could have self-correcting memory so the qubits themselves would be self-stabilizing and almost noise free. The complex physics is explained in this series of articles–back to the programming language.
It seems bold at this early stage of the quantum game to create a standalone language versus go with one of the open source languages or those embedded with something like Python. But Roetteler says it makes sense for Microsoft, which wants to integrate Q# with Visual Studio and some of its other profiling tools and track the progress and failures over time. He says some languages will hit limits for quantum problems as time goes on whereas with Q# they can build around bottlenecks and bounce between classical and quantum with more flexibility.
“The aim of Q# is to provide a simple language that allows developers to write code that targets a wealth of quantum computing platforms and interface with the intervening layers of software that stand between the user and the quantum device. Q# facilitates this by embracing the notion of a software stack and abstracting many of the details of the underlying quantum computer while allowing other levels of the stack, exposed through a language such as C#, to perform the necessary translations from Q# code to fundamental operations. This allows the developer to focus on what they do best: designing algorithms and solving problems.”
The team has thus far released the quantum development kit, which has a .NET core and works with C#, F# and VB.NET and multiple OS support. The development tools are based on familiar platforms like Visual Studio. Features include the local simulator and a cost estimator so early experiments can gauge how many qubits are needed, for example.
Q# programs are made up of operations and functions. The operations are quantum or non-deterministic classic code based that can interact with and transform qubits. Functions are purely deterministic classical code elements.
The current incarnation comes with a number of libraries that have a lot of operations and functions that have both quantum input/output and those that just deal with classical data. Simulations can run to 30 qubits currently with a 40 qubit capability on Azure coming soon. With the cost estimator, users can run the early stage applications at scale, express complicated programs and see circuit delay times, qubits used, and error profiling details.
More on the concept behind quantum programming and how it relates to Q# can be found here.