The language specification R5RS on the Scheme programming language is based on consensus between the multiple Scheme implementors. This imply that the language is very stable. It also implies that many useful features are not part of the R5RS standard.
Racket has built upon R5RS and extended it greatly. Some extensions are defined as macros, but some features require the support of the runtime system.
Features in Racket not implementable by macros alone:
- delimited continuations (more general than call/cc)
- continuation marks
The module and macro system are much more general than the RnRS specification.
#lang reader/language specification makes it possible to define custom languages (with custom syntax) and use them with normal Racket programs.
In a few cases Racket has constructs whose behaviour deviates from R5RS. The most obvious one is making
cons construct an immutable pair (
mcons constructs a mutable pair). One advantage of a having immutable pairs, is that
length now runs in O(1) amortized time.