\documentstyle{article}
\parindent=0pt
\parskip=1.5ex
\textwidth=6.5in
\textheight=10in
\topmargin=-0.3in
\hyphenpenalty=500
\oddsidemargin=0in
\def\Item{\hspace*{0.8em}$\bullet$\hspace{0.8em}}
\def\Q{{\tt Q}}
\begin{document}
\begin{center}\LARGE
The Q Programming Language System
\end{center}

\section{What is Q?}

The Q system has two semi-independent aspects:

\begin{enumerate}
\item 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.

\item 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 {\tt read}, {\tt eval}, {\tt format},
{\tt 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++.
\end{enumerate}

\section{Some Q features}

{\Item} Multiple data types (like Lisp)
  Numbers, vectors, strings, 1st-class functions, ...\\
\Item APL-like vector operations.\\
\Item Abstract generic sequences.
  (Like APL arrays or Smalltalk collections.)
  Sequences can be stored or calculated on demand.\\
\Item Streams computation using lazy memoized vectors.
  Replaces many kinds of loops.\\
\Item Infinite-precision rational arithmetic.\\
\Item Integrated with Unix.  Provides shell features
  (globbing, running programs);  a file is a character
  sequence;  a program is a kind of function.\\
\Item Conveniently mix Q, Common Lisp or Scheme (incomplete
  subsets) with C++.

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

Some documentation is in {\tt pub/Q.doc.tar.Z}, same place.

A snapshot of the Q sources in is {\tt pub/Q.tar.Z}.
Q uses various other GNU packages (readline, gmp, libiberty,
iostream).  These are collected in {\tt pub/Q-misc.tar.Z}.

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

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

We have a low-bandwidth IP connection; please be
considerate and avoid heavy use during the day.
\end{document}
