Parse, don’t type-check
It&#x27;s the message you should really take away from meta-programming in LISP is that code is a message that can be read different ways.<p>That&#x27;s limited though by practical considerations such as the Turing and Gödel results, how your algorithms scale with problem size, etc.<p>There is room for a revolution in parsing tools,  but it seems almost every attempt falls short.  (PEG in Python is the latest,  maybe they will expose a general purpose interface to it someday,  but by then certain performance concerns will be so baked in that features that expand use-cases for parsing such as automatic unparsing and round-tripping won&#x27;t materialize)<p>We are still coding to 1970&#x27;s style &#x27;callback hell&#x27; interfaces from yacc when we should be able to write one grammar and get not just the parser but also a set of semantic structures,  for instance if you were parsing Java in Java you&#x27;d have objects to represent expressions,  operators,  etc.