Programming Languages (ICS/CSE141)

Summer Session II, Aug 9 – Sep 15, 2004

Instructor: Chris Stork (Office hours after class and by appointment)
Teaching Assistant: Chris Fensch (Office hours at labs and by appointment)
Lectures: MWF 2:00–3:50pm in MSTB 120
Discussion: Mondays 4:00–5:50pm in MSTB 120
Labs: Wednesdays 4:00–6:00pm in CS192 or Fridays 4:00–6:00pm in CS189
Mailing List: 36400-Z04@classes.uci.edu Online Archive

Goals

My didactic approach will be a mix of the two predominant approaches:

Obviously, these two approaches don't exclude each other. But there are trade-offs: the former provides a deeper understanding of the specific features while requiring more effort, the latter gives a broader overview of languages while a detailed understanding of the workings and costs of certain language features might be neglected.

As my personal twist to this class I will try to equip the students—as far as this is possible under the given constraints—with a deeper understanding of more advanced features that are sure to appear in future programming languages, e.g., type inference. I will also emphasize functional programming in order to balance the fact that ICS (and ECE) are a bit ignorant in this respect.

Official Course Description

"In-depth study of several contemporary programming languages stressing variety in data structures, operations, notation, and control. Examination of different programming paradigms, such as logic programming, functional programming and object-oriented programming; implementation strategies, programming environments, and programming style."

Prerequisites

You have to like programming and thinking about programming! You should also be comfortable with basic concepts of mathematical logic such as propositional logic and inductive proofs.

ICS23/CSE23
Specifically: ADTs, recursion, basic understanding of object-oriented programming and functional programming.
ICS 51 or CSE31/ECE31
Specifically: computer architecture, memory management, pointers, assembly programming.

Syllabus

DateTopicResourcesAssignments
Week 1 Monday,
August 9
Intro, Survey, Functions, Halting Problem, Scheme lecture01.pdf
Wednesday,
August 11
Compilers, Lambda-Calculus lecture02.pdf (includes corrected substitution example) Read chapters 2, 3, and sections 4.1, 4.2 in Mitchell.
Get started with DrScheme and have a look at Revised5 Report on the Algorithmic Language Scheme (R5RS).
Friday,
August 13
More Lambda Calculus and Scheme, Garbage Collection, Functional vs Imperative lecture03.pdf (includes extra slides on modelling booleans in lambda-calculus for your own enjoyment), transcript03.txt Read sections 4.2 and 4.3 in Mitchell.
Week 2 Monday,
August 16
Quiz 1
Again Functional vs Imperative, Macros, Denotational Semantics
lecture04.pdf Read sections 4.3 and 4.4 in Mitchell.
Wednesday,
August 18
Embedding a Database Query Language in Scheme lecture05.pdf, query.scm (especially check out the test section at the end to see what the functions do!) Play with Scheme!
Homework 1 (actually due Thursday, 19 August 2004, 11:59pm) hw1-solutions.tex hw1-solutions.pdf
Friday,
August 20
Queries and Backtracking lecture06.pdf (with some corrections), infer.scm Study query.scm.
Read chapter 15 in Mitchell.
Week 3 Monday,
August 23
Quiz 2
Unification and Prolog
lecture07.pdf Study infer.scm.
Read chapter 15 in Mitchell.
Wednesday,
August 25
ML lecture08.pdf, transcript08.txt Read chapter 5 in Mitchell.
Homework 2 (actually due on Thursday, 26 August 2004, 11:59am) hw2-solutions.tex hw2-solutions.pdf pure-infer-no-global-db.scm pure-infer-no-counter.scm (The last two contain only code changes, i.e., comments are the ones from infer.scm, in order to facilitate easy diffing.)
Friday,
August 27
More ML, Types lecture09.pdf, transcript09.txt, Using Moscow ML Read chapter 5 and 6 in Mitchell.
Week 4 Monday,
August 30
Type Inference, First-Order Functions (Scope and Memory Management) lecture10-4up.pdf lecture10.ppt Play with ML.
Read chapter 6 and 7 in Mitchell.
Wednesday,
September 1
Implementing Higher-Order Functions, Structured Programming lecture11-4up.pdf lecture11.ppt transcript11.txt zerodups-extended.ml Read chapter 7 and section 8.1 in Mitchell.
Homework 3 (actually due on Tuesday, 31 August 2004, 2:00pm), Template for question 3.
hw3-solutions.tex hw3-solutions.pdf
Friday,
September 3
Exceptions, Data Abstraction and Modularity
Quiz 3
lecture12-4up.pdf lecture12.ppt Read section 8.2, 8.4 and chapter 9 in Mitchell.
Week 5 Monday,
September 6
Labor Day Holiday
Wednesday,
September 8
Generic Abstractions,
Guest lecture by Peter Fröhlich: Intro to Object-Orientation
lecture13-4up.pdf lecture13.ppt ml-sets infer.hs Read chapter 10 in Mitchell.
Friday,
September 10
More OOP, Smalltalk lecture14-4up.pdf lecture14.ppt lecture13-14-OOP-4up.pdf additional OOP slides singelton.cpp stack-closure.sml Read chapter 11 in Mitchell
Week 6 Monday,
September 13
C++ and Java lecture15-4up.pdf lecture15.ppt Read chapter 12 and 13 in Mitchell
Homework 4 (actually due on Sunday, 12 September 2004, 2:00pm) hw4-solutions.tex hw4-solutions.pdf
Wednesday,
September 15
Final Exam

