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