I'm going to write myself a small functional language just for fun. I've previously written an interpreter in Haskell for LC but now I want to try going the route of modern (popular, whatever) languages such as Python or Ruby. So exactly how are those languages implemented?
- Do they generate byte code for a virtual machine?
- Does the virtual machine handle garbage collection?
- What virtual machine would be good to target if I need to implement typical things such tail call optimizations and closures?
- Is parsers/lexers for modern languages handwritten or do they use something like Flex/Bison?
- Is it easier to write an interpreter in C or to generate byte code?