Q is no longer supported, see Pure instead
Please note that Q has been superseded by the Pure programming language, so please head over to the new website and download the latest version of the Q successor today!
This website remains online so that the final Q version is still available for those who need it. However, we really recommend that you switch to Pure which has many improvements such as LLVM-based JIT compilation to native code, full 64 bit support, lexical closures, built-in list and matrix support and an easy-to-use C interface.
Q is an interpreted, dynamically typed functional programming language
based on term rewriting which allows you to define functions using symbolic
equations. It works on (32 bit) Linux, OS X, Unix and Windows, and comes with a bunch
of useful libraries which turn it into a practical programming tool. The Q
programming system is free software distributed under the GPL.
If you come here for the first time, then you might wish to take a look
at the About and
Documentation sections to learn
more about Q. If you're looking for the software, go right ahead to the Download section. Information about the
Q mailing lists can be found in the Lists
section. Also make sure you visit our
Wiki. Enjoy your stay!
NOTE: This is the new Q website on SourceForge. The
old website (Q versions up to 4.5) is still available
8 June 2008:
- In case you're wondering about
the lack of updates, please head over to the
new Pure website and subscribe
to the Pure mailing list, this is where all the action is now. Pure is a much
improved version of Q, completely rewritten from scratch, with powerful new
features and an LLVM backend which compiles
scripts to fast native code. Pure is slated to eventually become Q's
successor. It is working pretty well already, scripts run a lot (20-30 times)
faster, and interfacing to C is much easier than in Q.
11 March 2008:
Toni Graffy now maintains the SUSE packages for Q at the
Packman repository (look
for q-core and
is a complete set of packages which includes all addons and can easily be
installed with YaST. I have also made available Q packages for the
(If you still haven't heard about this nifty little machine, it is a fairly
low-cost subnotebook running a Debian Linux version.)
Moreover, Q-Audio was updated to
which fixes a display refresh bug in the
audio_player program with
recent GGI versions, and Pd/Q was updated to
fixing a deadlock in the asynchronous message passing code.
As usual, more information and downloads can be found on the
For your convenience, I have also uploaded a
patch which fixes the broken
-inwin option of the X11 target in all
GGI 2.2 releases up to
2.2.2. This is required for X11-based systems, to make GGI applications like
audio_player work which embed GGI windows in GUI applications.
(These changes are also in GGI CVS now, so they should eventually become
available on systems which currently ship broken GGI packages,
such as Debian. You don't have to worry about this if you are still running
GGI 2.1 or the Windows version.)
24 February 2008:
Q 7.11 has been released. The new release sports symbolic XML-style character
escapes in string literals, various improvements and bugfixes in the clib,
system and odbc modules, support for highres timers and timed waits on mutexes
and semaphores on systems which provide that functionality, and Jiri Spitz'
new AVL tree implementation which considerably speeds up the dictionary and
set data structures in the standard library. (Please see the NEWS file for details.) Moreover, the all-in-one package now
includes all the latest versions of the addon packages, as well as Eddie
Rucker's new CSV module for reading and writing comma-separated value data. As
usual, you can grab all the new stuff on the Download page.
23 January 2008:
Q 7.11 RC1 is now available in testing.
Changes besides the XML-style symbolic character escapes (see below) are that
the clib module has some new operations providing read/write access to C
vectors represented as byte strings, and the glob and regex operations have
been moved back into the clib module.
17 January 2008:
A new cvs snapshot is now available in testing, which features symbolic
character escapes in strings following the 2007-12-14 W3C Working Draft "XML Entity
definitions for Characters", as discussed on the Q mailing list. I also
took the opportunity to update the Unicode character properties (used for
character type predicates like
isalnum) to the latest from ICU
3.8. The snapshot is available here.
18 December 2007:
Q 7.10 has been released (sporting some minor bugfixes in the clib module), and
openSUSE 10.3 packages are now available. The OpenZaurus feed has also been
updated to the latest version. On the Download
page you can find additional notes about the availability of Q packages from
the Fedora and MacPorts projects.
15 December 2007:
Q-OpenAL 1.4 is now available, which sports some minor fixes for compatibility
with OpenAL 1.1.
8 December 2007:
Q 7.9 has been released. This is a bugfix release. We also proudly
present the initial release of QCalc,
a spreadsheet-like frontend to the Q interpreter (this is now also included
in the all-in-one RPM package for Linux, but isn't available for Windows yet).
As usual, you can grab all the new stuff on the
10 November 2007:
Qt/Q 1.2 has been released. This is a bugfix release, upgrading is
recommended. Please note that this version needs the latest Q from cvs and the
latest Q-SWIG package (1.3.22-q-20071021).
I have also uploaded new RPMs (q-7.8-6) for the all-in-one package which
contain the latest Qt/Q as well as all recent bugfixes to the Q 7.8 core
package from cvs. The new stuff is now also available on the Download page.
18 October 2007:
Q 7.8 has been released. This is a recommended upgrade for anyone who is
currently running Q 7.7. The new release sports several important bugfixes and
some nice new features, see the NEWS file for details. For
Linux systems, the "all-in-one" package now includes the new ncurses and Qt/Q
modules, as well as the multimedia examples and the Pd/Q plugin. Windows users
should note that the ncurses and Qt/Q modules and the Pd/Q plugin have not been
ported to Windows yet; these will be announced here as soon as they become
available. As usual, you can grab all the good new stuff on the
7 October 2007:
The Faust RPMs in the dependencies section have been updated to
the latest Faust release, 0.9.9.2.
6 October 2007:
The second release candidate for Q 7.8 is now available here. (The
first release candidate was already released a couple of days ago.) Both
source tarballs and binary "all-in-one" packages in RPM format are
provided. The all-in-one package now also includes the Pd/Q plugin, the
multimedia examples, and the new ncurses and Qt/Q modules. This is a
recommended upgrade for anyone who is currently running Q 7.7, as it also
fixes some rather annoying bugs in the 7.7 version. Update 10/07/07: New
RPMs are now available which also include the latest faust2pd and faust2sc
scripts and minor fixes in the qfsynth package.
23 September 2007:
Qt/Q, a complete wrapper for Trolltech's popular GUI toolkit Qt based on SmokeQt is now available in
cvs. This will hopefully see an official release and be included in the
all-in-one packages when the next Q version comes out. The QMidiCC script has
already been ported to Qt/Q, you can find the latest version of this program
18 August 2007:
The packages in the OpenZaurus feed have
been updated to Q 7.7. See the README file
30 June 2007:
A beta edition of the Q in
a Nutshell tutorial is available, and the q-lang wiki has been moved to
11 June 2007:
At long last, Q 7.7 is out.
Get it on the Download page while it's
hot. Besides a lot of bugfixes, this release sports quite a few notable
changes, mostly in response to various discussions, suggestions and feature
requests from the Q mailing list, see the NEWS file for
details. This release also goes along with quite a few updates of the addon
modules. All the latest stuff is contained in the 7.7 "all-in-one" package
(available, as usual, in both RPM and MSI format), which now also includes the
latest and greatest version of Rob Hubbard's polynomial library Q[i][X].
30 March 2007:
The latest snapshot of Rob Hubbard's complex rational polynomial library
"Q[i][X]" is now available in the "Grab Bag" section of the Examples page: qix-0.4.tar.gz.
11 February 2007:
We now have a wiki over at
wikispaces.com. Please see the Documentation
page for more information.
20 December 2006:
The latest bugfix release, Q 7.6, is now available. Grab it on the Download page. This release is now also
available for Zaurus PDAs in the OpenZaurus feed.
24 November 2006:
I have uploaded Rob Hubbard's latest version, 0.9.2, of the Q+Q rational number
library which features bugfixes and improved documentation. This will become
part of the Q package with the next release; for the time being you can
download the new release here: q+q-0.9.2.tar.gz.
Rob has also kindly contributed a first public release of his new complex
rational polynomial library "Q[i][X]" which, for now, is available in the "Grab
Bag" section of the Examples page: qix-0.2.tar.gz.
1 November 2006:
Just in time for next week's ICMC,
I've made available some more examples for
the Pd/Q interface, as well as the new faust2pd package which makes it easy to
use Faust DSPs with Pd. See the
Multimedia Examples section for
29 September 2006:
John Cowan has released his egg (Chicken Scheme library) which makes available
the facilities of the Q language to Chicken programmers. Chicken is a
compiler for the Scheme programming language. The Q egg is currently
available here but
should soon show up in Chicken's standard egg repository. Update: The Q
egg is now available here.
12 September 2006:
Q 7.5 is another bugfix release of the Q interpreter which fixes some bugs in
the C interface. We also proudly present the initial release of
"pd-qext", a Q plugin for Miller Puckette's Pd, see the Multimedia Examples section for details. As
usual, all the latest packages are available from the Download page.
3 September 2006:
SuSE 10.1 packages are now available from the
Download page, and the Faust packages have been
updated to release 0.9.8.
30 August 2006:
Q 7.4 is the latest bugfix release of the Q interpreter. Also now available: Q
Yacc/Lex 0.9, a Q version of the well-known compiler generator tools. As usual,
all the latest packages are available from the
21 August 2006:
Q 7.3 is now available, which fixes a critical bug related to the new
memoization feature introduced in Q 7.1. Some other bugs in compiler and
interpreter were also fixed. If you are currently running Q 7.1 or 7.2,
upgrading is strongly recommended. See the release
notes for details and the Download page for the
29 June 2006:
Q 7.2 is now available, featuring a complete revision of Q's "numeric tower"
which integrates Rob Hubbard's rational number library and adds proper support
for IEEE floating point INF and NaN values. Moreover, the new version supports
custom pretty-printing of
user-defined, built-in and external data types. See the release
notes for details and the Download page for the
latest packages. Documentation for the rational number library can now be found
on the Documentation page.
12 June 2006:
Q 7.1 has finally been released, along with updated versions of the add-on
modules. The new release sports quite a few important bugfixes, optimizations
and new features (like special syntax for streams, comprehensions and lambdas,
and general improvements in the implementation of special forms). See the release
notes for details, and make sure that you get your free copy on the Download page today! :)
12 June 2006:
Rob Hubbard's new rational number module is now available from the Examples page. The package also includes extensive
documentation in pdf format. Thanks, Rob, for this very useful contribution.
13 May 2006:
A release candidate for Q 7.1 is now available in the download
area, and the Examples page has been updated.
24 April 2006:
The 4th International Linux Audio Conference
(LAC 2006) will open its doors at the ZKM
on Thursday, April 27th 2006. Materials for my joint presentation with Yann
Orlarey and Stefan Kersten about Q, Faust and SuperCollider are now available
in the Documentation
22 March 2006:
Q 7.0 has been released, along with updated versions of the add-on modules. As
usual, you can grab the new packages on the Download page. Note that all binaries are now
distributed in a single "all-in-one" package, which also includes all the
add-on modules. When upgrading from a previous binary release, you should
first remove the old packages.
18 February 2006:
Q 7.0 RC2 is out, featuring quite a few bugfixes and improvements. Thanks to
John Cowan's help this version now builds cleanly with Cygwin, too.
6 February 2006:
A first candidate for the upcoming Q 7.0 release is now available. The new
release sports unicode and internationalization support, and
also includes a new Q GUI builder based on Peter
G. Baum's Gnocl (a very nice Tcl extension
for programming GNOME/GTK+ applications with Tcl). More information can be
found in the release
notes. Bug reports are welcome,
6 December 2005:
The Faust RPMs in the deps
section have been updated to 0.9.6. A new Q-Faust release (1.2)
goes along with this. (Please note that, after installing these, you'll also
have to recompile your DSP sources, as the new DSP data structure is not
binary-compatible with Faust 0.9.5.) As usual, you can also grab the new
packages on the Download page.
5 December 2005:
All packages have been updated for SuSE 10.0, and new releases are available
for SuperCollider (CVS 2005-11-10) and Faust (0.9.5). Moreover, bugfix
releases of Q (6.2-3) and Q-Faust (1.1-2, source and binary RPMs) have been
uploaded. As usual, you can get all the good new stuff from the Download page. Please also note that I currently have
no means to update the Fedora packages, so these are not listed on the
Download page any longer. (You can still find the old FC1 packages in the download
area, though, and I'll upload new Fedora packages as soon as I get around
installing the latest FC release. In the meantime, if anyone can help
providing up-to-date packages from some reasonably recent FC release, please
let me know.)
13 November 2005:
The initial release of Q-SQLite3
is now available. SQLite is a lightweight,
zero-config SQL database engine which stores databases in single files. The
module supports most of the SQLite3 API, including user-defined SQL functions
and collation sequences. A simple example is included in the package.
21 October 2005:
I have added a few alternative binary packages for Zaurus users running pdaXrom. This version has more features than
the current OpenZaurus implementation, as I was able to also port the
X11-dependent modules. More details can be found on the Download page.
2 September 2005:
Packages for the Sharp Zaurus PDA have been released. These have been built
and tested on OpenZaurus 3.5.3 running on a
Zaurus SL 5500 ("Collie"). Please let me know whether they work on other,
similar platforms, too. More details on the Download page.
22 July 2005:
The GGI rpms in the deps section have been updated to the
latest stable release from the GGI project, libgii 0.9.1/libggi
2.1.1. These are drop-in replacements for the older libgii 0.8.6/libggi 2.0.6
versions. The GGI libraries are required for the
ggi module in
the core distribution.
20 July 2005:
The initial release of Q-OpenAL is now available. This is a
companion module to Q-OpenGL which lets you add spatialized sound to your
applications. A new bugfix release of Q-OpenGL is available as
16 July 2005:
1.16 has been released. This release fixes a bug in the module
finalization code and removes the deprecated
15 July 2005:
packages have been updated. You'll need to upgrade to these versions if you
are running Q 6.2 (or later). All other packages work fine with the latest
14 July 2005:
has been released.
This release finishes off the revision of the tuple syntax begun in Q 6.1 (see
below), and adds user-defined operators.
The release notes are available here.
11 July 2005:
has been released.
This release sports some bug fixes, a new Haskell'ish infix application
operator (as suggested by Tim Haynes) and a revision of the list/tuple syntax
(as suggested by John Cowan).
For further information please have a look at the release notes which are
1 July 2005:
An RPM package containing all the multimedia example applications
(qaudioplayer, qmidicc, qmidiplayer, qscsynth, qfsynth) is now available. See
the Examples section on the Download page.
27 June 2005:
At long last, Q-Faust
1.0 has been released. This module allows you to load and run audio DSPs
created with Faust, Yann Olarey's
functional programming language for real-time sound processing and
synthesis. Please also check out QFSynth, a Faust-based realtime software
synth application with Qt GUI, available on the Examples page.
27 June 2005:
Two new members of Q's multimedia library, which have been available in cvs
for some time now, have finally been released: Q-OpenGL
1.0 and Q-Xine
1.0. As you might have guessed, these modules provide interfaces to the
well-known 3D graphics toolkit and the
popular media player, respectively.
25 June 2005:
New versions of Q-Audio (2.3) and Q-Synth (1.4) have been released, and SuSE
9.3 packages can now be found in the Download section.
15 April 2005:
Next week Q will be presented at the 3rd International Linux Audio Conference
(LAC 2005). My talk will be mostly
about Q's multimedia interface (which now also comprises yet unreleased OpenGL
and Xine modules; please check out CVS for those!). If
you're interested in Q and/or Linux audio and music applications and have the
opportunity to come to Karlsruhe I hope to meet you there! (The conference is
free. A registration form is provided at the conference website.) Update
04-25-2005: Ok, the conference is over and we all had a really good time
there. For those of you who couldn't be there I put a copy of my paper into
24 October 2004:
has been released.
This release adds SWIG support to the Q programming system. This is an
important milestone in the development of the Q programming system, as it
makes interfacing to existing C and C++ libraries much easier.
More information about SWIG is available at http://www.swig.org.
To use SWIG with Q you'll also need a SWIG version which has been patched up
to add support for the Q language. Until the Q language module becomes part of
the official SWIG distribution, a suitable SWIG package can be found here.
For further information please have a look at the release notes which are
3 October 2004:
Q 5.5 and Q-Synth 1.3
have been released. These are minor updates featuring various bug and Windows
compatibility fixes. The Qpad package now includes the latest GGI from CVS,
and a Windows version of the Q-Synth package is now also available.
27 September 2004:
The initial release of the
Q multimedia examples
is now available. These programs demonstrate the capabilities of Q's
multimedia library, and also show how to embed a Q application in a KDE/Qt GUI
written in C++. An experimental version of a new Q-DCOP module is now also
available. A description of these programs can be found on the Examples page.
26 September 2004:
fixes some compatibility issues with recent SuperCollider versions in CVS.
25 September 2004:
sports an overhaul of the sample rate conversion functions to improve the
handling of varying conversion ratios.
24 September 2004:
has been released. This is a minor update which adds some sample rate
conversion functions to the wave module.
21 September 2004:
and Q-Synth 1.1
have been released. Q-Audio 2.0 is a major update, which now supports ALSA and
Jack via PortAudio v19, and also adds Fourier transform operations via
Q-Synth 1.1 is only a minor update which fixes some bugs in the SuperCollider
synth definitions and adds support for Q-Audio 2.0 (you'll need to update this
package, too, when you upgrade to Q-Audio 2.0).
Moreover, RPMs for PortAudio v19 (required for Q-Audio 2.0) and SuperCollider
(required for Q-Synth 1.1, if you want to work with the SC interface) are now
available in the
section of the download area.
14 September 2004:
has been released. This release adds a libxml2/libxslt interface, a new
profiling command in the interpreter (try help profile for more
information), and a few bug fixes and updates for third-party software (see
the ChangeLog for details). As you probably noticed, I also revamped the
entire website to make it more accessible. It now uses XML, stylesheets and
whatnot to ease maintenance. Hope you like it!
15+16 May 2004:
and Q-Synth 1.0
have been released.
15 April 2004:
has been released. This is another minor update with some bug fixes and a new
built-in function composition operator.
7 March 2004:
Kari Pahula has provided Debian packages for Q 5.2 on