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