I had a request to also post the Latex sources for my lecture. So here's how I generated lecture 3: lecture03.tex. Be warned though that this Latex code was never intended for public scrutiny! Some of it might not make sense to you and it might be because it does not make sense. ;-)

Grades

Grades are on a 0-100 points scale which will be translated to A,B,.. at the end of the session. The final is an exception. It's worth 300 points.

Homeworks, etc.

Estimated time requirement for this class is ~30 hours/week.

All homeworks are submitted electronically via Checkmate. Non-programming homework is due as LaTeX and PDF documents. Details are given during the first lab session. (Information on preparing and submitting the homework)

The syllabus lists (reading) assignments and homeworks. It is very beneficial to read the assigned reading ahead of time!

Discussions

Attend the discussion sessions and monitor the EEE course mailing list for my announcements!

The course mailing list is furthermore intended for any kind of out-of-class discussions. Send all questions or comments related to the course's content to this list! Do not email the instructor or TA personally with questions that are relevant to the whole class!

Books

Required

John C. Mitchell: Concepts in Programming Languages. Cambridge University Press, 2003. Errata. Recent text, written by an active researcher in the area. Emphasizes functional programming and type systems, but covers object-oriented programming and logical programming as well. A little more theoretical than other texts. The course does not cover everything in the book, and the book does not cover everything in the course.

Recommended

Robert W. Sebesta: Concepts of Programming Languages, 6th edition. Addison-Wesley, 2004. This is the standard text book used by other courses here at UC Irvine.

Ravi Sethi: Programming Languages: Concepts and Constructs, 2nd edition. Addison-Wesley, 1996. By the man who co-authored the dragon book (the classic in compiler construction). I just discovered this book and it makes a very good impression on me even though it's a bit dated by now.

Alternatives

Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes: Essentials of Programming Languages, 2nd edition. MIT Press, 2001. Errata. Classic text studying a range of programming language concepts through interpreters implemented in Scheme. Somewhat advanced, so grab this after the course if you were bored too often.

Carlo Ghezzi, Mehdi Jazayeri: Programming Language Concepts, 3rd edition. John Wiley & Sons, 1998. Popular alternative text, frequently used at UC Riverside for example.

Michael L. Scott: Programming Language Pragmatics. Morgan Kaufmann, 2000. Errata. Interesting combination of programming languages, computer architecture, and compiler construction. If you are looking for a single text covering all three areas to some extent, give this one a try.

Collaboration

Collaboration in form of discussions is strongly encouraged, but they must be acknowledged. Researching solutions on the Web or in the library is good too, but must be acknowledged as well.

Collaboration on code is not allowed. Don't even look at other's code!

ICS's policy on academic (dis)honesty applies and will be enforced! Furthermore be aware that we are using an automated plagiarism detection system.

Thanks

Many thanks to Peter Fröhlich for discussions and for letting me build upon his lecture notes.


Last modified: Tue Sep 14 11:59:23 PDT 2004 Valid HTML 4.0!