% Copyright 2005-2017 Cisco Systems, Inc.
% 
% Licensed under the Apache License, Version 2.0 (the "License");
% you may not use this file except in compliance with the License.
% You may obtain a copy of the License at
% 
% http://www.apache.org/licenses/LICENSE-2.0
% 
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS,
% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
% See the License for the specific language governing permissions and
% limitations under the License.
\chapter{Preface}

{\ChezScheme} is both a general-purpose programming language and
an implementation of that language, with supporting tools and
documentation.
As a superset of the language described in the Revised$^6$ Report
on Scheme (R6RS), {\ChezScheme} supports all standard features of
Scheme, including first-class procedures, proper treatment of tail
calls, continuations, user-defined records, libraries, exceptions,
and hygienic macro expansion.
{\ChezScheme} supports numerous non-R6RS features.
A few of these are local and top-level modules,
local import, foreign datatypes and procedures, nonblocking I/O,
an interactive top-level, compile-time values and properties,
pretty-printing, and formatted output.

The implementation includes a compiler that generates native code
for each processor upon which it runs along with a run-time system
that provides automatic storage management, foreign-language
interfaces, source-level debugging, profiling support, and an
extensive run-time library.

The threaded versions of {\ChezScheme} support native threads, allowing
Scheme programs to take advantage of multiprocessor or multiple-core
systems. 
Nonthreaded versions are also available and are faster for
single-threaded applications.
Both 32-bit and 64-bit versions are available for some platforms.
The 64-bit versions support larger heaps, while the 32-bit versions
are faster for some applications.

{\ChezScheme}'s interactive programming system includes an expression
editor that, like many shells, supports command-line editing, a history
mechanism, and command completion.
Unlike most shells that support command-line editing, the expression
editor properly supports multiline expressions.

{\ChezScheme} is intended to be as reliable and efficient as possible,
with reliability taking precedence over efficiency if necessary.
Reliability means behaving as designed and documented.
While a {\ChezScheme} program can always fail to work properly
because of a bug in the program, it should never fail because of a
bug in the {\ChezScheme} implementation.
Efficiency means performing at a high level, consuming minimal CPU
time and memory.
Performance should be balanced across features, across run time and
compile time, and across programs and data of different sizes.
These principles guide {\ChezScheme} language and tool design as
well as choice of implementation technique; for example, a language
feature or debugging hook might not exist in {\ChezScheme} because
its presence would reduce reliability, efficiency, or both.

The compiler has been rewritten for Version~9 and generates
substantially faster code than the earlier compiler at the cost of
greater compile time.
This is the primary difference between Versions~8 and~9.

This book (CSUG) is a companion to \emph{The Scheme Programming
Language, 4th Edition} (TSPL4).
TSPL4 serves as an introduction to and reference for R6RS, while
CSUG describes {\ChezScheme} features and tools that are not part
of R6RS.
For the reader's convenience, the summary of forms and index at the back
of this book contain entries from both books, with each entry from TSPL4
marked with a ``t'' in front of its page number.
In the online version, the page numbers given in the summary of forms and
index double as direct links into one of the documents or the other.

Additional documentation for {\ChezScheme} includes release notes, a
manual page, and a number of published papers and articles that describe
various aspects of the system's design and implementation.

Thank you for using {\ChezScheme}.
