% 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}.