i.e. it seems natural in Python and C++ (and Java and Rust …)
But I did notice the term "open recursion" in Siek's Essentials of Compilation - https://mitpress.mit.edu/9780262048248/essentials-of-compila...
To make our interpreters extensible we need something called "open recursion", in which the tying of the recursive knot is delayed until the functions are composed. Objected-oriented languages provide open recursion via method overriding
---
I mentioned that here too, on a thread about a type checker: https://news.ycombinator.com/item?id=45151620
To me the open recursion style clearly seems like a better default than VISITORS?
You can still REUSE traversal logic, and you don't "lose the stack", as I pointed out in the comment below: https://news.ycombinator.com/item?id=45160402
Am I missing something? I noticed there is a significant disagreement about style, which seems to not have a clear rationale: MyPy uses visitors all over, while TypeScript uses switch statements
This is a big difference! It affects nearly every line of code, and these projects have a ton of code ...
It's not that it doesn't support this, it is just explicit.
It can be similarly difficult to explain to people what structured programming is, because basically everything is structured programming now. The hard part is understanding what non-structured programming is, so that you can then understand the contrasts, because there is so little experience with it anymore.
You implement a garbage traversal routine for it, which recurses over traversing the child objects.
The system is open to extension; the garbage collector doesn't just have a switch statement to handle all the known objects. It may have that too, but for some object kinds, it dispatches their method.