It is traditional for #functional #programming languages (especially those used in academic research) to target 𝜆-calculus, then have a graph reduction VM (G-machine, eg), to interpret that generated "functional assembly".
It would be interesting to switch things up a bit: instead of interpreting the generated 𝜆-calculus, translate that intermediate code into #Forth and have the Forth compiler generate byte code for a stack VM (Smalltalk VM, JVM, WASM, etc.), which can JIT compiles the byte code, if necessary.
In many ways, 𝜆-calculus and Forth are like dizygotic twins separated at birth:
• Both languages are as low-level as languages can get without devolving into machine instructions
• Both languages are unashamedly raw and untyped
• Both derive their considerable computational powers from their simplicity
• 𝜆-calculus prefix and Forth postfix have the same operational semantics
• 𝜆-calculus is declarative, but Forth is imperative
• 𝜆-calculus models a reduction machine, but Forth models a stack machine
With the resurgence of the stack architecture in the form of powerful, modern VMs, it would seem reasonable to reunite these long-lost twins.