Q - Equational Programming Language




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 here.


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 q-addons). This 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 ASUS eeePC. (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 version 2.7, which fixes a display refresh bug in the audio_player program with recent GGI versions, and Pd/Q was updated to version 0.4, fixing a deadlock in the asynchronous message passing code. As usual, more information and downloads can be found on the Download page. 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 Download page.

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 Download page.

7 October 2007: The Faust RPMs in the dependencies section have been updated to the latest Faust release,

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 here.

18 August 2007: The packages in the OpenZaurus feed have been updated to Q 7.7. See the README file for details.

30 June 2007: A beta edition of the Q in a Nutshell tutorial is available, and the q-lang wiki has been moved to sf.net.

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 details.

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 Download page.

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 packages.

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 section.

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, of course.

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 well.

16 July 2005: Q-Midi 1.16 has been released. This release fixes a bug in the module finalization code and removes the deprecated mididev.q script.

15 July 2005: The Graph, Q-Faust, Q-Xine and Q-Examples 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 interpreter.

14 July 2005: Q 6.2 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: Q 6.1 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 available here.

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 the Documentation section.

24 October 2004: Q 6.0 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 available here.

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: Q-Synth 1.2 fixes some compatibility issues with recent SuperCollider versions in CVS.

25 September 2004: Q-Audio 2.2 sports an overhaul of the sample rate conversion functions to improve the handling of varying conversion ratios.

24 September 2004: Q-Audio 2.1 has been released. This is a minor update which adds some sample rate conversion functions to the wave module.

21 September 2004: Q-Audio 2.0 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 FFTW3. 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 deps section of the download area.

14 September 2004: Q 5.4 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: Q-Midi 1.15 and Q-Synth 1.0 have been released.

15 April 2004: Q 5.3 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 mentors.debian.net. Thanks!

© 2007 by Albert Gräf