Skip to content

Scheme

Standardization

RRS – 1975 (Original Report)

  • Year: 1975
  • Purpose: This was the initial version of the Scheme language, created by Gerald Jay Sussman and Guy L. Steele at MIT. It was focused on developing a minimalistic dialect of Lisp with first-class functions and lexical scoping.
  • Key Features:
    • Lexical scoping (in contrast to dynamically scoped Lisp dialects at the time).
    • The introduction of closures (functions with their environment).
    • First-class continuation (via call/cc).

R2RS – 1986 (Revised Report)

  • Year: 1986
  • Purpose: The second revision of the Scheme report added more formalization to the language specification.
  • Key Features:
    • Tail recursion: Formally specified to optimize recursive calls.
    • First-class continuations: Via the call-with-current-continuation (call/cc) function.
    • Introduced numeric tower (integer, rational, real, and complex numbers).

R3RS – 1986 (Third Revised Report)

  • Year: 1986
  • Purpose: Further refinements and formalization of the language, with additional features.
  • Key Features:
    • Continuation-based I/O.
    • Introduction of the macro system, initially based on simple pattern matching.

R4RS – 1991 (Fourth Revised Report)

  • Year: 1991
  • Purpose: Major standardization push, aimed at unifying different Scheme implementations under a consistent specification.
  • Key Features:
    • The macro system was significantly improved.
    • Standardized lexical syntax and reader macros.
    • Portability: The focus on making Scheme more portable across implementations.
    • Expanded the numeric tower, and introduced more precise handling of numerical operations.

R5RS – 1998 (Fifth Revised Report)

  • Year: 1998
  • Purpose: One of the most influential versions of Scheme, widely adopted by implementations and users. It became the de facto standard for years.
  • Key Features:
    • Simplicity: Maintained Scheme's minimalist philosophy.
    • Expanded support for continuations and tail-call optimization.
    • Retained the original Scheme features such as first-class functions, continuations, and lexical scoping.
    • Limited to core features, leading to high portability across implementations.
    • Finalized and formalized the macro system using syntax-rules.

R6RS – 2007 (Sixth Revised Report)

  • https://www.r6rs.org/
  • Year: 2007
  • Purpose: A more ambitious standard, aimed at making Scheme suitable for large-scale software development by adding new features and stricter definitions.
  • Key Features:
    • Introduced libraries and modules for better namespace management.
    • Support for Unicode, improving internationalization.
    • Expanded the macro system with more powerful and hygienic macros.
    • Improved support for exception handling and error reporting.
    • Records (a structured data type) were standardized.
    • Mutable and immutable pairs: Standardized to distinguish between mutable and immutable lists.
    • Allowed for more complex numerical types.
  • Controversy:
    • Some in the Scheme community felt R6RS was too complex, leading to debates. Many felt it deviated from Scheme's original minimalist principles.
    • As a result, several implementations remained at R5RS.

R7RS – 2013 (Seventh Revised Report)

  • https://r7rs.org/
  • Year: 2013
  • Purpose: The R7RS standard was split into two parts: R7RS-small and R7RS-large, addressing both the minimalist and larger-scale programming needs.
  • R7RS-Small (2013):
    • Focused on small, core Scheme, similar to R5RS but with some modernizations.
    • Added support for simple modules and libraries to enable code reuse and modularity.
    • Included syntax-case as an alternative macro system to syntax-rules.
    • Concurrency primitives added (e.g., futures and promises).
    • Kept Scheme's core principles while addressing some of the criticisms of R6RS's complexity.
  • R7RS-Large (Work in Progress):
    • Focuses on extending Scheme with more advanced features, such as standard libraries, and is aimed at larger-scale programming.
    • It is being developed in phases, with modules like math libraries, IO libraries, record types, and more.

Other Standards and Extensions

IEEE Scheme (IEEE 1178-1990)

  • Year: 1990
  • Purpose: The IEEE standard for Scheme, based mostly on R4RS, aimed at making Scheme an official standardized language for portability.
  • Key Features:
    • Served as an official industrial standard.
    • Was referenced for compliance by some implementations, but over time it was less influential compared to the RnRS series.

