Pretty much what the title says.<p>AST (abstract syntax tree) interpreters are about the easiest form of language implementation to write, but they typically result in pretty slow performance due to the amount of memory they take up, the additional instructions involved in evaluating an AST, and the difficulty in making them cache-efficient. For this reason, it seems that most interpreted (or traditionally interpreted, e.g. "scripting languages") opt to use some combination of a bytecode interpreter or JIT-compilation for their most common implementations. Examples include Python , JavaScript, PHP, Lua, Perl, and so on.<p>I'm curious, however, what common (feel free to stretch the definition of "common") programming languages or implementations use an AST interpreter instead. From what I can tell it's not many - Matz's Ruby Interpreter is one of them, but I'm not very deep into the Ruby world and I don't know how common it is to use MRI vs another implementation. Besides that, I find it likely that many command line languages (bash, zsh, cmd.exe, powershell, etc.) and some Unix utils (like sed or awk, which are programming languages, albeit small ones) are implemented as simple AST interpreters since the most common usage patterns for these languages are short-running or IO-bound scripts and commands.<p>Curious to hear what everyone has to say and if any of my assumptions are incorrect.