The Q Programming Language System
---------------------------------

WHAT IS Q?
----------

The Q system has two semi-independent aspects:

1) A new very high-level programming language.
Where APL uses arrays to avoid explicit looping, Q uses
generalized sequences (finite or infinite, stored or
calculated on demand).  Q has lexical scoping, and some
support for logical and constraint programming.  Q can
be compiled (into C++), or interpreted interactively.
The syntax was designed to make it a convenient interactive
command language.  A macro facility together with primitives
to run programs is used to make an interactive command
language with full shell features.

2) A common run-time system for very-high-level languages.
It is written in C++, and consists of a hierarchical
set of classes for representing numbers (including
infinite-precision rationals), functional
closures, collections, files, symbols, and so on.
There are also functions that implement Common Lisp and
Scheme functionality, such as READ, EVAL, FORMAT,
COMPILE-FILE (compiles much of Common Lisp into C++),
packages, arrays, and more.  With some help, this
could be made into a portable, efficient, free Lisp system
with exceptional integration between Lisp and C++.


Q FEATURES
----------

* Interactive language:
	Q1> 3+4  # User input, followed by output
	7

* Multiple data types (like Lisp)
  Numbers, vectors, strings, 1st-class functions, ...

* APL-like vector operations:
	Q2> (1 upto 4) + [40 30 20 10]
	41 32 23 14

* Abstract generic sequences.
  (Like APL arrays or Smalltalk collections.)
  Sequences can be stored or calculated on demand.

* Streams computation using lazy memoized vectors.
  Replaces many kinds of loops.

* Infinite-precision rational arithmetic:
	Q3> (4/6)**25
	33554432/847288609443

* Integrated with Unix.  Provides shell features
  (globbing, running programs);  a file is a character
  sequence;  a program is a kind of function.

* Conveniently mix Q, Common Lisp or Scheme (incomplete
  subsets) with C++.

HOW TO GET IT
--------------

Q is not ready for general use, but hackers interested
in experimenting with it should check pub/Q.README
(this file) using anonymous ftp from ftp.cygnus.com
for current instructions.

Some documentation is in pub/Q.doc.tar.gz, same place.

A snapshot of the Q sources in is pub/Q.tar.gz.
Q uses various other GNU packages (readline, gmp, gc).
These are collected in pub/Q-misc.tar.gz.

Q has only been compiled with g++ 2.0 lately;
there might be difficulties with other compilers.

If you actually do get the sources, you should probably
contact Per Bothner (bothner@cygnus.com).

