1. 16
  1. 5

    “Procedural Reflection in Programming Languages” is an awesome work, which should be required reading for programming language designers.

    For me, one of the main results is a negative one. The language defined by the work, “3-Lisp”, is an expressiveness tarpit. The language is so expressive that there is very little that’s stable that you can rely on to help you to reason about the meaning of a program. It’s to avoid this tarpit that languages like Rust put tight constraints on reflection. Instead of granting all functions the power of full runtime reflection, there are macros that only run at compile time. And in Rust, a macro invocation has a ! character to warn you that the expression is not a function call.

    1. 2

      There’s been a lot of great stuff about meta-circular interpreters lately, and I found this be a fun case study of a novel idea in the space, featuring both contextual and implementation details c:

      Looking forward to making personal copies of the referenced works and checking them out when I’ve got spare time.