Last updated 08/29/07 for FALL Semester 2007.

CS 345: Programming Languages

Instructor: Dr. Greg Lavender
Email: lavender [at] cs
Office: PAI 5.72B
Office Hours: MW 2:30-3:30 pm, or by appointment.
Tel: +1 512 471 9577

TA: Mr. Julian Bishop
Email: julian [at] cs
TA's Website: TA Webpage
Office: TA Station #1 in ENS 31NQ (enter 31NR to get to 31NQ)
Office Hours: TTh 11-12

When/Where: MW 4:00-5:30 pm. Room PHR 2.114

MidTerm Exam Info: Wednesday, 17 Oct, 7-10 pm. Room TBD.
Final Exam Info: Friday, 14 Oct, 7-10 p. PHR 2.114

Syllabus: Fall 07



The following courses, or their equivalents, with a grade of C or better are required prerequisites: CS310(H), CS336(H), and M408D. If you have not taken these courses and earned a grade of C or better in each, then you will be automatically dropped from this course. Please see a departmental advisor immediately if you do not satisfy the prerequisites. If you have taken this course (or CS345H) before, you must have departmental permission to take it again.

Course Texts

The following texts are required for this course: The following texts are recommended for this course:

Course Description

This course will give you the opportunity to learn the fundamental syntactic and semantic concepts underlying modern programming languages. The primary focus is on understanding concepts, however, as a practical consequence, you will write several small programs in different languages.

We will study a small set of representative programming languages and use them to develop an understanding of how different programming language concepts are implemented by a language designer, and their impact on the programmer.

The principal paradigms we will cover include:

The unifying concepts are the notions of expressions, functions and types. We will examine carefully how expressions, functions/procedures and types are defined, used, and implemented. We will develop an understanding of different strategies for expression evaluation and the impact on language design. We will see how types allow the programmer to specify constraints on functions and data, and understand the tradeoffs of static versus dynamic typing.

Elements of the following languages will be studied to enhance your practical understanding of how concepts are translated into real language implementations.