While we are going to work with arbitrary source code as data, we need some host language, in which we implementing the core of a metaprogramming system and most transformation over the code models.

Alchemist Camp

multiline string literals

Not many programming languages have it. They are important because we need to input a lot of source code constants as code snippets, which sometimes has a notably complex syntax itself (Python tabbing, complex C++ syntax, verbose Java, deeply nested HTML,..).

Python has a problem with multiple strings: its parser does not remove left tabbing used in Python code itself, so every multiline text constant must start from the leftmost edge of a screen that breaks the program view.

string interpolation

Next more important. Code snippets must be parametric: we should be able to insert computable elements here and there across the block of code without breaking its syntax form. The less short inserts we have, then the lesser impact on readability we produce.

extendable syntax and metaprogramming via syntax macroses

Host languages with such abilities are the best case for using them as a core runtime for your own custom extensions lets you use your own eDSL optimized for tasks you are solving.

complex composite data structures

Working with arbitrary computer language syntax forces you to build graph-like data structures are well known in compiler construction: Abstract Syntax Tree (AST), symbol table, inheritance tree, data-flow graph, etc.

The host language you are using must provide support for these like data structures directly in its syntax and runtime. The more such features provided, the more this language is suitable for manipulating source code and metaprogramming in a wide. Besides the Elixir, the other language that can be noted as comparable is Clojure. You will be also attacked with recommendations to use Lisp but it uses too low-level lists. Also, Prolog has the power of unification but it is an alien language that I know anybody can use it.

some required features:

pattern matching over data structures

Pattern Matching over object graph

Python stucks!