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.
The following texts are required for this course:
The following texts are recommended for this course:
- Programming Languages: Principles and Paradigms, Allen Tucker & Robert Noonan, McGraw Hill, 2007
- C: A Reference Manual, 5th Edition, Samuel P. Harbison & Guy L. Steele, Prentice-Hall, 2002.
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:
- Procedural/Imperative Programming
- Functional/Applicative Programming
- Object-Oriented Programming
- Concurrent Programming
- Scripting Languages
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
- ANSI C - a highly efficient imperative style programming language with statically declared types.
- ANSI C++ - an imperative style
object-oriented programming language with ad hoc, subtype and parametric polymorphism.
- Java - an object-oriented programming language with garbage collection and concurrency mechanisms.
- Scheme - a lexically-scoped applicative style functional programming language with explicit lambda expressions and dynamic types.
- Standard ML - a practical functional programming language with static polymorphic type inferencing.
- Haskell - for strict functional programming language with lazy evaluation.