The overarching topic of CS221 is scientific programming language design. The subtopics surveyed include the lambda calculus, dynamic and static semantics, programming language theorems and proof techniques, machine-assisted proofs, and selections of classic and recent literature in programming languages research. Work completed using SML and Coq.
Includes the implementation of a handful of simple languages (including all necessary machinery to compile to SML). Also includes some automated testing of proofs in Coq and exercises from Types and Programming Languages, by Benjamin Pierce.
The course focuses on the principles and techniques used in the development of networked and distributed software. Topics include programming with sockets; concurrent programming; data link layer (Ethernet, packet switching, etc.); internet and routing protocols (IP, IPv6, ARP, etc.); end-to-end protocols (UDP, TCP); and other commonly used network protocols and techniques. Projects are completed in C for a UNIX environment.
-
chIRC: an Internet Relay Protocol server (partially compliant with RFC 2810, 2811, 2812, and 2813) using POSIX sockets and pthreads
-
chiTCP: an implementation of the Transmission Control Protocol
-
simple-router: an implementation of an Internet router using the Mininet network emulator