A development-tool preview in 2017
After announcing quantum-development tools at Ignite in September 2017, Microsoft released a free preview on 11 December. Q#, pronounced Q-sharp, was the specialized-language component of the Quantum Development Kit, or QDK. The release included a local simulator, samples, libraries and development-environment support, at the preview stage of software development.
Users could edit code, set breakpoints and step through execution in Visual Studio. Microsoft described a simulator capable of handling approximately thirty logical qubits on an ordinary laptop, with larger simulations using Azure resources. Those numbers described classical simulation capacity, separate from access to a physical quantum processor.
Designing around a quantum coprocessor
Microsoft Research’s Redmond quantum architecture and computation team participated in the design. Krysta Svore led quantum software and simulator development; she and nine colleagues, including Alan Geller, Matthias Troyer, John Azariah and Bettina Heim, authored the early-2018 language paper. It addressed program structure: quantum algorithms may make measurements and decide subsequent actions, requiring more than fixed gate sequences.
The team adopted a model in which a classical host calls quantum subroutines. Input preparation, user interaction and result handling stay with the host; Q# expresses quantum operations and necessary classical computation inside algorithms. Functions perform deterministic classical computation, while operations can affect quantum systems. Qubit values can be passed to operations without granting arbitrary access to complete quantum states, separating algorithm expression from device-specific physical details.
How a random-bit program works
Ryan LaRose compared early quantum-software platforms using a common random-bit task. His Q# example allocates a qubit in the zero state, applies a Hadamard gate and measures it. Ideally, zero and one each have probability one-half. The program converts the result to an integer and resets the qubit to zero before releasing it.
The operation occupies a .qs file, called by a C# driver, with build information in a project file. Gates, measurement, classical conditional logic and resource release show how quantum operations connect with ordinary control flow. When run on a simulator, the randomness belongs to simulation. LaRose also notes that the length of a short example offers little measure of a language intended for complex algorithms.
References: [4]
Program transformations and checks
Q# includes mechanisms for common quantum transformations. The 2018 paper’s approximate quantum Fourier transform uses loops and conditions to select controlled rotations, applies Hadamard gates and rearranges register order. It can request automatically generated adjoint and controlled variants. Generation depends on operation properties, with measurements imposing constraints.
The toolkit’s trace simulator records resource requirements such as gates and qubits without storing the complete quantum state, allowing analysis of programs larger than full-state simulation supports. Early users could compare algorithm costs, while hardware speed remained a separate question. Designers emphasized clear expression, reusable subroutines and error checking as software-development goals.
Cross-platform support and open sourcing in stages
Quantum-software project manager Jeff Henshaw announced the first major update on 26 February 2018. macOS and Linux gained development and simulation support integrated with Visual Studio Code. A Windows Python-interoperability preview allowed existing Python code and Q# to call each other. Henshaw identified cross-platform support as a leading request from developers, whose ranks included students, teachers, researchers and algorithm designers.
Source availability expanded at different stages. Library code published in 2017 primarily aided learning; the 2018 update extended full open-source licensing to libraries and samples. On 11 July 2019, Microsoft announced open sourcing the QDK itself, inviting external work on compilation, optimization and tools. These stages broadened participation. Q#’s early contribution was a runnable, discussable and extensible environment for algorithm development while practical hardware remained limited.