
QCL version 0.3 by Bernhard Oemer <oemer@tph.tuwien.ac.at>
==========================================================


Despite many common concepts with classical computer science, quantum
computing is still widely considered as a special discipline within the
broad field of theoretical physics.  One reason for the slow adoption of
QC by the computer science community is the confusing variety of
formalisms (Dirac notation, matrices, gates, operators, etc.), none of
which has any similarity with classical programming languages, as well
as the rather ``physical'' terminology in most of the available
literature.

QCL (Quantum Computation Language) tries to fill this gap: QCL is a
hight level, architecture independent programming language for quantum
computers, with a syntax derived from classical procedural languages
like C or Pascal.  This allows for the complete implementation and
simulation of quantum algorithms (including classical components) in one
consistent formalism.

This release (qcl-0.3) is the first public alpha release of QCL. If you 
run into any troubles, please let me know (see section 'Feedback' for 
details).


Features:
---------

 -  a classical control language with functions, flow-control,
    interactive i/o and various classical data types (int, real,
    complex, boolean, string)

 -  2 quantum operator types: general unitarian (operator) and
    reversible pseudo-classic gates (qufunct) 

 -  inverse execution, allowing for on-the-fly determination of the
    inverse operator though caching of operator calls

 -  various quantum data types (qubit registers) for compile time
    information on access modes (qureg, quconst, quvoid, quscratch)

 -  convenient functions to manipulate quantum registers (q[n] -
    qubit, q[n:m] - substring, q&p - combined register)

 -  Quantum memory management (quheap) allowing for local quantum
    variables

 -  Transparent integration of Bennet-style scratch space management

 -  Easy adaption to individual sets of elementary operators


Availability:
-------------

QCL has been developed under Linux 2.0 and is tested to compile with 
the GNU C++ compiler g++ version 2.7.2.1. It should - however -
compile under any Unix system with minor modifications (see the
Makefile for details).

The current version of QCL is available from my homepage:

  http://tph.tuwien.ac.at/~oemer/qc/


Documentation:
--------------

At this time, the only available documentation for QCL is my master
thesis in technical physics "A Procedural Formalism for Quantum
Computing". It gives a complete reference to QCL with many examples and
also features a brief introduction into Quantum Computing. Some knowledge
about Quantum Physics and Hilbert Spaces is however required. A more
basic introduction specifically for computing scientists is planned for
some future release of QCL.

The LaTeX source (qcl.tex) can be found in the ./doc directory of the
QCL source distribution. Typing 'make' will produce a Postscript version
(qcl.ps). Please note that the default papersize is A4.  A html version
can be found at 

  http://tph.tuwien.ac.at/~oemer/qc/qcl/qcl.html.


Installation:
-------------

Untar the source package, then cd to the ./qcl directory, edit the Makefile
for your needs and type

  make
  make install

This will, by default, install the binary qcl to /usr/local/bin and the QCL
include files to /usr/local/lib/qcl. To generate the postscript documentation
(doc/qcl.ps), type

  make docs


Feedback:
---------

If you encounter any bugs (since this is the first public release, there are
probably many of them) or miss any particular feature or just like QCL, please
let me know. My email address is

  Bernhard Oemer <oemer@tph.tuwien.ac.at>

The QCL interpreter is Open Source(tm) software, so please feel free to write
your own ports and extentions. If you send me patches, I will most probably
include them in future versions of QCL and maintain them to the best of my
abilities. ;-) Since English isn't my native language, I especially appreciate
any orthographic and grammatical corrections.


Vienna, the 8th of September 1998

Bernhard Oemer


