Fact-checked by Grok 2 weeks ago

Chez Scheme

Chez Scheme is both a programming language and an implementation of that language, serving as a dialect of Scheme that extends the Revised6 Report on the Algorithmic Language Scheme (R6RS) with numerous additional features and tools. Developed by R. Kent Dybvig, it emphasizes high performance through an incremental optimizing compiler that generates native machine code on-the-fly, supporting platforms such as x86-64, ARM64, PowerPC, and others. The system includes a runtime with generational garbage collection, a programming environment featuring an interactive REPL, source-level debugger, and profiler, as well as facilities for interfacing with C and multi-threaded execution across multiple cores. Initiated in 1985 as part of Dybvig's work at Indiana University, Chez Scheme evolved from early versions focused on efficient implementation of Scheme's core features like first-class procedures, continuations, and tail calls. It was commercialized through Cadence Research Systems, which was acquired by Cisco Systems on December 16, 2011, after which development continued under Cisco until the project was open-sourced in 2016 under the Apache 2.0 license. The open-source release, hosted on GitHub, has facilitated broader adoption and contributions, including its use as an alternative backend (Racket CS) for the Racket programming language starting in version 7.9 (November 2020), becoming the default primary backend in version 8.0 (February 2021). Key strengths of Chez Scheme include its support for whole-program optimization, non-blocking I/O, and foreign-function interfaces, making it suitable for , scripting, and research in programming languages. Documentation is provided through resources like The Scheme Programming Language (4th edition) and the Chez Scheme User's Guide, which detail its extensions beyond R6RS, such as Unicode support, , and a module system. As of 2025, the project remains actively maintained by , with recent releases incorporating improvements in portability and performance, with the latest release being version 10.3.0 on October 29, 2025.

Overview

Description

Chez Scheme is a programming language, specifically a dialect of the Scheme programming language, which itself belongs to the Lisp family of languages. It serves as both the language definition and its primary reference implementation, providing a complete environment for developing and executing Scheme programs. At its core, Chez Scheme functions as an incremental native-code compiler that generates optimized machine code for Scheme programs, enabling efficient compilation either on-the-fly during interactive sessions or ahead-of-time for larger applications. This design supports rapid development cycles while delivering high performance for production use. The implementation includes a suite of supporting tools, such as a source-level , profiling capabilities, memory inspection utilities, and an interactive REPL shell known as the . Chez Scheme is largely compliant with the R6RS standard, with some deviations in versions 10 and later, and provides partial support for R7RS features, with ongoing efforts to improve compatibility. As of version 10.3.0 (October 2025), it includes support for portable and limited platforms, enhancing portability. Since 2016, it has been released as under the 2.0, hosted by on .

Key Characteristics

Chez Scheme emphasizes native-code , generating optimized directly for the target architecture, which enables high performance in both interactive development and standalone applications. This approach allows for on-the-fly of during interactive sessions or precompilation into efficient executables, contributing to low-latency startup times for compiled programs by avoiding interpretation overhead at runtime. As a mostly compliant of the Revised^6 on (R6RS) with some deviations, Chez Scheme provides support for core Scheme features such as first-class procedures, tail calls, continuations, records, libraries, exceptions, and hygienic macros, while maintaining with earlier standards like R5RS through compatibility modes and libraries. It incorporates tailored extensions beyond these standards, including enhanced syntax for scripting and support, and partial alignment with R7RS-small, though full R7RS-large is not native. Chez Scheme exhibits strong portability, supporting a range of architectures including x86 (both 32-bit and 64-bit), (including ), and PowerPC (such as ppc32le), as well as emerging platforms like (RV64G) and LoongArch64. Its bootstrapping capabilities allow the system to be built from source using an existing Chez Scheme compiler, facilitating cross-compilation and maintenance across diverse environments without reliance on external tools. The implementation integrates a robust read-eval-print loop (REPL), known as the "," which supports multiline expression editing, command history, and customizable key bindings for efficient interactive development. Debugging features include source-level inspection via a debug handler that displays stacks upon interruptions (e.g., via ^C), along with built-in tools to analyze execution time and identify bottlenecks. Chez Scheme is designed with in mind, where most , including memory allocation and garbage collection operations, can be invoked concurrently from multiple without corruption. It provides a native system supporting concurrent execution across multiple cores, including for creation, via locks and conditions, and thread-safe parameters with per- values to manage shared safely.

History and Development

Origins

Chez Scheme was created by R. Kent Dybvig in 1985 at as a research project originating from his earlier work on implementations. The first version, documented in the Chez Scheme Reference Manual, Version 1.0 co-authored with Bruce T. Smith, was released in May 1985 under the auspices of Cadence Research Systems in . The initial goals centered on developing a high-performance Scheme system emphasizing compilation techniques and optimizations to enable practical, real-world applications beyond academic experimentation. Dybvig aimed for an efficient and portable implementation that could deliver robust performance while adhering to Scheme standards, addressing limitations in contemporary Lisp and Scheme systems of the era. Early releases marked the transition from an academic prototype to a commercial product under Research Systems, which published subsequent manuals including the Chez Scheme System Manual in August 1989 and its Revision 2.0 in December 1990 from . Key innovations during this foundational phase included incremental compilation, which allowed for rapid recompilation of modified code without rebuilding the entire system, and a portable designed to support cross-platform deployment.

Milestones and Releases

