Festivus: Q# Feats of Strength
Last year we celebrated Festivus by observing Airing of Grievances – the UserVoice channel where Q# users filed bug reports and improvement suggestions. It seems fitting to observe Feats of Strength this year. Alas, we couldn’t take the same approach as last year:
- First, we open-sourced the QDK and deprecated the UserVoice channel, so there is no single channel for QDK feedback any longer.
- Second, our users don’t typically open GitHub issues just to thank the language creators for an especially nice feature!
Instead, we decided to poll our team members for their favorite Q# feature or a particularly useful tool. Check out their replies below – you might find something new to try!
- The partial application syntax to create closures is actually quite nifty and very useful… Here is an example. – Alan Geller
- The functor support is very straightforward and easy to use. Just put Adjoint in front of an adjointable operation and [the compiler] figures it out. – Scott Carda
- And that we support borrowing is neat too, for the more quantum savvy people. – Bettina Heim
- I would highlight that qubit management happens automatically in a well structured context. – Andres Paz
- apply … within and AssertProb. – Vadym Kliuchnikov
- QDK is open source! Plus first-class functions and operations + partial application lets you do just about everything. – Chris Granade
- Tools for testing and debugging and Jupyter Notebooks support: the first feature to make the Quantum Katas possible and the second one to make them beautiful! – Mariia Mykhailova
- It is hard to pick just one thing…
- Q# libraries, from simple (but really useful) tools in the Canon to more complex things like the multiplexer and state preparation tools to specialized libraries written in collaboration with domain experts like the chemistry library and the numerics library.
- The resource estimator that allows you to gather metrics such as number of qubits, circuit depth, and circuit size at scale, i.e., for quantum programs that may involve millions of qubits and billions of quantum gates!
- The effortless ease with which simple quantum algorithms such as Bernstein-Vazirani or hidden shift or Simon’s algorithm can be implemented. Simon’s algorithm needs complex post-processing (linear algebra over GF(2)) and I like how this can be done by using Q# in tandem with C#. Also, the synthesis of permutations is a cool feature.
How about you – what is your favorite Q# feature?