Cyan のプログラムは式の並びによって構成されます。 式はすべてが評価され、値を返します。 また、式はすべてオブジェクトとして表されます。 つまり、Cyan においては「すべて」がオブジェクトであると言えます。
例えば、1 + 2 という式は、1.(+)(2) と解釈されます。 これは、messenger というオブジェクトです。 つまり、Cyan は抽象構文木をファーストクラスのオブジェクトとして 扱うのです。子ノードはオブジェクトのスロットに格納されており、 スロットへのアクセスによってたどっていくことができます。 (ペアレントやスロットについては、 インスタンスベース・オブジェクト指向 の項に詳しく書かれています。)
このことは、プログラムをオブジェクトとして扱えることを示しています。 つまり、コードとデータを区別なく扱えるのです。 これにより、動的なコードの生成・編集が容易となります。
また、このことが Cyan における強力なマクロを支えています。 マクロが行うのはコードの編集に他ならないからです。マクロについては、 マクロの使用法の項を参照してください。