This repository contains notes and code generated as part of a study of programming language theory and practice.
This is an independent study as a part of GVSU's Computer Information Systems master's program.
The goals of this study are to learn the basics of programming language theory, pick up a few new languages, and dabble with implementing a language. To that end, I will write a simple but non-trivial program in each language under study, go through Robert Nystrom's Crafting Interpreters, and produce a writeup on what I've learned.
I come from a strong background in C with familiarity with a number of languages. Languages to study in this course will include:
- Go
- Haskell
- Rust
- Clojure
The plan outlined here is aspirational. As an independent study, my goal is to set my sights high and execute as much as I can.
Going through Crafting Interpreters in addition to learning each of these languages proved to be too much. However, see the results of the study on the wiki page, in the contents of this repo, and in particular through the following:
- Scramble Squares Solver -- a puzzle solver implemented in each language
- Final Impressions -- a summary of my lessons from the study
Jan 6 | Jan 13 | Jan 20 | Jan 27 | Feb 3 | Feb 10 | Feb 17 | Feb 24 | |
---|---|---|---|---|---|---|---|---|
Reading | GBE Hello-Switch | GBE Arrays-Methods | GBE Interfaces-Channels | LYH 1-2 | LYH 3-4 | LYH 5-6 | LYH 9-11 | RBE Hello-Flow |
Language | Go | Go | Go | Haskell | Haskell | Haskell | Haskell | Rust |
Interpreter | CI 1-3 | CI 4 | CI 5 | CI 6 | CI 7 | CI 8 | CI 9 | CI 10 |
(cont.) | Mar 2 | Mar 9 | Mar 16 | Mar 23 | Mar 30 | Apr 6 | Apr 13 |
---|---|---|---|---|---|---|---|
Reading | SB | RBE Functions-Scoping | RBE Traits-Stdlib | RBE Stdmisc-Meta | CBE Hello-Flow | CBE Boolean-Maps | CBE Sequences-Macros |
Language | SB | Rust | Rust | Rust | Clojure | Clojure | Clojure |
Interpreter | SB | CI 11 | CI 12 | CI 13 | Flex | Flex | Flex |
Reading Sources
- Crafting Interpreters (CI)
- Go By Example (GBE)
- Learn You a Haskell (LYH)
- Rust By Example (RBE)
- Clojure By Example (CBE)
This project is dual-licensed under the Unlicense and the Creative Commons Attribution 4.0 International license. Unless otherwise specified, the Unlicense is for code, and the Creative Commons license is for documentation and the wiki.
Because I am utilizing example code from other projects, see additional license notes in each subdirectory and file.