# Differences with other lisps?

**URL:** <https://racket.discourse.group/t/differences-with-other-lisps/124>\
**Category:** General\
**Created:** [November 14, 2021, 5:07pm UTC](https://racket.discourse.group/t/differences-with-other-lisps/124 "2021-11-14T17:07:35Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![slaymaker1907](https://avatars.discourse-cdn.com/v4/letter/s/59ef9b/32.png) [@slaymaker1907](https://racket.discourse.group/u/slaymaker1907)\
**Post date:** [November 24, 2021, 12:56am UTC](https://racket.discourse.group/t/differences-with-other-lisps/124/5 "2021-11-24T00:56:28Z")

</div>

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.

---

_[View the full topic](https://racket.discourse.group/t/differences-with-other-lisps/124)._
