Quantum programming languages

Abstract

Quantum programming languages are essential to translate ideas into instructions that can be executed by a quantum computer. Not only are they crucial to the programming of quantum computers at scale but also they can facilitate the discovery and development of quantum algorithms even before hardware exists that is capable of executing them. Quantum programming languages are used for controlling existing physical devices, for estimating the execution costs of quantum algorithms on future devices, for teaching quantum computing concepts, or for verifying quantum algorithms and their implementations. They are used by newcomers and seasoned practitioners, researchers and developers working on the next ground-breaking discovery or applying known concepts to real-world problems. This variety in purpose and target audiences is reflected in the design and ecosystem of the existing quantum programming languages, depending on which factors a language prioritizes. In this Review, we highlight important aspects of quantum programming and how it differs from conventional programming. We overview a selection of several state-of-the-art quantum programming languages, highlight their salient features, and provide code samples for each of the languages and Docker files to facilitate installation of the software packages.

Key points

  • Quantum computing fundamentally differs from other means of computing, requiring the development of domain-specific programming languages and compilation techniques.

  • Quantum programming languages today cater to a variety of purposes and target audiences ranging from newcomers to seasoned practitioners, and which factors are prioritized substantially impacts the design of the language, the ecosystem and the community around it.

  • Programming languages and software tools facilitate the discovery, advancement and development of quantum applications by enabling the verification, resources estimation, program analysis and visualization of quantum applications; they are essential for understanding and analysing both large-scale applications and algorithms for near-term hardware and suitable circuit compilation methods.

  • The requirements for software tools for near-term devices and applications differ substantially from those geared towards scalable, fault-tolerant quantum computing.

  • The field of quantum programming languages and compilers is still nascent, and current research and implementation efforts are focused on low-level circuit optimizations, concentrating on the purely quantum pieces rather than on optimizations that act across the entire program structure.

  • Emulating and accelerating a similar progression to that followed by conventional computing over the past 50 years requires a collaborative effort across disciplines to take full advantage of the acquired knowledge.

Access options

Rent or Buy article

Get time limited or full article access on ReadCube.

from$8.99

All prices are NET prices.

Code availability

Examples of code can be found at https://github.com/msr-quarc/quantum-languages-review/tree/master/src.

