CS 331 Spring 2026: Programming Languages
CS 331 Spring 2026
Programming Languages
Department:
Computer Science,
UAF
Instructor:
Glenn G. Chappell
Office: 539 Duckering
Office Hours:
In person 3:30–4:30 pm MW,
1:15–3:15 pm T,
1:15–2:15 pm Th
on spring 2026 class days,
or by appointment;
private Zoom meetings available on request
E-mail:
ggchappell@alaska.edu
Zoom for presentations (passcode sent via e-mail):
https://alaska.zoom.us/j/82013470406.
Announcements
- [Apr 27] No More Office Hours
My office hours for spring 2026 have ended. I am still available by appointment (and via e-mail).
Course Materials
Materials are listed with the most
recent at the top.
| Week | Class Meetings | Readings & Homework |
Handouts & Code
See
Git repository
for code
|
|---|---|---|---|
|
Week 15 & Finals Apr 27–May 1 |
|
||
|
Week 14 Apr 20–24 |
|
|
|
|
Week 13 Apr 13–17 |
|
|
|
|
Week 12 Apr 6–10 |
|
|
|
|
Week 11 Mar 30–Apr 3 |
|
|
|
|
Week 10 Mar 23–27 |
|
|
|
|
Week 9 Mar 16–20 |
|
|
|
|
Spring Break Mar 9–13 |
|||
|
Week 8 Mar 2–6 |
|
||
|
Week 7 Feb 23–27 |
|
|
|
|
Week 6 Feb 16–20 |
|
|
|
|
Week 5 Feb 9–13 |
|
|
|
|
Week 4 Feb 2–6 |
|
|
|
|
Week 3 Jan 26–30 |
|
|
|
|
Week 2 Jan 19–23 |
|
|
|
|
Week 1 Jan 12–16 |
|
|
|
Links
External links last checked 2026-04-01.
Version Control
- Git
- Git is the the version-control software used in this class. This site includes downloads and a helpful tutorial.
- Learn Git Branching
- An excellent tutorial. If you are familiar with the Git operations clone, pull, push, add, and commit, but you are having trouble wrapping your head around branching, then this is for you.
- Class Git Repository
- Source code for the class will be kept in this repository.
Programming Language References
- Language Reference from The Swift Programming Language
- The book that include the offical specification of the Swift programming language.
- Python Lexical Structure
- The official documentation on the lexical structure of Python.
- Python Full Grammar Specification
- The parsing expression grammar that specifies the syntax of the latest version of the Python programming language.
- Lua 5.2 Reference Manual
- The official Lua reference manual. The lexical structure is covered in Section 3.1. A grammar for Lua is at the bottom of the page. Operator precedence is covered in Section 3.4.7.
- Haskell 2010 Language Report [PDF]
- The official published Standard for the Haskell programming language.
- C++ language and library references
- A collection of useful links on the cppreference.com site. It includes a link to the final working draft for each of the recent C++ Standards. Strictly speaking, this draft is not the actual Standard, but it might as well be.
- C++ 2023 Standard Final Working Draft [PDF] warning: over 2000 pages long
- The final working draft for the 2023 ISO C++ Standard. The only significant difference between this document and the official published C++ Standard is that the latter has the “working draft” wording removed.
- Revised7 Report on the Algorithmic Language Scheme
- The current official Scheme specification. The main page has links to other forms of the report.
Readings
Links to supplemental readings will be posted here as they are assigned.
Links to these will also be in the “Readings & Homework”
column of the Course Materials section, above.
- Compilers and Interpreters
- A short article I wrote about the different kinds of programs that allow us to execute code.
- LuaTutorial
- A nice tutorial on the Lua programming language. Part of the Lua-Users Wiki, a site chock full of information about Lua. The assigned reading is the first 9 sections: LuaTypesTutorial through ScopeTutorial. However, the whole tutorial is worthwhile, I think.
- A Primer on Type Systems
- My introduction to type systems, types, and associated concepts.
- Learn Haskell in 10 minutes
- A short introduction to Haskell, for people who already know something about programming, from HaskellWiki.
- Reflection in Programming
- My very short introduction to reflection.
- Identifiers, Values, and Variables
- My introduction to programming-language identifiers, values, and related terminology.
- A Quick Introduction to Scheme
- My introduction to the Scheme programming language. This uses DrRacket.
- Programming-Language Execution Models
- What task drives the execution of a program? What strategy is used to complete this task? This is a look at the answers to these questions for various PLs, including Prolog.
- A Quick Introduction to Prolog
- My introduction to the Prolog programming language. This uses SWI-Prolog.
Stuff Mentioned in Class
- Wikipedia Page on Operational Semantics
- This page contains examples of the standard notation for “small-step” operational semantics.