Computer_Science
 Home | People | Curriculum | Projects | Resources | Media

CMSC 245: Principles of Programming Languages

Instructor: David Wonnacott

Semester & Year: Fall 2011

Schedule: Lecture MWF 10:30-11:30 in KINSC H110 (The CS Teaching Lab, Hilles 110); Lab M 2:00-4:00 or Tuesday 3:00-4:00, KINSC H110, attendance required unless all current lab work has been submitted.

Required Texts:

  • "Programming Language Pragmatics", by Michael Scott (no, not that Michael Scott)
  • "The Haverford Educational RISC Architecture" by David Wonnacott (this booklet is available with a nice cover at the Haverford book store (the lulu.com version, but with the shipping cost shared among all students) or you can print your own (without the cool cover) from the HERA web site).
    Also Recommended:
  • "Programming Languages: Principles and Practice", by Kenneth C. Louden has good, but different, coverage of most topics in this course. I'll try to have a copy in the lab and one on reserve in the library.
  • As references for our four primary languages, we will use
  • For C++, We will use Stroustrup's "The C++ Programming Language" as a reference to C++. The online version of Chapter 2 of this book covers much of what we will discuss.
  • For Scheme, we will refer to the Revised(5) Report on the Algorithmic Language Scheme.
  • For Python, we will refer to the Language Reference and Library Reference sections of the python.org web site.
  • For HERA (our sample machine language), we will use the aforementioned HERA documentation.
  • Requirements: Midterm and Final exam, weekly programming projects and homeworks, participation in in-class exercises.

    Collaboration: You are encouraged to discuss the lecture material and the weekly labs and problems with other students, subject to the following restriction: your memory should be the only "product" of any discussion about a lab assignment - you may not write up solutions together, or exchange written work or computer files pertaining to labs (except when a lab calls for cooperation, of course).

    Collaboration is not allowed on exams.

    Prerequisites: CMSC 106 (or 206 at Bryn Mawr). Concurrent enrollment in this and two other CMSC lab courses requires permission of the instructor.

    Description: This course will introduce many of the principles of programming language design and implementation. We will discuss numerous features of several programming languages and the algorithms and data structures that are needed to provide these features. Labs and homework will cover both the use of various features and high-level understanding the algorithms and data structures involved in their implementation. CMSC 350, Compiler Design, provides more in-depth information about many of these algorithms and data structures through labs covering their application to a single simple language.

    CMSC 245 lectures (and labs) will include examples (and exercises) in C++, the Scheme dialect of Lisp, and HERA assembly language. No prior knowledge of C++, Scheme, HERA is needed for this course, but students should be familiar with the programming techniques from CMSC 105/ 106 (e.g. creation of classes and functions/methods in Python (or some other language), and the pure functional and imperative views of functions and data).

    CMSC 245 should include as many of the following topics as we can cover:

    Graded lab assignments (listed below, along with other scheduling information) will be interspersed with "mini homework" and in-class group programming (which are graded only on participation):

    The current drafts of the course syllabus and lecture/lab schedule are available.

    Haverford College Page maintained by John Dougherty, David Wonnacott, and Rachel Heaton.
    Computer Science Department, Haverford College.