References

  1. 1.

    Arute, F. et al. Quantum supremacy using a programmable superconducting processor. Nature 574, 505–510 (2019).

    ADS  Google Scholar 

  2. 2.

    Kandala, A. et al. Error mitigation extends the computational reach of a noisy quantum processor. Nature 567, 491–495 (2019).

    ADS  Google Scholar 

  3. 3.

    Montanaro, A. Quantum algorithms: an overview. npj Quantum Inf. 2, 15023 (2016).

    ADS  Google Scholar 

  4. 4.

    Roetteler, M. & Svore, K. M. Quantum computing: codebreaking and beyond. IEEE Secur. Priv. 16, 22–36 (2018).

    Google Scholar 

  5. 5.

    Montanaro, A. Quantum speedup of branch-and-bound algorithms. Phys. Rev. Res. 2, 013056 (2020).

    Google Scholar 

  6. 6.

    Chong, F. T., Franklin, D. & Martonosi, M. Programming languages and compiler design for realistic quantum hardware. Nature 549, 180–187 (2017).

    ADS  Google Scholar 

  7. 7.

    Ross, J. The dawn of quantum programming. Quantum Views 2, 4 (2018).

    Google Scholar 

  8. 8.

    Nam, Y., Ross, N. J., Su, Y., Childs, A. M. & Maslov, D. Automated optimization of large quantum circuits with continuous parameters. npj Quantum Inf. 4, 23 (2018).

    ADS  Google Scholar 

  9. 9.

    Kliuchnikov, V., Bocharov, A., Roetteler, M. & Yard, J. A framework for approximating qubit unitaries. Preprint at https://arxiv.org/abs/1510.03888 (2015).

  10. 10.

    Farhi, E., Goldstone, J. & Gutmann, S. A quantum approximate optimization algorithm. Preprint at https://arxiv.org/abs/1411.4028 (2014).

  11. 11.

    Peruzzo, A. et al. A variational eigenvalue solver on a photonic quantum processor. Nat. Commun. 5, 4213 (2014).

    ADS  Google Scholar 

  12. 12.

    Moll, N. et al. Quantum optimization using variational algorithms on near-term quantum devices. Quantum Sci. Technol. 3, 030503 (2018).

    ADS  Google Scholar 

  13. 13.

    Hoare, T. Null references: the billion dollar mistake. InfoQ https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/ (2009).

  14. 14.

    Iverson, K. E. Notation as a tool of thought. Commun. ACM 23, 444–465 (1980).

    MathSciNet  Google Scholar 

  15. 15.

    Ying, M. Foundations of Quantum Programming (Morgan Kaufmann, 2016).

  16. 16.

    Barenco, A. et al. Elementary gates for quantum computation. Phys. Rev. A 52, 3457–3467 (1995).

    ADS  Google Scholar 

  17. 17.

    Bergholm, V., Vartiainen, J. J., Möttönen, M. & Salomaa, M. M. Quantum circuits with uniformly controlled one-qubit gates. Phys. Rev. A 71, 052330 (2005).

    ADS  MATH  Google Scholar 

  18. 18.

    Kliuchnikov, V., Maslov, D. & Mosca, M. Fast and efficient exact synthesis of single qubit unitaries generated by Clifford and T gates. Quantum Inf. Comput. 13, 607–630 (2013).

    MathSciNet  Google Scholar 

  19. 19.

    Ross, N. J. & Selinger, P. Optimal ancilla-free Clifford. T approximation of z-rotations. Quantum Inf. Comput. 16, 901–953 (2016).

    MathSciNet  Google Scholar 

  20. 20.

    Amy, M., Maslov, D., Mosca, M. & Roetteler, M. A meet-in-the-middle algorithm for fast synthesis of depth-optimal quantum circuits. IEEE Trans. CAD Integr. Circuits Syst. 32, 818–830 (2013).

    Google Scholar 

  21. 21.

    Bravyi, S. & Kitaev, A. Universal quantum computation with ideal Clifford gates and noisy ancillas. Phys. Rev. A 71, 022316 (2005).

    ADS  MathSciNet  MATH  Google Scholar 

  22. 22.

    Jozsa, R. An introduction to measurement based quantum computation. Preprint at https://arxiv.org/abs/0508124 (2005).

  23. 23.

    Gottesman, D. & Chuang, I. L. Demonstrating the viability of universal quantum computation using teleportation and single-qubit operations. Nature 402, 390–393 (1999).

    ADS  Google Scholar 

  24. 24.

    Bocharov, A., Roetteler, M. & Svore, K. M. Efficient synthesis of universal repeat-until-success quantum circuits. Phys. Rev. Lett. 114, 080502 (2015).

    ADS  Google Scholar 

  25. 25.

    Bocharov, A., Roetteler, M. & Svore, K. M. Efficient synthesis of probabilistic quantum circuits with fallback. Phys. Rev. A 91, 052317 (2015).

    ADS  Google Scholar 

  26. 26.

    Wiebe, N. & Roetteler, M. Quantum arithmetic and numerical analysis using repeat-until-success circuits. Preprint at https://arxiv.org/abs/1406.2040 (2014).

  27. 27.

    Granade, C., Ferrie, C., Wiebe, N. & Cory, D. Robust online hamiltonian learning. New J. Phys. 14, 103013 (2012).

    ADS  MathSciNet  MATH  Google Scholar 

  28. 28.

    Paesani, S. et al. Experimental Bayesian quantum phase estimation on a silicon photonic chip. Phys. Rev. Lett. 118, 100503 (2017).

    ADS  Google Scholar 

  29. 29.

    Wiebe, N. & Granade, C. Efficient Bayesian phase estimation. Phys. Rev. Lett. 117, 010503 (2016).

    ADS  Google Scholar 

  30. 30.

    Kivlichan, I. D., Granade, C. E. & Wiebe, N. Phase estimation with randomized Hamiltonians. Preprint at https://arxiv.org/abs/1907.10070 (2019).

  31. 31.

    Meuli, G., Soeken, M., Roetteler, M. & Häner, T. Automatic accuracy management of quantum programs via (near-) symbolic resource estimation. Preprint at https://arxiv.org/abs/2003.08408 (2020).

  32. 32.

    Low, G. H., Kliuchnikov, V. & Schaeffer, L. Trading T-gates for dirty qubits in state preparation and unitary synthesis. Preprint at https://arxiv.org/abs/1812.00954 (2018).

  33. 33.

    Gidney, C. Halving the cost of quantum addition. Quantum 2, 74 (2018).

    Google Scholar 

  34. 34.

    Meuli, G., Soeken, M., Roetteler, M., Bjorner, N. & De Micheli, G. Reversible pebbling game for quantum memory management. In DATE 288–291 (IEEE, 2019); https://doi.org/10.23919/date.2019.8715092

  35. 35.

    Brassard, G., Høyer, P., Mosca, M. & Tapp, A. Quantum amplitude amplification and estimation. Quantum Comput. Inf. 305, 53–74 (2002).

    MathSciNet  MATH  Google Scholar 

  36. 36.

    Kitaev, A. Quantum measurements and the abelian stabilizer problem. Preprint at https://arxiv.org/abs/quant-ph/9511026 (1995).

  37. 37.

    Shor, P. Polynomial-time algorithms for prime factorization and discrete logarithms on a quantum computer. SIAM J. Comput. 26, 1484–1509 (1997).

    MathSciNet  MATH  Google Scholar 

  38. 38.

    Quantum Algorithm Zoo; http://quantumalgorithmzoo.org/

  39. 39.

    Houck, A. A., Koch, J., Devoret, M. H., Girvin, S. M. & Schoelkopf, R. J. Life after charge noise: recent results with transmon qubits. Quantum Inf. Process. 8, 105–115 (2009).

    Google Scholar 

  40. 40.

    Barends, R. et al. Coherent Josephson qubit suitable for scalable quantum integrated circuits. Phys. Rev. Lett. 111, 080502 (2013).

    ADS  Google Scholar 

  41. 41.

    Imamoglu, A. et al. Quantum information processing using quantum dot spins and cavity QED. Phys. Rev. Lett. 83, 4204–4207 (1999).

    ADS  Google Scholar 

  42. 42.

    Cirac, J. I. & Zoller, P. Quantum computations with cold trapped ions. Phys. Rev. Lett. 74, 4091–4094 (1995).

    ADS  Google Scholar 

  43. 43.

    Nayak, C., Simon, S. H., Stern, A., Freedman, M. & DasSarma, S. Non-Abelian anyons and topological quantum computation. Rev. Mod. Phys. 80, 1083–1159 (2008).

    ADS  MathSciNet  MATH  Google Scholar 

  44. 44.

    Preskill, J. Quantum computing in the NISQ era and beyond. Quantum 2, 79 (2018).

    Google Scholar 

  45. 45.

    Smith, R. S., Curtis, M. J. & Zeng, W. J. A practical quantum instruction set architecture. Preprint at https://arxiv.org/abs/1608.03355 (2016).

  46. 46.

    Svore, K. M. et al. Q#: enabling scalable quantum computing and development with a high-level domain-specific language. In Proc. Real World Domain Specific Languages Workshop, 7 (ACM, 2018).

  47. 47.

    Svore, K. M., Aho, A. V., Cross, A. W., Chuang, I. & Markov, I. L. A layered software architecture for quantum computing design tools. Computer 39, 74–83 (2006).

    Google Scholar 

  48. 48.

    Cross, A. W., Bishop, L. S., Smolin, J. A. & Gambetta, J. M. Open quantum assembly language. Preprint at https://arxiv.org/abs/1707.03429 (2017).

  49. 49.

    Cirq Documentation; https://cirq.readthedocs.io/en/stable/

  50. 50.

    Häner, T. & Steiger, D. S. 0.5 petabyte simulation of a 45-qubit quantum circuit. In Proc. International Conference for High Performance Computing, Networking, Storage and Analysis 33 (ACM, 2017); https://doi.org/10.1145/3126908.3126947

  51. 51.

    Kornyik, M. & Vukics, A. The Monte Carlo wave-function method: a robust adaptive algorithm and a study in convergence. Comput. Phys. Commun. 238, 88–101 (2019).

    ADS  MathSciNet  Google Scholar 

  52. 52.

    Aaronson, S. & Gottesman, D. Improved simulation of stabilizer circuits. Phys. Rev. A 70, 052328 (2004).

    ADS  Google Scholar 

  53. 53.

    Steiger, D. S., Häner, T. & Troyer, M. ProjectQ: an open source software framework for quantum computing. Preprint at https://arxiv.org/abs/1612.08091 (2016).

  54. 54.

    Reiher, M., Wiebe, N., Svore, K. M., Wecker, D. & Troyer, M. Elucidating reaction mechanisms on quantum computers. Proc. Natl Acad. Sci. USA 114, 7555–7560 (2017).

    ADS  Google Scholar 

  55. 55.

    Rand, R., Paykin, J. & Zdancewic, S. QWIRE practice: formal verification of quantum circuits in Coq. In Proc. 14th International Conference on Quantum Physics and Logic, QPL 2017, EPTCS Vol. 266 119–132 https://doi.org/10.4204/EPTCS.266.8 (Open Publishing Association, 2018).

  56. 56.

    Shi, Y. et al. Contract-based verification of a realistic quantum compiler. Preprint at https://arxiv.org/abs/1908.08963 (2019).

  57. 57.

    Ying, M. Toward automatic verification of quantum programs. Formal Aspects Comput. 31, 3–25 (2019).

    MathSciNet  MATH  Google Scholar 

  58. 58.

    Nielsen, M. A. & Chuang, I. L. Quantum Computation and Quantum Information: 10th Anniversary Edition (Cambridge University Press, 2011).

  59. 59.

    Microsoft Quantum Documentation; https://docs.microsoft.com/quantum

  60. 60.

    Qiskit documentation; https://qiskit.org/documentation/

  61. 61.

    Kluyver, T. et al. Jupyter Notebooks — a publishing format for reproducible computational workflows. In Positioning and Power in Academic Publishing: Players, Agents and Agendas, 20th International Conference on Electronic Publishing 87–90 https://doi.org/10.3233/978-1-61499-649-1-87 (2016).

  62. 62.

    IBM Quantum Experience; https://quantum-computing.ibm.com/

  63. 63.

    Experience quantum impact with Azure Quantum. Microsoft https://cloudblogs.microsoft.com/quantum/2019/11/04/announcing-microsoft-azure-quantum/ (2019).

  64. 64.

    Ho, A. & Bacon, D. Announcing Cirq: an open source framework for NISQ algorithms. Google AI Blog https://ai.googleblog.com/2018/07/announcing-cirq-open-source-framework.html (2018).

  65. 65.

    Rigetti, C. Introducing Rigetti quantum cloud services. Rigetti https://medium.com/rigetti/introducing-rigetti-quantum-cloud-services-c6005729768c (2018).

  66. 66.

    Alpine Quantum Technologies (AQT); https://www.aqt.eu/solutions/

  67. 67.

    QuTech Quantum Inspire Home. https://www.quantum-inspire.com/

  68. 68.

    Barr, J. Amazon Braket — get started with quantum computing. AWS News Blog https://aws.amazon.com/blogs/aws/amazon-braket-get-started-with-quantum-computing/ (2019).

  69. 69.

    PyQuil. GitHub https://github.com/rigetti/pyquil

  70. 70.

    Steiger, D. S., Häner, T. & Troyer, M. ProjectQ: an open source software framework for quantum computing. Quantum 2, 49 (2018).

    Google Scholar 

  71. 71.

    ProjectQ. GitHub https://github.com/ProjectQ-Framework/ProjectQ

  72. 72.

    Paykin, J., Rand, R. & Zdancewic, S. Qwire: a core language for quantum circuits. In Proc. 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017 846–858 (AM, 2017); https://doi.org/10.1145/3009837.3009894

  73. 73.

    QWIRE. GitHub https://github.com/inQWIRE/QWIRE

  74. 74.

    Amy, M. & Gheorghiu, V. staq — A full-stack quantum processing toolkit. Quantum Sci. Technol. 5, 034016 (2019).

    ADS  Google Scholar 

  75. 75.

    staq. GitHub https://github.com/softwareQinc/staq

  76. 76.

    Killoran, N. et al. Strawberry fields: a software platform for photonic quantum computing. Quantum 3, 129 (2019).

    Google Scholar 

  77. 77.

    Strawberry Fields. GitHub https://github.com/XanaduAI/strawberryfields

  78. 78.

    Sivarajah, S. et al. \({\rm{t}}| {\rm{ket}}\rangle \): a retargetable compiler for NISQ devices. Quantum Sci. Technol. https://doi.org/10.1088/2058-9565/ab8e92 (2020).

  79. 79.

    \({\rm{t}}| {\rm{ket}}\rangle \). GitHub https://github.com/CQCL/pytket

  80. 80.

    McCaskey, A. J., Lyakh, D. I., Dumitrescu, E. F., Powers, S. S. & Humble, T. S. XACC: a system-level software infrastructure for heterogeneous quantum-classical computing. Preprint at https://arxiv.org/abs/1911.02452 (2019).

  81. 81.

    XACC. GitHub https://github.com/eclipse/xacc

  82. 82.

    QuTiP Documentation; http://qutip.org/documentation.html

  83. 83.

    Johansson, J., Nation, P. & Nori, F. QuTiP: an open-source Python framework for the dynamics of open quantum systems. Comput. Phys. Commun. 183, 1760–1772 (2012).

    ADS  Google Scholar 

  84. 84.

    Johansson, J., Nation, P. & Nori, F. QuTiP 2: a Python framework for the dynamics of open quantum systems. Comput. Phys. Commun. 184, 1234–1240 (2013).

    ADS  Google Scholar 

  85. 85.

    LaRose, R. Overview and comparison of gate level quantum software platforms. Quantum 3, 130 (2019).

    Google Scholar 

  86. 86.

    Mosca, M., Roetteler, M. & Selinger, P. Quantum programming languages (Dagstuhl Seminar 18381). Dagstuhl Rep. 8, 112–132 (2018).

    Google Scholar 

  87. 87.

    Bennett, C. H. et al. Teleporting an unknown quantum state via dual classical and Einstein–Podolsky–Rosen channels. Phys. Rev. Lett. 70, 1895–1899 (1993).

    ADS  MathSciNet  MATH  Google Scholar 

  88. 88.

    Brassard, G., Braunstein, S. & Cleve, R. Teleportation as a quantum computation. Physica D 120, 43–47 (1998).

    ADS  MathSciNet  MATH  Google Scholar 

  89. 89.

    Docker, Inc; http://www.docker.com/

  90. 90.

    Heim, B. Q# 0.6: language features and more. Microsoft https://devblogs.microsoft.com/qsharp/qsharp-06-language-features-and-more/ (2019).

  91. 91.

    Geller, A. Why do we need Q#? Microsoft https://devblogs.microsoft.com/qsharp/why-do-we-need-q/ (2018).

  92. 92.

    Rios, F. & Selinger, P. A categorical model for a quantum circuit description language. In Proc. 14th International Conference on Quantum Physics and Logic, QPL 2017 164–178 (2017); https://doi.org/10.4204/EPTCS.266.11

  93. 93.

    Geller, A. What are qubits? Microsoft https://devblogs.microsoft.com/qsharp/what-are-qubits/ (2019).

  94. 94.

    Language Server Protocol; https://microsoft.github.io/language-server-protocol/

  95. 95.

    Mykhailova, M. & Svore, K. M. Teaching quantum computing through a practical software-driven approach: experience report. In Proc. 51st ACM Technical Symposium on Computer Science Education, SIGCSE ’20 1019–1025 (ACM, 2020); https://doi.org/10.1145/3328778.3366952

  96. 96.

    Q# samples. GitHub https://github.com/microsoft/Quantum

  97. 97.

    Q# libraries. GitHub https://github.com/microsoft/QuantumLibraries

  98. 98.

    Abraham, H. et al. Qiskit: an open-source framework for quantum computing. Zenodo https://doi.org/10.5281/zenodo.2562110 (2019).

  99. 99.

    Cross, A. The IBM Q experience and QISKit open-source quantum computing software. In APS March Meeting Abstracts, 2018, L58.003 (2018).

  100. 100.

    Qiskit/qiskit-aqt-provider. GitHub https://github.com/Qiskit/qiskit-aqt-provider (2020).

  101. 101.

    Qiskit/qiskit-honeywell-provider. GitHub https://github.com/Qiskit/qiskit-honeywell-provider (2020).

  102. 102.

    Asfaw, A. et al. Learn Quantum Computation Using Qiskit https://qiskit.org/

  103. 103.

    Jupyter/jupyter-book. GitHub https://github.com/jupyter/jupyter-book

  104. 104.

    Paetznick, A. & Svore, K. M. Repeat-until-success: non-deterministic decomposition of single-qubit unitaries. Quantum Inf. Comput. 14, 1277–1301 (2014).

    MathSciNet  Google Scholar 

  105. 105.

    Broughton, M. et al. TensorFlow Quantum: a software framework for quantum machine learning. Preprint at https://arxiv.org/abs/2003.02989 (2020).

  106. 106.

    McClean, J. R. et al. OpenFermion: the electronic structure package for quantum computers. Preprint at https://arxiv.org/abs/1710.07629 (2017).

  107. 107.

    Abadi, M. et al. TensorFlow: a system for large-scale machine learning. In 12th USENIX Symposium on Operating Systems Design and Implementation (OSDI 16) 265–283 (2016).

  108. 108.

    Cirq source code remarks. GitHub https://github.com/quantumlib/Cirq/blob/master/cirq/google/engine/engine.py (2018).

  109. 109.

    Green, A. S., Lumsdaine, P. L., Ross, N. J., Selinger, P. & Valiron, B. Quipper: a scalable quantum programming language. In Proc. 34th ACM SIGPLAN Conference on Programming Language Design and Implementation 333–342 (ACM, 2013); https://doi.org/10.1145/2491956.2462177

  110. 110.

    Smith, J. M., Ross, N. J., Selinger, P. & Valiron, B. Quipper: concrete resource estimation in quantum algorithms. Preprint at https://arxiv.org/abs/1412.0625 (2014).

  111. 111.

    Anticoli, L., Piazza, C., Taglialegne, L. & Zuliani, P. Verifying quantum programs: from Quipper to QPMC. Preprint at https://arxiv.org/abs/1708.06312 (2017).

  112. 112.

    Mahmoud, M. Y. & Felty, A. P. Formalization of metatheory of the Quipper quantum programming language in a linear logic. J. Autom. Reason. 63, 967–1002 (2019).

    MathSciNet  MATH  Google Scholar 

  113. 113.

    Ross, N. J. Algebraic and logical methods in quantum computation. Preprint at https://arxiv.org/abs/1510.02198 (2015).

  114. 114.

    Fu, P., Kishida, K., Ross, N. J. & Selinger, P. A tutorial introduction to quantum circuit programming in dependently typed proto-quipper. In Reversible Computation - 12th International Conference, RC 2020, Proceedings (eds Lanese, I. & Mariusz, R.) 153-168 (2020).

  115. 115.

    Childs, A. M., Maslov, D., Nam, Y. S., Ross, N. J. & Su, Y. Toward the first quantum simulation with quantum speedup. Proc. Natl Acad. Sci. USA 115, 9456–9461 (2018).

    MathSciNet  MATH  Google Scholar 

  116. 116.

    Abhari, A. J. et al. Scaffold: Quantum Programming Language Technical Report TR-934-12 (Princeton Univ., 2012).

  117. 117.

    Abhari, A. J. et al. ScaffCC: scalable compilation and analysis of quantum programs. Parallel Comput. 45, 2–17 (2015).

    Google Scholar 

  118. 118.

    Abhari, A. J. et al. ScaffCC User Manual (2018).

  119. 119.

    Soeken, M., Frehse, S., Wille, R. & Drechsler, R. Revkit: a toolkit for reversible circuit design. Multiple Valued Log. Soft Comput. 18, 55–65 (2012).

    Google Scholar 

  120. 120.

    Khammassi, N. QX Quantum Computer Simulator; http://www.quantum-studio.net/

  121. 121.

    Scaffold. GitHub https://github.com/epiqc/ScaffCC

  122. 122.

    Kliuchnikov, V. Wrong QASM output for teleportation circuit. GitHub https://github.com/epiqc/ScaffCC/issues/28 (2018).

  123. 123.

    Javadi-Abhari, A. et al. Optimized surface code communication in superconducting quantum computers. In Proc. 50th Annual IEEE/ACM International Symposium on Microarchitecture, MICRO-50 ’17 692–705 (ACM, 2017); https://doi.org/10.1145/3123939.3123949

  124. 124.

    The Quipper System https://www.mathstat.dal.ca/~selinger/quipper/doc/

