Professor Robert "Corky" Cartwright
Department of Computer Science
Houston, Texas, USA
Lecture: Room 1042, Duncan Hall, Monday, Wednesday, Friday, 1:00pm–1:50pm
For more information on the course staff including office hours, see course information.COMP 411 is an introduction to the principles of programming languages. It focuses on:
A secondary theme is software engineering. All of the programming assignments in this course are conducted in Scala using test-driven development and pair-programming, two of the major tenets of Extreme Programming. Scala is a putative successor to Java and runs on the Java Virtual Machine. Scala is fully compatible with compiled Java code. The Scala core libraries are an extension of the Java core libraries. In fact, it is possible to develop projects written partly in Scala and partly in Java, although we do not recommend using Java instead of Scala unless there is a strong external reason such as a project that extends an existing Java code base.
COMP 411 consists of three parts:
Students who complete this course will be able to analyze the semantics and pragmatics of the old, new, and future programming languages that they are likely to encounter in the workplace (e.g., Fortran, C, C++, Java, Visual Basic, C#, Perl, Clojure, Groovy). They will also be able to build efficient interpreters for new languages or for "special-purpose" languages embeded in software applications. Finally, they will be much be equipped as software developers because they will understand how to define and implement whatever linguistic extensions are appropriate for simplifying the construction a particular software system.
Please take a look at the course information some of which was discussed during the first few class lectures.
Please refer to the assignments column in the below.
# | Date | Day | Topic | References | Assignment |
---|---|---|---|---|---|
1 | 8/20 | M | Motivation for Studying Programming Languages |
Information
Notes on Object-Oriented Program Design Slides on how OOP can be cast as an enrichment of FP |
Program 0 assigned, 8/21 |
0 | 8/22 | W | Scala vs. Java |
Good online textbook on Scala Scala Syntax Summary Scala Quick Reference |
|
0.5 | 8/24 | F |
Program 0.5 assigned, 8/24
Program 0 Solutions including a pattern-matching version |
||
2 | 8/27 | M | Syntax |
Syntax and Simple Parsing
Component Pascal Syntax Diagrams |
|
3 | 8/29 | W | Parsing | PLAI, ch. 3-4 | |
8/31 | F | Parsing cont. | |||
9/3 | M | Labor Day Holiday | |||
4 | 9/5 | W | Scope of Variables |
The Scope of Variables
Syntactic Interpreters (including code in Scheme) | |
5 | 9/5 | W | Syntactic Interpretation|||
6 | 9/7 | F | Syntactic Interpretation cont. |
Brief Review of Lectures 1-6
Syntactic Interpreter Scala Code Overview of the SKI Combinator Calculus" |
|
7 | 9/10 | M | Semantic Interpretation | A Meta Interpreter for LC Eliminating Meta-errors PLAI, Ch. 4-6 | |
8 | 9/12 | W | Semantic Intrerpetation cont. | ||
9 | 9/14 | F | Semantics of Recursion: Overview |
Data Domains Supporting Recursive Definitions
Recursive Definitions and Environments Domain Theory: An Introduction The Why of Y Recursive Programs as Definitions in First-Order Logic Types as Intervals The Lambda Calculus as a Model of Computation Review of the Pure Lambda-Calculus |
|
10 | 9/17 | M | Semantics of Recursion I |
Project 1 due 12 noon, 9/17
Project 2 assigned, 9/17 |
|
11 | 9/19 | W | Semantics of Recursion II | ||
12 | 9/21 | F | Recursive Binding |
Essentials, ch. 3.7, 3.9
Hand Evaluation Exercises Solution to Hand Evaluation Exercises |
Project 2 due 12 noon, 10/1 |
9/24 | M | ||||
9/26 | W | ||||
13 | 9/28 | F | Eliminating Binding | ||
14 | 10/1 | M | Mutation | Assignment and Mutability | |
10/3 | W | ||||
10/5 | F | Project 3 assigned, 9/28 | |||
15 | 10/8 | M |
Essentials, ch. 5, 6
|
||
16 | 10/10 | W |
Powerpoint slides taken from Sebesta's book Concepts of Programming Languages
Run-time Environment Representation and Control |
||
Midterm Recess — No Classes | 10/12 | F | |||
10/15 | M | Essentials, ch. 5 |
Project 3 due 12 noon, 10/15 Project 4 assigned, 10/17 |
||
10/17 | W | ||||
10/19 | F |
Sample Exam 1
Solutions to Sample Exam 1 Binding/bound occurrences, Problem 3 Call-by-name hand evaluation, Problem 5(i) Call-by-value hand evaluation, Problem 5(ii) |
|||
10/22 | M | ||||
10/24 | W | ||||
17 | 10/26 | F | Object-oriented languages | Essentials, Ch. 7. | |
18, 19 | 10/29 | M |
What is a type?
Extending the Typed Lambda Calculus |
What Is a Type?, Types and Safety
Types and datatype |
Project 4 due 12 noon, 10/29
Project 5 assigned |
20 | 10/31 | W | Polymorphism |
Polymorphism
Implicit Polymorphism Type Inference Study Guide | |
21 | 11/2 | F | Types for Imperative Languages | Final Words on Types | 11/5 | M |
11/7 | W | Essentials, ch. 8 | |||
22 | 11/9 | F | The Low-level Meaning of Function Calls | The True Meaning of Function Calls | |
11/12 | M | Continuation-Passing Style | Continuation-Passing Style | Project 6 assigned, due: 11/23 | |
23 | 11/14 | W | Explaining letcc and error |
Explaining letcc and error
|
|
24 | 11/16 | F | Lambda Lifting and Closure Conversion | Project 7 assigned, 11/18 | |
25 | 11/19 | M | Storage Management |
Uniprocessor Garbage Collection Techniques
Dynamic Storage Allocation Survey |
|
26 | 11/21 | W | Garbage Collection I | Garbage Collection |
Sample Exam 2
Sample Exam 2 With Solutions Project 6 due noon, 11/23 Exam 2 handed out in class, 11/23 |
11/23 | F | Thanksgiving Recess — No Classes | |||
27 | 11/26 | M | Garbage Collection II | ||
28 | 11/28 | W | Project 7 due at 11:59 PM, 12/2 | A Glimpse of Concurrency | |
11/30 | F | Semantic Building Blocks Embedded in Scala |
Exam 2 due at 11:59 PM, 12/2 |
Students with disabilities are encouraged to contact me during the first two weeks of class regarding any special needs. Students with disabilities should also contact Disabled Student Services in the Ley Student Center and the Rice Disability Support Services.