# 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:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [November 14, 2021, 5:07pm UTC](https://racket.discourse.group/t/differences-with-other-lisps/124/1 "2021-11-14T17:07:35Z")

</div>

There are already some resources out there

- [A Note to Readers with Lisp/Scheme Experience](https://docs.racket-lang.org/guide/intro.html#%28part._use-module%29) in the Guide.
- [the DrScheme repl isn’t the one in Emacs](https://blog.racket-lang.org/2009/03/the-drscheme-repl-isnt-the-one-in-emacs.html) on the Racket Blog
- [Racket: From PLT Scheme to Racket](https://www.racket-lang.org/new-name.html)

What is missing?

- 'Racket' is both a distribution and a language. **Racket-the-distribution** _includes_; Racket-the-language, Typed Racket, Swindle, FrTime Lazy Racket, R5RS Scheme, R6RS Scheme, Scribble, Datalog, Racklog, Algol 60 and several teaching languages language.
- Compiled not interpreted.
- Lisp-1
- What else?

(This topic/post is 'wiki' so you should be able to edit it)

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [November 14, 2021, 5:07pm UTC](https://racket.discourse.group/t/differences-with-other-lisps/124/2 "2021-11-14T17:07:45Z")

</div>

Clojure collates this all into one place [Clojure - Differences with other Lisps](https://clojure.org/reference/lisps)

Can we do the same?

---

<div class="post-metadata">

**Author:** ![plane](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/plane/32/67_2.png) [@plane](https://racket.discourse.group/u/plane)\
**Post date:** [November 21, 2021, 6:28pm UTC](https://racket.discourse.group/t/differences-with-other-lisps/124/3 "2021-11-21T18:28:41Z")

</div>

- Immutable `cons` cells
- `#lang`
- Racket's module system
- `syntax/parse`
- `for/*` family

---

<div class="post-metadata">

**Author:** ![Decabytes](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/decabytes/32/54_2.png) [@Decabytes](https://racket.discourse.group/u/Decabytes)\
**Post date:** [November 21, 2021, 9:25pm UTC](https://racket.discourse.group/t/differences-with-other-lisps/124/4 "2021-11-21T21:25:14Z")

</div>

I know OOP isn’t in vogue right now but it also has classes.

---

<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.
