Lectures

Number Date Topic Slides
1 Wednesday, January 31 Course intro 334-01-lecture_2024-01-31.pdf
2 Tuesday, February 6 What is a Language? 334-02-lecture_2024-02-06.pdf
3 Thursday, February 8 F# Intro 334-03-lecture_2024-02-08.pdf
Truncated lecture due to fire alarm. Note that the reading in the course packet has everything you need to know for Lab 1.
4 Tuesday, February 13 Pattern matching 334-04-lecture_2024-02-13.pdf
5 Thursday, February 16 Algebraic Data Types 334-05-lecture_2024-02-15.pdf
Quiz 2 solutions:
    solution1.fs (basic use of pattern)
    solution2.fs (pattern with when)
    solution3.fs (pattern with option)
6 Tuesday, February 20 BNF, lambda calculus syntax 334-06-lecture_2024-02-20.pdf
If you missed the lecture because you were out sick, you can watch this video.
7 Thursday, February 22 Alpha and beta reduction 334-07-lecture_2024-02-22.pdf
If you missed class because of recent events, you can watch this video.
We had a class activity instead of a quiz. You can find the solution here.
8 Tuesday, February 27 Abstract syntax trees and more reductions 334-08-lecture_2024-02-27.pdf
There is a practice problem at the end of the slide deck and the (unnecessarily detailed) solution is here.
9 Thursday, February 29 Higher-order functions 334-09-lecture_2024-02-29.pdf
Quiz solution.
10 Tuesday, March 5 Mo HOFs, mo computability 334-10-lecture_2024-03-05.pdf
Quiz solution.
11 Thursday, March 7 Decidability 334-11-lecture_2024-03-07.pdf
Quiz solution.
Lambda-o-Matic.
12 Tuesday, April 2 Proof by reduction 334-12-lecture_2024-04-02.pdf
13 Thursday, April 4 Language architecture 334-13-lecture_2024-04-04.pdf
Quiz solution.
14 Tuesday, April 9 Growing a language No slides. Instead, we started watching Guy Steele's lecture, Growing a Language. We watched the first 23 minutes of the talk. Please finish watching before Thursday's class.
15 Thursday, April 11 Designing a language No slides. Instead, we went to WCMA and did a language design exercise.
16 Tuesday, April 16 Parsing 334-16-lecture_2024-04-16.pdf
Our bracelang implementation:
    bracelang.fsproj
    Combinator.fs (combinator library)
    Library.fs (our parser definition)
    Program.fs (main program and REPL loop)
17 Thursday, April 18 Program interpretation 334-17-lecture_2024-04-18.pdf
Quiz solution.
Our pluslang implementation:
    pluslang.fsproj
    Combinator.fs (combinator library)
    Library.fs (parser and evaluator definitions)
    Program.fs (main program)
18 Tuesday, April 23 An evaluator that produces graphics 334-18-lecture_2024-04-23.pdf
Here's a live coding video from a couple years ago where I build the same language.
Our linelang implementation:
    linelang.fsproj
    Combinator.fs
    AST.fs
    Parser.fs
    Evaluator.fs
    Program.fs
Some linelang programs:
    simple.line
    complex.line
19 Thursday, April 25 Variables 334-19-lecture_2024-04-25.pdf
Quiz solution.
The complete source code for blub:
    blub.fsproj
    Combinator.fs
    AST.fs
    Parser.fs
    Evaluator.fs
    Program.fs
Sample blub programs:
    helloworld.blub
    simplemath.blub
    simplemath2.blub
    math.blub
    hellovariable.blub
    weird_but_actually_ok.blub
20 Tuesday, April 30 Testing / Midterm exam review 334-20-lecture_2024-04-30.pdf
Note that I updated the solution handout with a fix for my mistake in the function graph for gcd and I included the clever alternative reduction that Amir came up with.\
21 Tuesday, May 2 Packages / Object-oriented programming 334-21-lecture_2024-05-07.pdf
Here's a link to Dan Ingalls' talk on OOP at Apple Computer.
Here's a live demonstration of the Smalltalk-76 system so that you can see what it was like to work on the Xerox Alto. Keep in mind that this was the first computer that had what we think of as a modern graphical user interface. You can see why the folks at Apple Computer were blown away!
A program that uses a NuGet package:
    image-program-with-package.fsproj
    Program.fs
I added this package to my project by running dotnet add package SixLabors.ImageSharp.Drawing --version 2.1.3
You can find the appropriate dotnet add string to use at nuget.org.
22 Tuesday, May 2 Object-oriented inheritance / How to give a good talk 334-22-lecture_2024-05-09.pdf
A program that demonstrates that Java passes the Ingalls test for extensibility (aka the "rectangle test"):
    RectangleTest.java
If you would like to meet about your final project, schedule a project one-on-one meeting with me. Please limit yourself to one meeting to give everyone a chance to meet.
  • CSCI 334: Principles of Programming Languages, Spring 2024

CSCI 334 website repository, Spring 2024

Powered by Bootstrap 4 Github Pages