Chez Scheme's development saw significant milestones beginning with its adoption of the Revised^6 Report on (R6RS) standard. Version 7.9.1, released in 2007, introduced initial support for R6RS, marking a major step toward standardization while retaining Chez Scheme's extensions for performance and usability. Full R6RS compliance was achieved in subsequent minor releases, such as version 7.9.3, enabling broader compatibility with the Scheme ecosystem. In December 2011, Cisco Systems acquired Cadence Research Systems, the company behind Chez Scheme, integrating it into 's operations for internal use in networking and systems software. This acquisition shifted development to a proprietary model under , with R. Kent Dybvig, Chez Scheme's creator, joining the company to continue maintenance. Following years of internal enhancements, open-sourced Chez Scheme in April 2016 under the Apache License 2.0, releasing version 9.4 as the initial public version on . This move facilitated community contributions and wider adoption, while preserving 's hosting of the repository. Post-open-sourcing, development transitioned toward , with Dybvig serving as the lead maintainer alongside contributions from users and integrators like the . Key releases highlighted ongoing evolution: version 9.5, starting in late 2021 and refined through 2022, improved handling, including support for the Basic Multilingual Plane in console I/O on Windows and enhanced string operations. Version 10.0, released in February 2024, added features like 15.1 support, new platforms (, RV64G, LoongArch64), and compiler optimizations such as floating-point unboxing. The most recent stable release, version 10.3.0 on October 29, 2025, focused on refinements including ARM64 () performance improvements, bug fixes for threading and garbage collection, and platform-specific enhancements for stability across supported architectures. These updates underscore Chez Scheme's continued relevance in , with the project maintaining active development through community input on .

Implementation

Compiler Design

Chez Scheme employs an incremental that translates into native via , enabling during interactive sessions or file loading. This approach allows source forms to be compiled as they are encountered, facilitating rapid development and evaluation, while batch modes support precompilation of files into object files for faster subsequent loading. The is structured as a whole-program optimizer when invoked via compile-whole-program, which processes an entire top-level program or library set to enable cross-unit optimizations and produce a single binary output. The compilation process operates in two phases: an initial phase converts to an (IR) through and expansion into a core language, followed by a second phase that applies optimizations and generates . Key optimizations in the second phase include closure conversion, which transforms higher-order functions into explicit data structures for efficient representation, and , which hoists nested procedures to top-level to reduce closure overhead and enable better inlining. These transformations are implemented within the nanopass framework, a modular system of small, composable passes that progressively refine the IR. The integrates seamlessly with the , providing generational collection that reclaims memory in a precise, copying manner across a static generation and up to 255 nonstatic generations to minimize pause times for long-running applications. It also supports comprehensive , extending R6RS mechanisms with formatted error reporting, condition types like &warning and &assertion, and customizable handlers via guard and raise for robust error recovery. is facilitated through load-shared-object, allowing runtime incorporation of shared libraries and foreign procedures without recompilation. Chez Scheme is a self-hosting implementation, with its compiler written predominantly in Scheme and bootstrapped using tools like make-boot-file to generate initial boot files from a minimal kernel such as petite.boot. This process supports compilation across multiple architectures, including x86-64, ARM, and PowerPC, by leveraging platform-specific assembly generation. Cross-compilation is enabled for libraries and programs, permitting builds for target platforms from a host system via improved support in versions 9.1 and later. For standalone executables, static linking combines compiled object files and runtime components into a single binary using compile-whole-program and boot file concatenation, eliminating external dependencies.

Supported Platforms

Chez Scheme primarily supports 64-bit architectures, with a focus on , (64-bit ), (64-bit ), and LoongArch64, alongside 32-bit options such as x86, v6, v7, and PowerPC32. Earlier versions also included support for and additional PowerPC variants. The implementation runs on a range of operating systems, including (with support for x86, , v6, , , LoongArch64, and PowerPC32), macOS (x86, , , and PowerPC32), Windows (x86, , and ), and various Unix-like systems such as , , , , and . Limited support extends to mobile environments like (v7 and ) and (), primarily through native compilation on select machine types, though full mobile integration is not emphasized. Bytecode interpretation enables compatibility on additional platforms, including via . Building Chez Scheme from source requires a compatible Chez Scheme boot file (version 9.5 or later) and a C compiler such as or to compile the components written in C. The process uses the build system, which operates without Unix tools on Windows and supports ; cross-compilation is possible for various targets. Pre-built binaries are provided for major platforms, including , macOS, and Windows, simplifying installation without source . Portability is facilitated by an model implemented through portable (pb) variants, which allow interpretation on virtually any desktop platform regardless of native , with optimizations for word size and . This design supports easy adaptation to new architectures by from existing files and adjusting machine-specific assembly or C code in the kernel. AArch64 support was added in version 10.0.0, with compatibility improvements in 10.1.0 including machine types for limited native-code use. Version 10.3.0 (October 2025) includes further bug fixes, inlined numeric predicates, and atomic operations for pairs.

Features

Core Language Support

