I use Moodle for my courses, which makes it challenging to make my
course content public. The website you see below is an automatically
generated approximation of my Moodle page, based on a script that I've
run.
Monday
- Videos: Course Intros by instructor
Tuesday
- Syllabus
- Assignment: Starting Logistics
- Due Tue Apr 07 23:01:00 CDT 2020
- Video: Logistics screencast
- (Logistics optional addendum: how to install Guile locally on your own computer, if you must)
Wednesday
- Videos: Programming language paradigms and list construction in Scheme
- Supplemental reading on programming language paradigms
- Scheme Lab 1
Friday
- Videos: Scheme functions, lists, quote, recursion, and auto-testing
- Reference: The Scheme Programming Language (very useful book)
- Scheme Lab 2
Week 2
Monday
- Videos: Scheme memory and list construction examples, and overview of lazy lists (video added 4/10, 3:30pm)
- Supplemental reading: The Scheme Programming Language reference book on list construction
- Binary Search Trees
Wednesday
- Videos: currying and higher order functions
- Supplemental reading: Scheme coding style
- Supplemental reading: Scheme commenting style
- Supplemental reading: Currying
- Add'l Video: Tracing your Scheme code
- Lazy Lists
Friday
- Videos: scripting, sieve, and TCO
- Supplemental reading: Tail call optimization
- Supplemental reading: Opinions on tail call optimization (i.e., TRE) by creator of Python
- Assignment: Currying and higher order functions (pair)
- Due Fri Apr 17 23:00:00 CDT 2020
- Currying and higher order functions
Week 3
Monday
- Videos: intro week 3, C, language models
- Important reference: C Programming Boot Camp
- Supplemental reading: value vs reference model
- Video from 4/20 sync class
- Sieve of Eratosthenes
Wednesday
- Videos: pointers and stack-vs-heap in C
- One more video: Pointer Fun with Binky
- Supplemental reading: stack vs. heap
- Supplemental reading: pointers
- (How to install C and Valgrind locally on your own computer, if you must)
- Introductory C lab 1
Friday
- Videos: Linked list in C (inserting, traversing, and some C along the way)
- Introductory C lab 2
Week 4
Monday
- Videos: Finishing linked list in C, arrays, strings
- Supplemental reading: Strings in C
- Supplemental reading: C coding style
- Supplemental reading: Valgrind error documentation
- Video from 4/27 sync class
- Sample code for Monday morning sync class
Wednesday
- Videos: vectors, gdb, include guards, compilers/interpreters
- Supplemental reading: gdb tutorial
- Supplemental reading: include guards
- Supplemental reading: compiler
- Supplemental reading: interpreter
- Vectors
Friday
- Videos: First 2 steps of project, interpreter construction, BNF
- Supplemental reading: Grammars and Trees (section on grammars)
- Supplemental reference: syntax specifications for some popular languages
Week 5
Monday
- Midterm break: no synchronous class or videos.
Wednesday
- Videos: derivations, parsing (LL, LR, Scheme)
- Supplemental reading: Grammars and Trees (section on semantics of parse trees)
- Supplemental reading: section 2.3.0 (i.e., stop at...
- Interpreter part 1, Linked List
Friday
- Videos: tokenizer, recursive descent parsing
- Supplemental reading: section 2.3.1 from Programmi...
- Interpreter part 2, Talloc
Week 6
Monday
- Videos: recursive decent parsing PREDICT sets. (This was one long video that I broke up into 3 pieces.)
- Supplemental reading: section 2.3.2 from Programmi...
- Video from 5/11 sync class
- No assignment due. (Tokenizer should be in progres...
Wednesday
- Videos: Parser assignment, and Scheme local variables
- Interpreter part 3, Tokenizer
Friday
- Videos: Scoping
- Supplemental reading: scope and extent
- No assignment due. (Parser should be in progress.)
Week 7
Monday
- Videos: interpreter part 5
- Supplemental reading: The Environment Model of Evaluation
- Video from 5/18 sync class
- Interpreter part 4, Parser
Wednesday
- Videos: Lambda in other languages, quote
- No assignment due. (If/let should be in progress.)
Friday
- Videos: how malloc works
- Supplemental reading: memory allocation
- Supplemental reading: A Fast Storage Allocator
- Supplemental example: CPython's heap management code
- Interpreter part 5, if/let
Week 8
Monday
- Videos: closures and lambda assignment
- Supplemental reading: Procedures are closures
- Video 1 from 5/25 sync class
- Video 2 from 5/25 sync class
- Interpreter part 6, quote
Wednesday
- Videos: tombstones, keys/locks, reference counters
- Supplemental reading: dangling pointers
- Supplemental reading: Reference counting
- No assignment due. (define/lambda should be in pro...
Friday
- Videos: function pointers, primitives, mark-and-sweep
- Supplemental reading: Tracing garbage collection
- Interpreter part 7, define/lambda
Week 9
Monday
- Videos: let, let*, and letrec
- Supplemental reading: let, let*, and letrec
- Supplemental reading: fixing letrec
- Video from 6/1 sync class
- No assignment due. (primitives should be in progre...
Wednesday
- Videos: final project details, wrapup thoughts
- Interpreter part 8, primitives
Week 10
Monday
- Interpreter part 9, last portion
- Devious interpreter correctness test: Knuth's Test, in Scheme
- Citation for Knuth's Test