Materials in this book are distributed under the terms of Creative Commons BY-NC-SA 4.0
This book assumes some basic knowledge of Rust language. Please take a look at the official Rust book.
The accompanying codes and materials for this book are available in GitHub. To follow along, make sure you have
Cloned the repository
git clone https://github.com/ehsanmok/create-your-own-lang-with-rust cd create-your-own-lang-with-rust
LLVM installed to run and test locally
cargo test --tests
This book arises from my frustration of not finding modern, clear and concise teaching materials that are readily accessible to beginners like me who wants to learn a bit on how to create their own programming language.
The following are my guidelines
"If you don't know how compilers work, then you don't know how computers work" 1
"If you can’t explain something in simple terms, you don’t understand it" 2
Pedagogically, one of the most effective methods of teaching is co-creating interactively. Introducing the core aspects around the simplest example (here, our calculator language) helps a lot to build knowledge and confidence. For that, we will use mature technologies instead of spending tone of time on partially reinventing-the-wheel and bore the reader.
Here is the outline of the contents
- Crash Course on Computing which we briefly set up the definitions and foundations
- We create our first programming language
Calcthat supports simple integer addition and subtraction. The simplicity allows us to touch a lot of important topics. We will use PEG to define our grammar, pest to generate our
CalcParserand explain what AST is and interpreting the AST means. Next, we will introduce JIT compilation and use inkwell to JIT compile our
Calclanguage from its AST. To show an alternative compilation approach, we will create a Virtual Machine and a Runtime environment and discuss its features. Finally, we will write a simple REPL for our
Calclanguage and test out different execution paths.
- TODO: We will introduce
Jeslang(a statically typed language) and gradually work our way up from
Calclanguage to create
- TODO: Object system and object oriented programming
- TODO: Functional language
- TENTATIVE: Module system and packaging
- TENTATIVE: Create a mini standard library
- TODO: Resources
If you have found this book useful, please consider donating to any of the organizations below