What would be the requirements for programming languages that are used for quantum computers? Do standard procedural languages with their constructs be sufficient, and succinctly capture the computing capabilities of a Quantum Computer? To illustrate, languages such as Assembler would most likely be closest to the hardware, and the programmer programs to the Assemblers' specifications. CSP is an example of specification for concurrent processes. Are there any formalisms such as CSP for quantum computers, or even languages such as Assembly for quantum computers?
-
1$\begingroup$ What do you mean by "specific rules for programming languages"? Please define the term "CSP": in my experience, it stands for "Constraint Satisfaction Problem", which doesn't seem to be what you mean. $\endgroup$– David RicherbyCommented Aug 10, 2014 at 7:43
-
$\begingroup$ @DavidRicherby, I believe this is the CSP OP is referring to. $\endgroup$– Nicholas MancusoCommented Aug 10, 2014 at 17:02
-
$\begingroup$ You might want to have a look at liquid which is one of the few attempts at devising a quantum programming language. There's a talk on it here: channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2014/…. It looks like programming quantum computers in going to draw more from FPGA programming than general purpose languages. $\endgroup$– user1937198Commented Aug 10, 2014 at 23:50
2 Answers
We probably don't yet know enough about the landscape of practical quantum computing devices to lay down the kinds of concrete specifications you're asking for. It also seems to me that there's a big gap between what Assembly Languages and a formalism like CSP brings to the table. So, this question probably has different answers at different levels of hardware and software abstraction.
What all that being said, "A Layered Software Architecture for Quantum Computing Design Tools" by Svore et. al lays out a framework that I believe cuts across what you're getting it. It's simply a proposal though, not a specification per se. The authors do lay out some of the challenges faced when designing quantum computing design tools and programming languages and I think address what you're looking for. The previously mentioned Liquid language seems to be an an attempt and working off this framework.
From what I've seen, quantum programming systems typically to work by providing a universal set of elementary gates for quantum circuits and possibly some higher-level primitives for common quantum algorithm components like the Quantum Fourier Transform. I believe Svore, et. al. refer to this layer as Quantum Assembly. For example, the two-qubit CNot gate and arbitrary single qubit unitaries are universal for quantum computation. The ability to lay out circuits from these primitives would provide you with the ability to express an arbitrary quantum computation.
I'd hesitate to call this assembly in the sense that we know it from classical computing as it corresponds to a set of primitives from a low-level abstract model of quantum computation and not to an abstract or concrete instruction set. Going back to my first comment, it's not clear that we're even sure what kind of quantum instruction set is best at this point.
In terms of the general requirements that a quantum programming language should satisfy, I recommend reading the excellent paper Quantum Computation: from a Programmer's Perspective by Valiron.
The current state of the art for quantum programming languages is Quipper. Its website has plenty of information about it including popular news articles, research papers, documentation and even video. I recommend reading Programming the quantum future.
In the next few years there will be some very exciting developments surrounding Quipper. There is a big research project funded by the US Department of Defense which is aiming to extend Quipper with a dependent type system and in addition there will be work on developing quantum domain theory with the goal of providing Quipper with a denotational semantics and even more!