Racket is this section’s control case. Every other folder here answers the generics question with a static type system of some kind, so it is worth having one language that solves the same problems without one. Parametric polymorphism arrives through contracts checked at runtime, specialization arrives through macros that generate the code a template would have generated, and parameterized components arrive through units rather than type parameters. The claim underneath all of it is that you build a language rather than a library, which reframes what the other folders are trading against.

Read the core layer first. The macro system, the module system, and the typed layer all assume you know what a syntax object is and what the expander does with it.

The core: reading, expanding, evaluating

Polymorphism without a type checker

The folder’s answer to the section’s question, built out of runtime boundaries instead of static ones.

Typed Racket, where the types do show up

Macros as the specialization mechanism

Where a C++ template generates code, Racket writes the generator by hand and the language gives it a real theory.

Modules and the language tower

Control

Data, numbers, and the runtime

Read from the comparative layer


Any pages placed under this folder are auto-listed below by Quartz.

28 items under this folder.