Download references

Acknowledgements

The authors thank P. Selinger, J. Ross, A. Javadi-Abhari and M. Martonosi for their input and advice. The authors thank V. Kliuchnikov for discussions and for sharing his perspectives.

Author information

Affiliations

Authors

Contributions

B.H., M.S., S.M. and C.G. researched data for the article. B.H., M.S., M.R., M.T. and K.S. contributed substantially to the discussion of the content. B.H., M.S., S.M., C.G. and A.G. wrote the manuscript. B.H., M.R., A.G. and K.S. reviewed and edited the manuscript before submission.

Corresponding author

Correspondence to Bettina Heim.

Ethics declarations

Competing interests

All authors are employed by Microsoft.

Additional information

Peer review information

Nature Reviews Physics thanks Paul Nation, Mingsheng Ying and the other, anonymous, reviewer(s) for their contribution to the peer review of this work.

Publisher’s note

Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Supplementary information

Glossary

Kraus operators

Operators defined as part of a theorem characterizing the action of completely positive maps.

Toffoli simulator

A simulator capable of simulating the execution of Toffoli gates.

Grover search

Quantum algorithm for searching an unstructured database.

Quantum phase estimation

Quantum algorithm for estimating the eigenphases of an operator.

Side effects

A side effect in programming is an effect that modifies the program state outside the local environment.

Monad

In programming, a monad is a structure that represents computations.

Rights and permissions

Reprints and Permissions

About this article

Verify currency and authenticity via CrossMark

Cite this article

Heim, B., Soeken, M., Marshall, S. et al. Quantum programming languages. Nat Rev Phys 2, 709–722 (2020). https://doi.org/10.1038/s42254-020-00245-7

Download citation

Search

Quick links

Nature Briefing

Sign up for the Nature Briefing newsletter — what matters in science, free to your inbox daily.

Get the most important science stories of the day, free in your inbox. Sign up for Nature Briefing