Q - Equational Programming Language




Core Modules

These modules are distributed with the core package. They provide Q's basic system, database, GUI, graphics, scientific and web programming interfaces.

Module: Clib
Synopsis: import system;
Description: Clib is Q's POSIX system interface. Note that as of Q 7.8, this interface is actually divided into two modules, clib which contains the basic functions including the C-style formatted I/O routines, threads, references, filename globbing, regular expression routines and more efficient replacements for some important standard library functions, and system which provides the rest of the POSIX interface, like lowlevel I/O, process management, BSD sockets and internationalization functions. The clib module is part of the standard prelude and thus imported automatically, while system must be imported explicitly.
Requires: These modules should work on all supported platforms. However, many system functions require a more or less POSIX-compatible system environment to work as advertized. Note that no attempt is made to emulate more advanced functionality on systems which do not directly support it, like, e.g., fork or exec on Windows.

Module: Curl
Synopsis: import curl;
Description: This module provides a uniform way to transfer files with URL syntax using a variety of different Internet protocols.
Requires: Libcurl (http://curl.haxx.se).

Module: DXL
Synopsis: import dxl;
Description: This module provides an interface to Open Data Explorer (DX), IBM's comprehensive data visualization software. It utilizes the DXLink API which allows you to connect to the DX executive and user interface, and execute commands, macros and visual programs written in the DX scripting language.
Requires: OpenDX (http://www.opendx.org). OpenDX in turn requires an X11/Motif environment, thus this module is not supported on Windows right now (at least there is no straightforward way to make it work).

Module: Gdbm
Synopsis: import gdbm;
Description: GNU dbm provides some simple database functions, suitable for storing indexed data in a file. The interface provided by this module is a straightforward wrapper for (most of) the C functions provided by the library; see gdbm(3) for more information.
Requires: Libgdbm (http://www.gnu.org).

Module: GGI
Synopsis: import ggi;
Description: This module provides an interface to GGI, the General Graphics Interface. GGI is a graphics library which aims to provide a reliable, stable and fast graphics system that works everywhere. Only the basic operations of GGI are supported at this time; future releases will probably add the more advanced features and extensions when these parts of GGI become stable. But the module is already quite usable for doing raster graphics on a wide variety of systems and output devices. Experimental support for simple alpha blending as well as advanced text rendering via FreeType2 is also available.
Requires: Libggi (version 2.0 or later) and libgii (version 0.8 or later), available from http://www.ggi-project.org. (Note that all GGI 2.2 releases up to 2.2.2 have a bug breaking the -inwin option of the X11 target, which is needed to embed GGI windows inside GUI applications. A patch fixing this can be found here.) For the additional font support you also need version 2 of the FreeType library (http://www.freetype.org).

Module: Magick
Synopsis: import magick;
Description: This module provides an interface to the ImageMagick C API (libMagick), a comprehensive library for image manipulation. With this module, you can create, load, save and manipulate images stored in a plethora of different file formats. Operations to retrieve and modify the pixel data of an image are also provided. Since the external pixel representation is compatible with that of the GGI module, you can easily exchange pixel data between images and GGI visuals as well.
Requires: ImageMagick (http://www.imagemagick.org).

Module: Octave
Synopsis: import octave;
Description: Octave is a comprehensive MATLAB-like software for performing advanced numeric computations. This module provides an interface to the Octave interpreter, which enables you to execute Octave commands and exchange variable values between Q and Octave.
Requires: Octave (http://www.octave.org).

Module: ODBC
Synopsis: import odbc;
Description: This module provides the necessary operations to connect to an ODBC data source and retrieve or modify data using SQL statements. ODBC (Open Database Connectivity) is the industry standard for portable and vendor independent database access. Besides Microsoft's original version for Windows, several implementations exist for different platforms, including two open source implementations for Unix-like systems, iODBC and unixODBC. Most modern relational databases provide an ODBC interface so that they can be used with this module. This includes the popular open source DBMSs MySQL (http://www.mysql.com) and PostgreSQL (http://www.postgresql.org).
Requires: To make this module work, you must have an ODBC installation on your system, as well as the driver backend for the DBMS you want to use (and, of course, the DBMS itself). You also have to configure the DBMS as a data source for the ODBC system. On Windows this is done with the ODBC applet in the system control panel. For iODBC and unixODBC you can either edit the corresponding configuration files (/etc/odbc.ini and/or ~/.odbc.ini) by hand, or use one of the available graphical setup tools. More information about the setup process can be found on the iODBC and unixODBC websites.

Module: SWIG
Synopsis: import swig;
Description: This module implements the necessary runtime support for SWIG-generated Q modules. SWIG is the "Simplified Wrapper and Interface Generator" which makes it easy to interface to existing C/C++ code from various target languages. More information about SWIG can be found at http://www.swig.org.
Requires: 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 for SWIG becomes part of the official SWIG distribution, a suitable SWIG package can be found on the Download page.

Module: Tk
Synopsis: import tk;
Description: This module provides a basic interface to Tcl/Tk, John Ousterhout's cross-platform command language and GUI toolkit. The operations of this module allow you to execute arbitrary commands in the Tcl/Tk interpreter, set and retrieve variable values in the interpreter, and send back messages from Tcl/Tk to Q. You can use this module to create functional (if not fancy) GUIs which work on a variety of different platforms including Unix/X11, Mac OS X and Windows. A bridge to GNOME/GTK is also available, see the description of the "GQBuilder" package on the "Add-Ons" page.
Requires: A recent version of Tcl/Tk is required (8.0 or later should do). You can get this from http://www.tcl.tk. Both releases in source form and binary releases for Windows and various Unix systems are provided there.

Module: XML
Synopsis: import xml;
Description: This module is Q's XML/XSLT interface, based on the libxml2/libxslt libraries from the GNOME project. It provides an XML parser and XSLT transformation engine, as well as the ability to inspect and modify XML document trees in memory. XML is the Extensible Markup Language, facilitating exchange of complex structured data between different applications and systems. XSLT allows you to transform XML documents to other XML-based formats such as HTML. Together XML and XSLT let you create dynamic web content with ease. Both XML and XSLT are open standards by the W3C consortium (http://www.w3.org).
Requires: Libxml2 and libxslt, both available from http://xmlsoft.org.

© 2007 by Albert Gräf