Differences with other lisps?

Racket has a pretty unique compilation model for macros as well. It is much more strict than other languages about leaking information between phases.

Related to the phase system, Racket has a strict module system. You cannot detect if a module is loaded or not without loading said module. Racket supports submodules which allow one to load the containing module without loading the submodule code.

Racket allows non-hygienic macros which still maintain hygiene except where explicitly broken since identifiers have an associated scope that can be set. I think R6RS also has this, but I don't think it is quite as powerful as Racket's macro system.

Unlike older versions of Scheme, Racket uses delimited continuations as opposed to only providing call/cc. You can implement delimited continuations on top of call/cc, but Racket provides first class support for delimited continuations.

2 Likes