Chez Scheme provides full support for the R5RS and R6RS standards, with partial support for R7RS-small through compatibility libraries, encompassing their syntax, semantics, modules, libraries, and hygienic macro systems. This compliance ensures portability of core code across implementations while leveraging Chez Scheme's efficient for native . The language's modular structure, defined in R6RS libraries and extended in R7RS, allows developers to organize into self-contained units with explicit imports and exports, facilitating large-scale program development without pollution. Hygienic macros, implemented via the syntax-case system standardized in R6RS, prevent accidental variable capture during expansion, promoting reliable and abstraction. At its core, Chez Scheme employs lexical scoping, where the scope of a is determined by its position in the source code rather than dynamic binding, enabling predictable and efficient name resolution. Procedures are first-class objects, meaning they can be created dynamically, assigned to , passed to other , and returned as results, supporting higher-order functions central to paradigms. Continuations, as first-class entities, capture the program's state at any point, allowing non-local control transfers such as abortive or ; for instance, the call/cc procedure invokes a , passing the current control context to its argument. These constructs align with the standards' emphasis on expressive, composable abstractions. The built-in data types in Chez Scheme adhere to standard specifications, featuring arbitrary-precision numbers for exact integer and rational arithmetic, alongside inexact floating-point representations compliant with IEEE 754. Strings support mutable and immutable variants with full encoding, enabling seamless handling of international characters through and other schemes. Vectors provide efficient, indexed collections of homogeneous or heterogeneous elements, with operations for creation, access, and modification optimized for performance. Additional primitive types include symbols for efficient interning, booleans, characters, pairs for list construction, and ports for I/O, all integrated into a uniform that supports type predicates like number? and string?. Control structures emphasize functional purity and efficiency, with proper tail calls guaranteeing that recursive calls in tail position do not consume stack space, thus supporting unlimited depth. Procedures can return multiple values using values and receive them via call-with-values, allowing concise expression of computations that produce several results, such as coordinates or key-value pairs. The dynamic-wind procedure coordinates cleanup actions around dynamic extents, ensuring resources like files or locks are properly managed even when continuations cause non-sequential execution. These mechanisms, inherited from R5RS and elaborated in R6RS, underpin robust program flow in the presence of advanced features like continuations. Error handling follows the conditions framework outlined in R6RS, where errors are signaled by raising condition objects—simple or compound records carrying diagnostic information—and caught by handlers installed via with-exception-handler or guard. This system distinguishes between serious errors (like division by zero) and continuable conditions, permitting interactive recovery or logging without halting execution. Predicates such as condition? and accessors like condition-message facilitate introspection, while the raise and raise-continuable procedures integrate seamlessly with the continuation model for flexible exception propagation.

Extensions and Interfaces

Chez Scheme provides a robust (FFI) that facilitates seamless integration with and C++ code, enabling Scheme programs to call external libraries and functions directly. The FFI is primarily implemented through the foreign-declare form, which embeds declarations directly into the Scheme code for compilation and linking, and the foreign-call form, which invokes the declared foreign procedures at . For example, to integrate the sqrt function from <math.h>, one might use (foreign-declare "#include <math.h>") followed by (define sqrt-c (foreign-call "sqrt" double double)), allowing the Scheme program to pass and receive double-precision floating-point values. This interface supports a wide range of types, including integers, floats, pointers, and structures, with automatic for boxed types, making it suitable for high-performance applications requiring low-level system access. Beyond standard Scheme syntax, Chez Scheme introduces several proprietary syntactic extensions that enhance expressiveness and control over evaluation. The begin0 form evaluates a sequence of expressions but returns the value of the first one, which is particularly useful for performing side effects after capturing a primary result without altering the overall return value; for instance, (begin0 (foo) (bar) (baz)) computes foo's result first and returns it while executing bar and baz afterward. Parameter objects, implemented natively as per SRFI 39, provide a mechanism for dynamic bindings that propagate through procedure calls without explicit parameter passing, allowing values to be rebound locally and restored upon exit from a dynamic extent using parameterize. These objects support thread-safe operations in multithreaded contexts and are commonly used for configurable runtime behaviors, such as current output ports or error handlers. Chez Scheme extends the standard I/O facilities with advanced features for handling , network communication, and efficient access. are created using procedures like open-binary-input-file and open-binary-output-file, which treat as sequences of bytes rather than characters, supporting operations such as get-bytevector-n for reading fixed-length byte sequences and put-bytevector for writing them, ideal for processing non-textual data like images or executables. Network support includes sockets via tcp-listen to establish on a specified and tcp-connect for client , with bidirectional ports returned for reading and writing over the ; for example, (tcp-connect "localhost" 8080) opens a to a local . Additionally, allows to contents through map-file-to-memory, which loads a into a bytevector-like region for high-speed random access without traditional buffering overhead. For debugging, Chez Scheme offers powerful interactive tools that integrate deeply with its . The inspector, invoked via ,inspect in the REPL or programmatically with inspect, provides a menu-driven for examining objects at runtime, including their type, contents, and references; users can navigate closures, , and by selecting options like ? for help or p to details. Tracing facilities include trace and untrace, which instrument procedures to display argument and return values during execution, applicable to both built-in primitives and user-defined functions; for instance, (trace +) logs all calls to the . Stepping support is available through the single-step mode in the , activated by errors or explicit breaks, allowing execution to pause at each expression for inspection and continuation. Chez Scheme includes comprehensive support for and , ensuring compatibility with global text processing needs. It natively handles and UTF-16 encodings through dedicated transcoders for ports, such as make-transcoder (utf-8-codec), which specify how characters are serialized to bytes during I/O operations. String conversion procedures like string->utf8 and utf8->string transform between Scheme strings (which store Unicode code points) and bytevectors in UTF-8 format, while string->utf16be and utf16be->string handle big-endian UTF-16; these support error handling via optional error ports for invalid sequences. Additional codecs for UTF-16LE, UTF-16BE, and even iconv-based non-Unicode sets extend internationalization for legacy systems.

Performance

Optimization Techniques

