Lectures
| Number | Date | Topic | Slides |
|---|---|---|---|
| 1 | Thursday, September 8 | Course intro |
Slides |
| 2 | Tuesday, September 13 | Language models |
Slides |
| 3 | Thursday, September 15 | ML |
Slides Audio recording |
| 4 | Tuesday, September 20 | ML, part 2 |
Slides Video recording |
| 5 | Thursday, September 22 | Higher order functions |
Slides Sorry, I flubbed the recording. I forgot to press the "record" button. |
| 6 | Tuesday, September 27 | What can computers do? / Lambda calculus syntax |
Slides Video recording |
| n/a | Thursday, September 29 | (no class) |
No class; giving a talk at NEPLS. If you're curious, you can watch a version of the same talk by my coauthor. Totally optional, but Charlie is an awesome speaker, and you'll get a sense of why I think PL is exciting. |
| 7 | Tuesday, October 4 | Lambda calculus semantics |
Slides Solution to problem discussed in class |
| 8 | Tuesday, October 6 | Computability, part 1 |
Slides Function graph activity Function graph activity solution |
| 9 | Thursday, October 13 | Computability, part 2 |
Slides |
| 10 | Tuesday, October 18 | Designing a language (at WCMA) |
No slides, just this activity. |
| 11 | Thursday, October 20 | C, part 1 |
Slides A helloworld program: helloworld.c A program that explores pointer operations: address_of.c A program with three source files and a Makefile to stitch them together: a.c a.h b.c b.h c.c Makefile (the one we wrote in class) Makefile (an even better one, using variables to factor out common parts) |
| 12 | Tuesday, October 25 | C, part 2 |
Slides A simple string manipulation program that already (!!!) has a bug: string_mistake.c A program that fails... mysteriously: what_went_wrong.c |
| 13 | Thursday, October 27 | C, part 3 |
Slides Using a dynamically-allocated struct: person.c A C# program that demonstrates the difference between call-by-value and call-by-reference: Program.cs call-by-reference.csproj (run with 'dotnet run') |
| 13 | Tuesday, November 1 | midterm exam review | |
| n/a | Thursday, November 4 | midterm exam | |
| 14 | Tuesday, November 8 | Compilers vs interpreters, parsing part 1 |
Slides |
| 15 | Thursday, November 10 | Parsing part 2 |
Slides Also, here's a video from last semester where I build bracelang from start to finish. Fast-forward to 22:20 to see the bracelang parts. |
| 16 | Tuesday, November 15 | Building an interpreter from start to finish |
Slides The "pluslang" interpreter: pluslang.zip |
| 17 | Thursday, November 17 | Building an interpreter that produces graphics |
(no slides, just a video) An SVG file that you can open in your browser: test.svg The "linelang" interpreter: linelang.zip Some "linelang" programs: simple.line complex.line |
| 18 | Tuesday, November 22 | Variables |
Slides and video. The "blub" interpreter: blub.tgz |
| 19 | Tuesday, November 29 | Scope and unit testing |
Slides and video. The "blub" interpreter, now with unit tests: blub-with-tests.zip |
| 20 | Thursday, December 1 | Type inference |
Slides and video. |
| 21 | Tuesday, December 6 | Object-oriented programming systems |
Slides. You can watch the rest of Dan Ingalls' talk here if you want (optional). Also, Dan did a live coding demo in Smalltalk at the Computer History Museum a few years ago, so if you're curious for what the real system looked like, have a look (optional). Finally, here's my demonstration of the Ingalls extensibility test for Java that we did in class: Demo.java |
| 22 | Thursday, December 8 | Wrap-up | Slides and video. |