I have created several hand written compilers for very simple languages but now I want to try my hand at developing a dynamic language, similar to a simplified Python or Ruby.  However, it was easy for me to wrap my head around how compilers work.  Primitive compilers just translate.  But I can't do this if the language is dynamic.  I have to write an interpreter or VM that keeps track of information at runtime and puts a lot more work on me.In short, are there any resources I should check out considering I know how compilers work but want to migrate to creating an interpreter?  There are a few VMs out there for dynamic languages, but I have no problem with rolling my own.  This is all just for my personal experience.I am seeking information on how to go from a compiler to an interpreter.  If I have already made a compiler for language X but now what to write an interpreter, what needs to be done and are there any resources that go over the process?I do not want broad or abstract resources that go over how compilers or virtual machines work.  I have plenty of textbooks on the subject.  All of the resources I found online either assume you have 0 experience and thus start you off with lexical or syntactic analysis or they are extremely abstract.  I have a working compiler, but I now want to turn this into an interpreter and add dynamic features to the language.I could not find resources on this process, it may be too limited in scope, or resources on the back end of an interpreter without being too theoretical which is why I posted here.
Developing a dynamic language
language design;dynamic typing
First learn about implementing interpreters. I recommend PLAI (Programming Languages: Application and Interpretation). It gets to the meat of interpretation quickly without dwelling overlong on syntax. For your language, you'll be able to reuse the compiler's front-end (parser, mostly) and run-time library (GC, data structures, primitive operations, etc).Of course, you can also implement a dynamic language with a compiler that produces code that manipulates (some of) the same data structures that you would use in an interpreter. For example, in an interpreter you might implement global variables as a string-indexed hash table. In a compiler, you would compile global variable references into the code that does the lookup using the same table. In contrast, you could compile lexical variables into a more efficient representation (native arguments and closure structure references).