Are you going to allow direct pointer access or not? What are the data types of your language? Is it a static or dynamic language? What is your memory model? Are you going to use a garbage collector or manual memory management? (If you use a garbage collector, prepare to write one or adapt an existing one to your language. ) How are going to handle concurrency? Are you going to use a simple threading/locking model or something more complex like Linda or the actor model? (Since nowadays computers have multiple cores. ) Are there primitive functions embedded in the language or will everything come from a library? What is the paradigm or paradigms of your language? Functional? Object-oriented? Prototype (like JavaScript)? Aspect-oriented? Template oriented? Or something entirely new? How is your language going to interface with existing libraries and languages (mainly C)? This point is important if you’re building a domain-specific language. Finally, some of the answers to these questions are going to be answered by the second step and will help you answer the next step.

Be careful to keep your language in the context-free language category or something inside it. Your parser generator and you will appreciate it later on.

Also, think about how your compiler/interpreter will warn your user about erroneous programs and syntax errors.

Also, depending on your language, you may also want to create virtual pointer tables or information tables for your classes (in order to support reflection or RTTI).

You want to create programs that stress the burdens of your formal grammar in order to see that your compiler accepts everything that is inside your definition and rejects everything that is outside of it.

Specifically, if you write a compiler, you will need the code that the operating system will execute in order to begin running the user code (for example, allocating all global variables).

Don’t forget to document how you can integrate with existing libraries, languages and how to use the runtime features and/or standard library.