Comparing the Dialects
Scheme / Racket Minimal core (Racket: large) Medium core, big host Large (editor API) Empty list / false nil = () = false nil/false; () is truthy
Mutable (Racket encourages immutability) Immutable by default
Hygienic (syntax-rules, syntax-case, syntax-parse) defmacro + gensyms defmacro + syntax-quote auto-gensyms
Implementation-dependent (SBCL optimizes) Not automatic; use recur First-class call/cc
No (restarts and catch/throw instead) Racket classes, structs, records CLOS (multiple dispatch, MOP) Protocols, records, multimethods EIEIO (CLOS-like) Condition system with restarts
Java exceptions (try/catch), ex-info Interpreters/native (Chez) Native compilers (SBCL) JVM / JS / GraalVM Emacs (bytecode / native) Racket places/futures, threads Threads (bordeaux-threads), lparallel
Atoms, refs (STM), agents, core.async Limited (threads, async processes) Teaching, research, DSLs, scripting Long-lived systems, high performance Backend services, data, web