Major Scheme Implementations

Here is a list of notable Scheme implementations, both historical and current, each with different goals and focuses:

GNU Guile

Chez Scheme

MIT Scheme

  • Purpose: Educational, used in the "Structure and Interpretation of Computer Programs" (SICP) course.
  • Standard: R5RS with extensions.
  • Notable Features: Good educational tools, debugger, profiler.
  • Resources

Racket

Chicken Scheme

  • Purpose: Scheme-to-C compiler with a focus on portability and ease of embedding.
  • Standard: R5RS, R7RS.
  • Notable Features: Good foreign function interface (FFI), large set of third-party extensions (eggs).
  • Resources

Gambit

  • Purpose: Scheme implementation focused on portability and performance.
  • Standard: R5RS, R6RS.
  • Notable Features: Compiles Scheme to C, supports concurrent programming.
  • Resources

Bigloo

  • Purpose: Scheme compiler aimed at developing efficient and compact programs.
  • Standard: R5RS, R6RS.
  • Notable Features: Interoperability with C, Java, and .NET.
  • Resources

Scheme48

  • Purpose: A simple, lightweight Scheme, aimed at being a clean and modular implementation.
  • Standard: R5RS.
  • Notable Features: Modular design, intended to be easy to modify and experiment with.
  • Resources

Kawa

  • Purpose: A Scheme implementation that compiles to Java bytecode.
  • Standard: R5RS, R6RS.
  • Notable Features: Can interoperate with Java code, aimed at being used in JVM environments.
  • Resources

Scm

Chibi-Scheme

  • Purpose: Lightweight Scheme implementation designed to be embeddable.
  • Standard: R7RS (small).
  • Notable Features: Tiny footprint, good for scripting.
  • Resources

Larceny

  • Purpose: Performance-focused Scheme compiler and interpreter.
  • Standard: R5RS, R6RS.
  • Notable Features: Focus on performance, includes native and bytecode compilation.

Lesser-Known and Historical Scheme Implementations

S7

  • Purpose: Lightweight embeddable Scheme interpreter used in audio programming.
  • Standard: Minimal.
  • Notable Features: Used in music and sound synthesis software.

SigScheme

  • Purpose: Lightweight Scheme interpreter for embedded systems.
  • Standard: R5RS.
  • Notable Features: Small memory footprint, used in systems like the Gauche Scheme.

Stalin

  • Purpose: Aggressively optimizing Scheme compiler.
  • Standard: R5RS.
  • Notable Features: Focus on generating highly optimized code but has long compilation times.

Ypsilon

  • Purpose: Scheme with a focus on concurrency and low-latency garbage collection.
  • Standard: R6RS.
  • Notable Features: Good for real-time and concurrent applications.

SISC

  • Purpose: Java-based Scheme interpreter, designed to be complete and compliant with R5RS.
  • Standard: R5RS.
  • Notable Features: Runs on JVM, supports tail recursion.

TinyScheme

  • Purpose: A lightweight Scheme interpreter aimed at embedding.
  • Standard: R5RS.
  • Notable Features: Small size, ease of embedding into applications.

Vicare

  • Purpose: A fork of Ikarus Scheme with a focus on R6RS.
  • Standard: R6RS.
  • Notable Features: Focused on supporting modern Scheme standards.
  • Resources

Ikarus

lisp-js

Historical or Discontinued Implementations

These may no longer be actively developed, but were once significant:

T Scheme

  • Purpose: Based on Scheme, but aimed to support object-oriented programming.
  • Standard: Custom extensions.
  • Notable Features: One of the early influential Scheme implementations.

RScheme

  • Purpose: Scheme implementation with object-oriented extensions.
  • Standard: R5RS.
  • Notable Features: Used in real-time systems.

VSCM

  • Purpose: Experimental Scheme interpreter and compiler.
  • Standard: R5RS.
  • Notable Features: Focus on experimentation with Scheme concepts.

Pixie Scheme

  • Purpose: Small Scheme interpreter written in Java.
  • Standard: R4RS.
  • Notable Features: Runs on JVM.