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.
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.