Qi++: Qi but with Real Macros

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

4 Likes