Contents

    1  Introduction

    2  User's guide
        2.1  Command line arguments
        2.2  Command processor
        2.3  Editing
        2.4  Performance
        2.5  Disassembler
        2.6  Module system
        2.7  Library

    3  Command processor
        3.1  Current focus value and ##
        3.2  Command levels
        3.3  Logistical commands
        3.4  Module commands
        3.5  Debugging commands
        3.6  Switches
        3.7  Inspection mode
        3.8  Command programs
        3.9  Building images
        3.10  Resource query and control
        3.11  Threads
        3.12  Quite obscure

    4  Module system
        4.1  Introduction
        4.2  The configuration language
        4.3  Interfaces
        4.4  Macros
        4.5  Higher-order modules
        4.6  Compiling and linking
        4.7  Semantics of configuration mutation
        4.8  Command processor support
        4.9  Configuration packages
        4.10  Discussion

    5  Libraries
        5.1  General utilities
        5.2  Pretty-printing
        5.3  ASCII character encoding
        5.4  Bitwise integer operations
        5.5  Byte vectors
        5.6  Sparse vectors
        5.7  Cells
        5.8  Queues
        5.9  Arrays
        5.10  Records
            5.10.1  Low-level access to records
            5.10.2  Record types
        5.11  Finite record types
        5.12  Sets over finite types
        5.13  Hash tables
        5.14  Port extensions
        5.15  Fluid bindings
        5.16  Shell commands
        5.17  Sockets
        5.18  Macros for writing loops
            5.18.1  Iterate
            5.18.2  Reduce
            5.18.3  Sequence types
            5.18.4  Synchronous sequences
            5.18.5  Examples
            5.18.6  Defining sequence types
            5.18.7  Expanded code
        5.19  Sorting lists and vectors
            5.19.1  Design rules
                    What vs. how
                    Consistency across procedure signatures
                    Less-than parameter first, data parameter after
                    Ordering, comparison procedures and stability
                    All vector operations accept optional subrange parameters
                    Required vs. allowed side-effects
            5.19.2  Procedure specification
                    Procedure naming and functionality
                    Types of parameters and return values
                5.19.2.1  sorting -- general sorting package
                5.19.2.2  Algorithm-specific sorting packages
                    sorted -- sorted predicates
                    list-merge-sort -- list merge sort
                    vector-merge-sort -- vector merge sort
                    vector-heap-sort -- vector heap sort
                    vector-insert-sort -- vector insertion sort
                    delete-neighbor-duplicates -- list and vector delete neighbor duplicates
                    binary-searches -- vector binary search
            5.19.3  Algorithmic properties
        5.20  Regular expressions
            5.20.1  Character sets
            5.20.2  Anchoring
            5.20.3  Composite expressions
            5.20.4  Case sensitivity
            5.20.5  Submatches and matching
        5.21  SRFIs

    6  Threads
        6.1  Creating and controlling threads
        6.2  Advanced thread handling
        6.3  Debugging multithreaded programs
        6.4  Optimistic concurrency
        6.5  Condition variables
        6.6  Mutual exclusion
            6.6.1  Locks
            6.6.2  Placeholders
        6.7  Writing custom synchronization abstractions
        6.8  Concurrent ML abstractions
            6.8.1  Basic rendezvous combinators
            6.8.2  Synchronous channels
            6.8.3  Synchronous variables
                6.8.3.1  Placeholders
                6.8.3.2  Jars
            6.8.4  Timeouts
            6.8.5  CML to Scheme correspondence

    7  Mixing Scheme 48 and C
        7.1  Available facilities
            7.1.1  Scheme structures
            7.1.2  C naming conventions
            7.1.3  Garbage collection
        7.2  Shared bindings
            7.2.1  Exporting Scheme values to C
            7.2.2  Exporting C values to Scheme
            7.2.3  Complete shared binding interface
        7.3  Calling C functions from Scheme
        7.4  Dynamic loading
        7.5  Compatibility
        7.6  Accessing Scheme data from C
            7.6.1  Constants
            7.6.2  Converting values
            7.6.3  C versions of Scheme procedures
        7.7  Calling Scheme functions from C
        7.8  Interacting with the Scheme heap
            7.8.1  Registering objects with the GC
            7.8.2  Keeping C data structures in the Scheme heap
            7.8.3  C code and heap images
        7.9  Using Scheme records in C code
        7.10  Raising exceptions from external code
        7.11  Unsafe functions and macros

    8  Access to POSIX
        8.1  Process primitives
            8.1.1  Process creation and termination
            8.1.2  Exec
        8.2  Signals
            8.2.1  POSIX signals
            8.2.2  Other signals
            8.2.3  Sending signals
            8.2.4  Receiving signals
        8.3  Process environment
            8.3.1  Process identification
            8.3.2  Environment variables
        8.4  Users and groups
        8.5  OS and machine identification
        8.6  Files and directories
            8.6.1  Directory streams
            8.6.2  Working directory
            8.6.3  File creation and removal
            8.6.4  File information
            8.6.5  File modes
        8.7  Time
        8.8  I/O
        8.9  Regular expressions
        8.10  C to Scheme correspondence

    A  ASCII character encoding