As promised in my previous post this article will cover some of the more advanced features of Crystal, namely macros, C bindings and concurrency. Macros When coming to Crystal from Ruby, one of the biggest changes is the lack of runtime introspection that enables much of Ruby’s metaprogramming techniques. However, this can be rectified to a certain degree by using macros, which are methods that receive AST nodes at compile time which they use to write new code.