Overview
Course in brief
The course introduces you to the design and development of programming languages, while teaching you a few programming languages on the side. We start with learning the principles of Dart programming language, which is followed by creating an interpreter for the BASIC programming language. We then move on to functional programming, learning the Gleam programming language, and then learn about the principles of programming language design. This is followed by learning the Rust programming language, and more advanced programming language design principles. The course concludes with a brief overview of compilers and how one could turn an interpreted language into a compiled one, as well as a brief overview of evolution of programming languages.
The structure of the course is as follows. The colors are used to indicate the primary programming language used during the part.
Learning objectives
The high-level learning objectives of the course are as follows:
- You know of the history and evolution of programming languages.
- You understand the underlying principles of programming languages, including how programming languages work, how compilers work, and how programming languages are designed and built.
- You understand the differences between low-level and high-level programming and know common programming paradigms.
- You practice programming with contemporary programming languages and understand how programming languages can be used to tackle different problems at different abstraction levels.
- You understand the need to pick the right tools for the right job.
- You can implement a programming language including the parser, a static type system and dynamics (evaluation).
Each chapter has specific learning objectives that are detailed at the beginning of the chapter.
Prerequisites
To succeed in the course, you should have prior programming experience, know the basics of programming languages, and should be familiar with data structures and algorithms. In addition to programming, you should be comfortable with reading mathematical notation, as some parts of the course include mathematical concepts.
If you are unsure whether you have the required background knowledge, you can always start with the course and see how it goes. If you find that you are missing some background knowledge, you can always go back and study the required topics.