# Qi++: Qi but with Real Macros

**URL:** <https://racket.discourse.group/t/qi-qi-but-with-real-macros/871>\
**Category:** Announcements\
**Tags:** qi\
**Created:** [April 11, 2022, 4:12am UTC](https://racket.discourse.group/t/qi-qi-but-with-real-macros/871 "2022-04-11T04:12:35Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [April 11, 2022, 10:47pm UTC](https://racket.discourse.group/t/qi-qi-but-with-real-macros/871/4 "2022-04-11T22:47:06Z")

</div>

[This section](https://docs.racket-lang.org/qi/Introduction_and_Usage.html#%28part._.Overview%29) of the docs provides an overview, but here are a few different ways I'd describe it:

- It's a language that's _data-oriented_ instead of _control-oriented_
- It's a language where your program is a function that is made up of functions, i.e. functions are the building blocks and there is nothing smaller nor anything bigger (even literal values like `1` are treated as functions generating them)
- It's a bit like programming with analog circuits, where the "circuit components" are functions
- It's a language for working with values directly instead of collections of values

**What can it do?**

It's a general-purpose language but it is most appropriate for cases where you are working with data of any kind, and would prefer to do things in a functional way. [This section](https://docs.racket-lang.org/qi/When_Should_I_Use_Qi_.html) provides some examples of where you might use it.

**How to use it?**

The language is not a `#lang`, but rather, it is an "embeddable" DSL. This means that you can use it in Racket or any other host language via a normal macro, and mixing Racket and Qi in the same source file is easy.

---

_[View the full topic](https://racket.discourse.group/t/qi-qi-but-with-real-macros/871)._