Chez Scheme employs a series of optimization passes in its compiler to generate efficient . These include , which analyzes expressions to determine types and eliminate unnecessary runtime checks, such as specializing flonum operations in conditional branches like (if (flonum? x) E1 E2); this pass adds compilation time but typically offsets it through reduced checks and improved in . evaluates compile-time constants, such as fixing invalid folding for certain apply calls to produce simpler code. removes unreachable or unused code, including discarding calls to procedures like remove, member, or assoc when their results are not used, particularly in unsafe mode via assert-unreachable. Inlining replaces procedure calls with their bodies, supporting cross-library inlining for exported simple procedures and record operations to reduce overhead. The compiler operates incrementally, compiling source forms to native as they are encountered during interactive use, functioning as a just-in-time () mechanism integrated into the by default; this allows seamless development and execution without separate steps. For production, ahead-of-time (AOT) compilation produces standalone executables or fasl files via tools like compile-file, enabling faster startup and deployment. Memory management in Chez Scheme relies on a generational garbage collector that divides the into generations to prioritize collection of short-lived objects, improving efficiency for typical allocation patterns. Write barriers track modifications to older generations from younger ones, enabling incremental and parallel marking in a mark-copy that leverages machine parallelism. Heap sizes are tunable through parameters such as s*generation-semispaces and collect-requests, allowing users to adjust and tenured spaces for specific workloads. Profile-guided optimization (PGO) tools enable tuning by compiling with profiling data from compile-profile on source or block levels, loading it via profile-load-data to inform decisions like branch prediction and inlining during subsequent compilations.

Benchmarks and Comparisons

Chez Scheme has consistently demonstrated strong performance in standardized benchmarks for Scheme implementations. In the R7RS benchmarks suite (57 tests), which evaluates a range of tasks including loops, numerical computations, and recursive functions, version 10.0.0 of Chez Scheme (as of February 2024) achieved a high overall , with a total sum of places score of 171. For instance, in loop-intensive tasks like summing large arrays, Chez Scheme completes execution in approximately 4 seconds, outperforming Guile 3.0.10 (9 seconds) by about 2.25 times and 5.3.0 (13 seconds) by over 3 times. Similarly, in numerical benchmarks such as computation, Chez Scheme takes 3.8 seconds, roughly 1.9 times faster than Guile's 7.1 seconds.
ImplementationOverall Sum of Places (as of 2024)Example: Loops (seconds)Example: Numerical (seconds)
Chez Scheme 10.0.017143.8
Racket 8.13 (Chez backend)22383.89
Guile 3.0.1025897.1
Chicken 5.3.02331327.24
Compared to other Scheme systems, Chez Scheme exhibits faster startup times than Chicken Scheme, compiling a simple "hello world" program into a 837-byte shared object that executes in about 125 milliseconds. When evaluated against Racket, which adopted Chez Scheme as its primary backend starting in version 7.0, pure Chez Scheme delivers comparable runtime performance but with a lighter memory footprint, as Racket's additional libraries and features increase overhead despite the shared compiler. In Racket's Chez-backed variant, end-to-end execution times are often on par with or slightly better than the original bytecode-based implementation, particularly in optimized numerical and recursive workloads. The Petite Chez Scheme variant, designed for embedded use without the full , shows reduced performance on x86 architectures due to its reliance on interpretation rather than native . While compatible with most Chez Scheme code that avoids , Petite executes interpreted programs at speeds significantly slower than compiled equivalents in the full system for compute-intensive tasks. Version 10.3.0, released on October 29, 2025, maintains Chez Scheme's competitive edge with ongoing support for architectures, including , building on prior optimizations for garbage-collection-heavy workloads. However, like other implementations, Chez Scheme's performance drops significantly in purely interpreted mode without invoking the , where execution can be an slower than compiled native code.

Variants

Petite Chez Scheme

Petite Chez Scheme is a lightweight variant of Chez Scheme designed as a threaded , omitting the full while sharing the core with the main implementation. This design enables a smaller footprint suitable for resource-constrained environments. It maintains high compatibility with Chez Scheme, allowing most programs to run unchanged provided they avoid invoking the or using foreign function interfaces (FFI). Petite Chez Scheme fully supports the R5RS standard and provides partial support for R6RS and R7RS, making it suitable for a wide range of Scheme applications without requiring native . Historically, Petite Chez Scheme has been freely distributable since the as a to the Chez Scheme, facilitating its use in distributions without royalties. It was open-sourced in 2016 alongside the main Chez Scheme project under the 2.0. Common use cases include embedded systems, educational settings for teaching concepts, and quick scripting tasks where rapid startup and minimal resource usage are prioritized over peak performance. A key limitation is the absence of native , resulting in interpreted execution that is typically 10 times slower or more than compiled in Chez . For detailed performance comparisons, see the benchmarks section. One prominent project integrating Chez Scheme is Racket, a descendant of Scheme that adopted Chez as its primary backend starting with 8.0 released in . This shift improved Racket's through Chez's advanced optimizations and native code generation, making Racket CS (Chez Scheme-based) the default . To accommodate Racket-specific modifications, the Racket team maintained a of Chez Scheme, which was merged back into the mainline repository in 2023, enhancing compatibility and upstream contributions. Tooling around Chez Scheme includes language server support for integrated development environments. The scheme-langserver project implements the (LSP) for R6RS and R7RS , with extensions for Chez-specific features, enabling autocompletion, diagnostics, and navigation in editors like (via lsp-mode) and . Chez Scheme's build system leverages its incremental compiler and the scheme command-line tool, functioning as a make-like facility for compiling and linking modules efficiently without external build scripts. Chez Scheme has influenced research in compiler design, particularly through R. Kent Dybvig's contributions. The nanopass framework, developed for Chez Scheme's compiler, structures optimization as a sequence of small, analyzable passes, enabling modular and verifiable transformations; this approach was formalized in a ICFP paper and powers Chez's high-performance code generation. Flatt et al.'s 2019 ICFP experience report detailed rebuilding Racket atop Chez, highlighting adaptations for marks and runtime integration that advanced practical Scheme implementation techniques. These works underscore Chez's role as a foundation for exploring optimizing compilers in functional languages.

