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. |