This page will be removed on August 6th 2026. Please update your links to refer to https://esb.ics.hawaii.edu/2021fall.ics313/index.html instead.
Programming Language Theory, ICS 313
This page is
http://www2.hawaii.edu/~esb/2021fall.ics313/index.html
This page is subject to change without notice -- please reload it
in your browser if an item that might affect you may have changed.
The organization of the course is described here. Please review it at the beginning
of the course and occasionally during the course. It includes
information about course goals, class time and location, contacting
the instructor, the textbook, grading, and the
no cheating policy.
If you have any questions, please contact the instructor.
Schedule
This schedule is subject to change.
The class is scheduled Mondays and Wednesdays 10:30am-11:45am on zoom.
The instructor's office hours are 3-4pm MW, on Zoom.
-- see here for details. Details of the zoom
meeting information are available in the resources on Laulima.
The instructor usually posts the presentation notes no later than the
day before the lecture.
- Mon, Aug 23. Course introductions, course summary, variety of programming languages, compilation and interpretation. Programming Language Pragmatics, Chapter 1 (every section, except section 1.6 can be skimmed).
Presentation
- introductions
- course overview
- variety of programming languages
- compilation and interpretation
- creating a new programming language
- Wed, Aug 25. Practical Common Lisp Chapter 1.
Presentation
- compilation and interpretation
- creating a new programming language
- LISP
- Mon, Aug 30. Practical Common Lisp: Chapter 3, Chapter 4.
Presentation
- Standard LISP objects
- LISP function definition
- Lists as data structures, property lists, dolist
- Global variables
- LISP syntax and semantics
- Wed, Sep 1. Using Unix Systems
Presentation
- some history
- uhunix
- command line
- control-characters: EOF/^D, interrupt/^C
- file commands
- editors
homework 1 assigned, due Friday, September 10th, 11:55pm.
- Wed, Sep 8. Functional Programming Languages. Programming Language Pragmatics, Chapter 11-11.2, 1.5-1.7, skim sections 11.3, 11.8. Practical Common Lisp, Chapter 5.
Presentation
- functional programming
- lambda expressions
- currying
- purely functional programming
- Mon, Sep 13. LISP lists. Practical Common Lisp, Chapter 12.
Presentation
- cons, car, cdr
- append
- recursive list processing
- other cons-based data structures
- Wed, Sep 15. Practical Common Lisp, Chapter 10.
Presentation
- recursive list processing
- other cons-based data structures
- collections: vectors, arrays, hash tables
- LISP equality
homework 2 assigned, due Wednesday, September 22nd, 11:55pm.
See also the 1977
Turing award lecture.
- Mon, Sep 20. Practical Common Lisp, Chapter 11.
Presentation
- functional programming in LISP
- collections: vectors, arrays, hash tables
- LISP equality
- Wed, Sep 22. Practical Common Lisp Chapters 7 and 8.
Presentation
- collections: vectors, arrays, hash tables
- quote and backtick
- LISP macros
- Mon, Sep 27. Midterm exam 1.
- Wed, Sep 29. Introduction to OCAML. Programming Language Pragmatics, Chapter 11.4-11.8.
Presentation
- LISP with different syntax
- using the compiler
- let expressions
- functions and recursive functions
- types and type inference
- lists and pattern matching
- higher-order functions
homework 3 assigned, due Friday, October 8th, 11:55pm.
- Mon, Oct 4. More OCAML. Evaluation orders. Programming Language Pragmatics, Section 6.6.2 (Applicative- and Normal-Order Evaluation) and Section 9.3 (Parameter Passing)
Presentation
- more data structures
- more pattern matching
- imperative programming: references, arrays, exceptions
- evaluation order: applicative (strict) order and normal order --
eager evaluation and lazy evaluation
- Wed, Oct 6. Names, Scopes, and Bindings. Programming Language Pragmatics, Chapter 3.
Presentation
- names in programming languages
- binding times
- overview of storage management
- scope
- nested scope
- Mon, Oct 11. Syntax. Programming Language Pragmatics, Chapter 2.
Presentation
- scope
- nested scope
- separate compilation, modules and classes
- aliasing and overloading
- closures
- syntax
- lexical scanning
- parsing
- Wed, Oct 13.
Presentation
- syntax
- lexical scanning
- parsing
- semantics
- annotated syntax trees
- compiler passes and code generation
- interpreters
homework 4 assigned, due Wednesday, October 27th, 11:55pm.
- Mon, Oct 18. Introduction to Prolog. Programming Language Pragmatics, Chapter 12.
- Wed, Oct 20.
Presentation
- predicate calculus
- Horn clauses
- introduction to Prolog
- Mon, Oct 25.
Presentation
- example of Prolog backtracking
- Prolog negation
- Prolog arithmetic
- Prolog imperative features
- Prolog reflection
- Wed, Oct 27. Exam review.
Presentation
- ocaml
- type inference
- let expressions
- pattern matching
- evaluation order: applicative/eager/strict, normal/lazy
- logic programming
- prolog
- unification
- resolution
- backtracking
- cut and imperative features
- assignments
- Mon, Nov 1. Midterm exam 2.
- Wed, Nov 3. Scripting Languages. Programming Language Pragmatics, Chapter 14.
Presentation
- shell command interpreters
- text processing languages
- scripting languages
- shell scripts
- filename expansion and pattern matching
- scripting languages and web scripting
homework 5 assigned, due Friday, November 12th, 11:55pm.
- Mon, Nov 8. Scripting Languages and Python.
In the Python tutorial, read all of
Section 3,
Section 4,
Section 6,
and skim
Section 9,
Section 10,
and the documentation for
regular expressions.
Presentation
- shell command interpreters
- text processing languages
- scripting languages
- shell scripts
- filename expansion and pattern matching
- scripting languages and web scripting
Source code:
See also here
- Wed, Nov 10. Python.
Presentation
- GUI programs
- sequences and other data structures
- pattern matching
- regular expressions
homework 6 assigned, due Friday, November 19th, 11:55pm.
- Mon, Nov 15. Python Libraries. Read
Section 10
of the tutorial.
Presentation
- os (operating system) and sys (system I/O and exit)
- file wildcards
- command-line arguments
- mathematics
- internet access and email
- dates and times, program timing
- compression, doctest, unittest, and more!
- Wed, Nov 17.
Python Libraries. Read
Section 11 and
the pip part
of the tutorial.
Presentation
- multithreading
- weak references
- decimal floating point arithmetic
- pip
- pack and unpack
- output formatting, locales, and templates
homework 7 assigned, due Friday, December 3rd, 11:55pm.
- Mon, Nov 22. Read Programming Language Pragmatics, Chapter 13.
Presentation
- multithreading
- vector operations
- synchronization
- atomic operations
- race conditions
- critical regions
- locks
- monitors
- Wed, Nov 24. Multiprocessing and threads.
Presentation
- thread creation
- thread scheduling
- implementation of synchronization
- Mon, Nov 29. Synchronization, deadlocks, and semaphores.
Presentation
- implementation of synchronization
- deadlock and dining philosophers
- semaphores
- the bounded-buffer problem and network queues
- transactions
- Wed, Dec 1. Transactions and other forms of parallel programming.
Presentation
- network queues
- transactions
- futures
- parallel logic programming
- Mon, Dec 6. RPC and Message Passing.
Presentation
- remote procedure call (RPC)
- synchronous message passing
- asynchronous message passing
- deadlock
- MPI
- Wed, Dec 8. Course review.
Presentation
- languages: LISP, Ocaml, Prolog, Python, and practice using these languages
- ideas: names, syntax, and semantics, evaluation order,
functional programming and purely functional code,
logic programming,
scripting languages,
parallel processing
- assignments this semester
The final exam for this class is scheduled for Monday December 13th, from 9:45am to 11:45am. The exam is on the material in the entire course, with some emphasis on the material since exam 2.
Anyone wishing to take the final exam early please contact the instructor before December 5th.