Libraries and Ecosystem

Built-in Components

The standard distribution of Chez Scheme includes a set of core libraries that provide R6RS-compatible modules for essential functionality such as , arithmetic operations, string manipulation, and list processing. These modules encompass bindings like (rnrs io ports (6)) and (rnrs io simple (6)) for I/O operations, (rnrs arithmetic bitwise (6)), (rnrs arithmetic fixnums (6)), and (rnrs arithmetic flonums (6)) for arithmetic, (rnrs unicode (6)) and (rnrs mutable-strings (6)) for strings, and (rnrs lists (6)) and (rnrs mutable-pairs (6)) for lists, enabling portable Scheme programming with support for ports, exceptions, bytevectors, and more. Chez Scheme extends these core facilities with proprietary libraries, including the (chezscheme) module that exports all standard and extended bindings, such as enhanced syntax-rules with fenders and prefixed R6RS procedures like r6rs:current-input-port. A key extension is the built-in (FFI), accessible via procedures like foreign-procedure and foreign-callable, which allow Scheme programs to invoke functions with automatic (e.g., from Scheme integers to C's integer-32) and enable C code to call back into Scheme, supporting of shared libraries like libc.so. Additionally, the distribution incorporates implementations of selected SRFIs as libraries, including SRFI-1 for advanced list operations (e.g., fold, filter) and SRFI-13 for string utilities (e.g., string-join, string-split), facilitating compatibility with community standards without external dependencies. The Chez Scheme distribution provides several built-in tools for development and analysis. The primary compilers are the scheme for full to with optimization levels from 0 to 3, supporting via compile-file or compile-program to generate loadable object files, and the petit for Petite Chez , an interpreted compatible with full Chez but without the for lightweight deployment. For inspection, the (disassemble) displays the assembly output of a or object, aiding in low-level optimization review. is supported through system-level mechanisms in Section 12.7 of the user's guide, including automatic collection of execution statistics for identifying hotspots, invocable via parameters like collect-profile-information. The (inspect) serves as an interactive , allowing navigation and examination of any object, such as stack frames or data structures, through a menu-driven during sessions. For graphical user interfaces, the distribution includes the Scheme Widget Library (SWL), a legacy package built on Tcl/ that provides an object system, threaded windowing, and tools like a window-based REPL and source viewer, compatible with both full and Petite Chez Scheme across platforms including Windows, , and macOS. However, SWL has been unmaintained since the early , with available for manual building but no ongoing updates or official support. Starting with version 10.0.0, Chez Scheme introduced enhancements to its built-in components, including expanded support to version 15.1 for and operations, new flonum primitives like make-flvector for mutable floating-point arrays, and additional management functions such as thread-join. Subsequent releases up to version 10.3.0 ( 2024) have further improved these areas, including an update to 16.0 support, enhancements to flonum operations such as efficient in-place copying with flvector-copy!, and refinements to handling like signal constraints to the main thread. These updates build on prior versions by improving numerical and concurrency capabilities, though specific cryptographic primitives and handling remain reliant on FFI integrations or external libraries rather than native modules.

External Resources

The external resources for Chez Scheme encompass community-maintained libraries, frameworks, and tools that enhance portability, standardization, and application development beyond the core distribution. SLIB (Scheme Library) is a portable library providing a platform-independent for packages of Scheme procedures and syntax, compatible with Chez Scheme among 24 other implementations, which facilitates sharing code across diverse Scheme environments. The chez-srfi package delivers implementations of numerous SRFIs tailored primarily for while maintaining portability to other R6RS-compliant systems, enabling access to most standard Scheme Requests for Implementation extensions such as SRFI (feature-based conditional expansion) and SRFI ( library). Community web development tools include Igropyr, an asynchronous HTTP server leveraging for high-performance concurrent processing in applications. Compatibility with Racket's extensive package ecosystem is available through Racket CS, which uses as its native-code backend and supports cross-compilation for building and deploying packages. Emerging package managers such as Raven and Ski simplify library installation and management for Chez Scheme, with repositories hosting utilities like the minimalistic unittest.scheme framework for unit testing. Documentation resources extend to the official User's Guide and manual pages, supplemented by post-2016 community efforts including the Scheme Community website for discussions and the schemedoc GitHub hub for metadata and resources.

Adoption and Community

Notable Uses

Chez Scheme has found significant application in programming languages research, particularly through its integration with the Racket ecosystem at . Researchers there rebuilt the Racket implementation atop Chez Scheme, enabling high-performance execution while preserving Racket's dynamic features; this effort, detailed in an experience report, resulted in DrRacket—the primary for Racket—running efficiently on Chez Scheme, along with full support for building and distributing Racket applications. The collaboration highlights Chez Scheme's role in advancing PLT tools, with the Racket team at contributing patches to enhance compatibility for marks and other advanced features. In academic teaching, Chez Scheme serves as a practical implementation for courses on functional and programming languages. For instance, the University of Notre Dame's CSE 40431/60431 course on Programming Languages employs Chez Scheme for its speed and compatibility with standard Scheme, allowing students to explore concepts like , higher-order functions, and interpreters in a reliable . Its incremental compiler facilitates interactive experimentation, making it suitable for classroom demonstrations of Scheme's semantics and optimizations. Prior to its open-sourcing in 2016, Chez Scheme was employed internally at Systems for tasks, leveraging its efficiency for scripting and tool-building in a production setting. Since Racket version 8.0 in 2020, Chez Scheme has powered the default Racket implementation, enabling production applications such as the DrRacket for code editing and , as well as Racket's for hosting dynamic content. This backend choice has boosted Racket's performance in real-world deployments, including educational tools and web services within the Racket ecosystem. The Petite variant of Chez Scheme, with its small footprint and interpreter-based runtime, supports embedded applications and rapid prototyping where resource constraints are key, such as in systems scripting or lightweight tools.

Contributions and Future

The Chez Scheme community primarily engages through its official GitHub repository, where developers report issues, discuss features, and submit pull requests to propose changes. Discussions on usage, improvements, and extensions occur on the dedicated mailing list hosted at groups.google.com/g/chez-scheme, which serves as a forum for users and contributors to share ideas and feedback in a professional environment. Community members also participate in the annual Scheme and Functional Programming Workshop, a key venue for presenting research and advancements relevant to Chez Scheme and the broader Scheme ecosystem. Contributions to Chez Scheme follow standard open-source practices via GitHub pull requests, with a strong emphasis on compliance with the R6RS standard to ensure portability and correctness. Developers are expected to include tests using the project's built-in unit testing framework, located in the mats directory, to validate modifications before submission. While explicit guidelines are minimal, proposed changes must maintain the implementation's efficiency and reliability, often involving updates to the C-based . Since its open-sourcing by in 2016, maintenance of Chez Scheme has been handled by , with support from a volunteer community and contributions from original developer R. Kent Dybvig. This shift from proprietary development to community-driven efforts has enabled ongoing enhancements while preserving . Prospective developments focus on expanding compatibility with emerging standards, such as partial support for R7RS through top-level mode adjustments and library integrations. Recent releases have introduced a pb32l machine type for compiling to via , facilitating deployment in browser and serverless environments. Parallelism has seen significant improvements, including parallel garbage collection for multi-threaded programs, new thread management procedures like thread-join and thread-preserve-ownership!, and memory-ordering operators to support weak consistency models. As of October 2025, the latest release is version 10.3.0, continuing enhancements in areas like platform support and optimization. A notable challenge for Chez Scheme is attracting and retaining contributors, given its relatively small community size compared to more expansive ecosystems like , which benefit from larger user bases and integrated tooling.

References

  1. [1]
    Chez Scheme
    ### Summary of Chez Scheme
  2. [2]
    The development of Chez Scheme - ACM Digital Library
    This paper takes a brief look back on the history of Chez Scheme's development to explore how and why it became the system it is today.
  3. [3]
    Form of Cisco Systems, Inc. Restricted Stock Unit Assumption ...
    As you know, on December 16, 2011 (the “Closing Date”) Cisco Systems, Inc. (“Cisco”) acquired KD Research Systems, LLC (the “Acquisition”) pursuant to the ...
  4. [4]
    Chez Scheme Native Compiler now Open Source - InfoQ
    May 11, 2016 · Chez Scheme is an optimizing compiler that generates native code for the PowerPC, SPARC, IA–32, and x86–64 architectures.Missing: history | Show results with:history
  5. [5]
    Racket-on-Chez Status: February 2020
    Feb 19, 2020 · Racket on Chez Scheme (Racket CS) is ready for production use. Racket CS now passes all of the tests for the main Racket distribution tests, and ...
  6. [6]
  7. [7]
    Chez Scheme Version 9 User's Guide
    **Summary of Chez Scheme User's Guide (Version 9.6.4)**
  8. [8]
    cisco/ChezScheme: Chez Scheme - GitHub
    Chez Scheme is both a programming language and an implementation of that language, with supporting tools and documentation.
  9. [9]
    Introduction
    ### Summary of Chez Scheme Features
  10. [10]
    ChezScheme - Practical Scheme
    Jun 5, 2021 · As a superset of R6RS, Chez Scheme supports all standard features of Scheme, including first-class procedures, proper treatment of tail calls, continuations, ...
  11. [11]
    Chez Scheme Release Notes
    Summary of each segment:
  12. [12]
    Chez Scheme on RISC-V - Google Groups
    Chez Scheme is a boot-strapped compiler meaning you need a Chez Scheme compiler to build a Chez Scheme compiler. In the case of porting to a new platform, you' ...
  13. [13]
    Chapter 2. Using Chez Scheme
    Chez Scheme compiles source forms as it sees them to machine code before evaluating them, i.e., "just in time." In order to speed loading of a large file or ...
  14. [14]
    Chapter 15. Thread System
    This chapter describes the Chez Scheme thread-system procedures and syntactic forms. With the exception of locks, locked increment, and locked decrement.Missing: concurrency | Show results with:concurrency
  15. [15]
    Chapter 15. Thread System - Chez Scheme
    Most primitive Scheme procedures are thread-safe, meaning that they can be called concurrently from multiple threads. This includes allocation operations like ...Section 15.1. Thread... · Section 15.4. Locks · Section 15.5. Thread...
  16. [16]
    Publications related to Chez Scheme
    Kent Dybvig. Automatic cross-library optimization. In Scheme 2013: Workshop ... The development of Chez Scheme. In Proceedings of the Eleventh ACM ...
  17. [17]
    Chez Scheme Release Notes
    This document outlines the changes made to Chez Scheme for Version 7.9.3 since Version 7.4, most of which are focused on converting Chez Scheme into an ...Missing: 2007 | Show results with:2007
  18. [18]
    Chez Scheme Release Notes
    Chez Scheme Version 9.5.8 Release Notes April 2022. 1. Overview. This document outlines the changes made to Chez Scheme for Version 9.5.8 since Version 8.4.
  19. [19]
    Chez Scheme Release Notes
    Threads are supported on architectures with weak memory models while preserving the safety guarantee described in the documentation for variables and primitive ...<|control11|><|separator|>
  20. [20]
    Using Chez Scheme
    ### Summary of Compilation Process in Chez Scheme (Section 2.6 and Related)
  21. [21]
    [PDF] Chez Scheme Version 9 User's Guide
    ... Chez Scheme system but uses a high-speed interpreter in place of Chez Scheme's incremental native-code compiler. Programs written for Chez Scheme run ...
  22. [22]
    A nanopass framework for commercial compiler development
    To determine whether this is the case, we have created a plug replacement for the commercial Chez Scheme compiler, implemented using an updated nanopass ...
  23. [23]
    Chapter 13. Storage Management - Chez Scheme
    Chez Scheme uses garbage collection to automatically reclaim storage. It uses a generation-based collector, and weak pairs/guardians allow programs to maintain ...Missing: runtime | Show results with:runtime
  24. [24]
    Chapter 12. System Operations - Chez Scheme
    This chapter describes operations for handling exceptions, interrupts, environments, compilation and evaluation, profiling, controlling the operation of the ...
  25. [25]
    Chapter 4. Foreign Interface
    Chez Scheme provides two ways to interact with "foreign" code, ie, code written in other languages. The first is via subprocess creation and communication.<|control11|><|separator|>
  26. [26]
    Chez Scheme Release Notes - Virtual Server List
    New supported platforms and portable bytecode (9.9.9). AArch64 (64-bit Arm) and RV64G (64-bit RISC-V) architectures are supported. Threads are supported on ...
  27. [27]
    Chez Scheme - Wikipedia
    Chez Scheme is a programming language, a dialect and implementation of the language Scheme which is a type of Lisp. It uses an incremental native-code ...
  28. [28]
    Chez Scheme Version 8.4
    Chez Scheme requires a license fee; if you have purchased a license, it may be downloaded via the links in the Chez Scheme section below. Before you ...
  29. [29]
    ChezScheme/BUILDING at main · cisco/ChezScheme
    **Summary of Build Requirements from https://github.com/cisco/ChezScheme/blob/main/BUILDING:**
  30. [30]
    R7RS
    The following implementations support the previous version of the report, R6RS. Chez Scheme · Guile · IronScheme · Loko · Mosh · Racket · Sagittarius Scheme ...
  31. [31]
    SRFI 39: Parameter objects - Scheme SRFI
    The global dynamic environment binding is stored in the parameter object itself. Since we are assuming that there is a single thread, the current local dynamic ...
  32. [32]
    Chez Scheme
    Chez Scheme is both a programming language and an implementation of that language, with supporting tools and documentation.
  33. [33]
    Scheme Benchmarks - GitHub Pages
    Feel free to run the benchmarks yourself without safety turned on. You'll probably need to modify the bench file for that. Actual R7RS Support. Many of these ...
  34. [34]
    Chez Scheme vs. SBCL: a comparison - elmord.org
    Nov 14, 2019 · In my experience, SBCL and Chez are both pretty fast – not at the "as fast as hand-crafted C" level, but pretty much as fast as I could desire.
  35. [35]
    chezscheme - Chez Scheme - Ubuntu Manpage
    Interpreted code is fast in Petite Chez Scheme, but generally not nearly as fast as compiled code. Debugging and profiling support is also limited for ...<|control11|><|separator|>
  36. [36]
    [PDF] Distributing Applications with Petite Chez Scheme
    Petite Chez Scheme is a fast, reliable, and full-featured implementation of the Scheme programming language. It is fully compatible with the complete Chez ...
  37. [37]
    Racket Compiler and Runtime Status: January 2021
    Jan 24, 2021 · Instead, Chez Scheme bootstraps itself on any supported platform using a new portable bytecode (pb) backend. Bootfiles for pb mode are checked ...
  38. [38]
    Thoughts on Racket & Chez Scheme
    Jul 15, 2021 · Racket moved to Chez Scheme for maintainability, but now uses a fork, preserving Racket's behavior. Chez Scheme is superior in engineering, and ...
  39. [39]
    ufo5260987423/scheme-langserver: Scheme language server
    This package is a language server protocol implementation helping scheme programming. It provides completion, definition and type inference.Missing: Emacs | Show results with:Emacs
  40. [40]
    R. Kent Dybvig - ICFP 2019
    ICFP 2019 is the 24th ACM SIGPLAN International Conference on Functional ... Contributions. 2019. ICFP. Rebuilding Racket on Chez Scheme (Experience Report).
  41. [41]
  42. [42]
    Chapter 4. Foreign Interface - Chez Scheme
    Chez Scheme's foreign-procedure interface allows a Scheme program to invoke procedures written in C or in languages that obey the same calling conventions as C.Missing: FFI | Show results with:FFI
  43. [43]
    chez-scheme Commands | Man Pages - ManKier
    Petite Chez Scheme is an interpreted version of Chez Scheme that may be used as a run-time environment for Chez Scheme applications or as a stand-alone Scheme ...
  44. [44]
    fibs, lies, and benchmarks - wingolog
    Jun 26, 2019 · You can show the disassembly in chez with the #%$assembly-output parameter. You can set it to #t, #f, or a textual output port. #t - standard ...
  45. [45]
    Chapter 12. System Operations
    The normal evaluation process proceeds in two steps: compilation and execution. ... The only difference between Petite Chez Scheme and Chez Scheme is that ...Missing: phase | Show results with:phase
  46. [46]
    How to Debug Chez Scheme Programs
    1.6. Tracing · 1. For procedures bound to top-level variables, including built-in procedures, the trace syntactic form may be used. · 2. Any procedure bound to a ...
  47. [47]
    Scheme Widget Library
    The Scheme Widget Library (SWL) is a windowing and graphics package for Chez Scheme developed in the Indiana University Computer Science Department.
  48. [48]
    The SLIB Portable Scheme Library - People | MIT CSAIL
    SLIB is a portable library for the programming language Scheme. It provides a platform independent framework for using packages of Scheme procedures and syntax.
  49. [49]
    arcfide/chez-srfi: SRFIs for Chez Scheme - GitHub
    These were originally intended to simply provide a place for me to tweak and maintain my own copy of the SRFIs for use in Chez Scheme. With the release of Chez ...
  50. [50]
    Debian -- Details of package scheme-chez-srfi in trixie
    SRFI libraries for Chez Scheme and others. SRFI stands for Scheme Requests For Implementation. It is a standardization process for extensions to the ...Missing: frameworks tools Spiffy
  51. [51]
    Igropyr - a async http server base on libuv for Chez Scheme - GitHub
    Igropyr is a high-performance Async I/O Http Server built with OTP (Open Telecom Platform) architecture, featuring powerful concurrent processing capabilities ...Missing: Spiffy | Show results with:Spiffy
  52. [52]
    Racket-on-Chez Status: January 2019
    Jan 29, 2019 · While code generally runs as fast as it should, end-to-end performance is not yet good enough to make Racket CS the default implementation of ...<|separator|>
  53. [53]
    Raven | Raven is a Package Manager for Chez Scheme - guenchi.com
    Raven is a Package Manager for Chez Scheme ... the Raven libraries generally work fine on the R6RS implatetion, except for some built on the c library which ...
  54. [54]
    yuhr/ski: A package manager for Chez Scheme. - GitHub
    A package manager for Chez Scheme. Currently supports Linux only. See registered libraries in the skis directory. Install ski. Download ski.ss and ...
  55. [55]
    A minimalistic unit testing framework for Chez Scheme. - GitHub
    Jul 18, 2025 · A minimalistic unit testing framework for Chez Scheme. 8 stars 2 forks Branches Tags Activity · Star · Notifications You must be signed in to ...
  56. [56]
  57. [57]
    Scheme Community
    How the community is organized. Scheme is similar to Common Lisp and C in that the language is based around a well-known standard with many implementations, ...
  58. [58]
    Scheme Documentation - GitHub
    Documentation and metadata hub for the Scheme community. Pinned Loading wiki wiki Public Wiki for planning, gathering data and miscellaneous note-taking.
  59. [59]
    Rebuilding racket on chez scheme (experience report)
    The supplementary material provides additional benchmark measurements and analysis comparing the current Racket implementation to Racket on Chez Scheme.
  60. [60]
    [PDF] Compiler and Runtime Support for Continuation Marks
    To support a Racket implementation on Chez Scheme [15], we add continuation attachments to the Chez Scheme com- piler and runtime system. This even-simpler core ...<|separator|>
  61. [61]
    Running Scheme - CSE 40431/60431: Programming Languages
    Dec 2, 2022 · We are using Chez Scheme, which is reputed to be very fast, and goes with the book we are using. It is installed on studentnn.cse.nd.edu , where ...
  62. [62]
    [PDF] Rebuilding Racket on Chez Scheme (Experience Report)
    Chez Scheme became available as an open-source implementation in mid-2016. It is certainly a better-informed starting point for building a functional ...<|control11|><|separator|>
  63. [63]
  64. [64]
    chez-scheme - Google Groups
    This group is intended to provide a forum for discussing using and improving. Chez Scheme and the programming environment around Chez Scheme.
  65. [65]
    Scheme and Functional Programming Workshop
    workshop logo. Scheme and. Functional Programming Workshop. 2025 · 2000 · 2001 · 2002 · 2003 · 2004 · 2005 · 2006 · 2007 · 2008 · 2009 · 2010 · 2011 · 2012 ...Missing: annual | Show results with:annual
  66. [66]
    Unit testing and roadmap - Google Groups
    Jun 7, 2016 · I suspect for the near term Chez will remain R6RS, though I think it would be interesting to start to explore R7RS support in a hybrid R6RS/R7RS ...
  67. [67]
    (chez (chez scheme))
    Chez Scheme is now an open-source project, hosted at github.com/cisco/chezscheme with a project page at cisco.github.io/ChezScheme.Chez · Scheme programming language · Links to Scheme Resources
  68. [68]
    Partial r7rs support · Issue #279 · cisco/ChezScheme - GitHub
    Mar 23, 2018 · Supporting R7RS is a fine idea as long as doing so doesn't overly complicate the expander, compiler, or run-time system.Missing: compliance | Show results with:compliance