CS 144

Programming Languages
Syllabus
, Winter 2007

           athena.union.edu/~hemmendd/Courses/cs370
Prof. Hemmendinger                      hemmendd[@union.edu]
221 Steinmetz                           Hours: MW 12:30-2:30
388-6319                                  and by appointment
Texts

Programming Languages: Principles and Paradigms, 2nd ed., Tucker and Noonan, McGraw-Hill, 2007

(optional) Elements of ML Programming, Jeffrey Ullman, Prentice-Hall, 1997.

Course objectives: through this course you should be able to

understand basic programming-language paradigms: procedural, object-oriented, functional, logic, including their strength and weaknesses.

be able to describe programming language syntax with formal notation

be able to read semantic specifications for programming languages

understand the design of imperative programming languages

understand the run-time environment of imperative and object-oriented languages, including memory-management.

understand type-systems in functional and object-oriented languages

Prerequisites 1. CS 140

Specific topics: Data abstraction; basic ADTs such as stacks, queues; recursively defined datatypes such as binary and general trees; recursive subprograms; understanding of program design and testing methods, and of program documentation standards.

General: Ability independently to design, write, debug, and test a C++ or Java program of the size assigned in CS 77. Ability to use Unix systems, including editors and compilers, and to get information from man-pages and other sources to answer questions that arise during their use.

2. Math 199

Specific topics: Basic set concepts; functions as mappings between sets, cartesian products; propositional and elementary predicate logic; proof methods, especially mathematical induction.

Assignments and grading

(22%)

About eight homework exercises, which will include textbook exercises and programming in ML, Java, and perhaps Prolog or Scheme. Every programming assignment solution must contain the output from an appropriate set of tests to show that the program meets its specification. All programs must be documented, and all output or other results fully explained.

(50%)

Closed-book midterm (24%) and final exams (26%). You may bring with you one 8.5"×11"sheet of notes to use during the midterm, and two such sheets of notes for the final.

(28%)

Three programming assignments in ML or other languages

The assignments in this course are intended to help you to think about programming language design and implementation. All of the work that you turn in for grading must be your own. If you discuss the homework with others, what you write up and turn in must still be done entirely on your own. The programming assignments will not be appropriate for group work. If two or more people turn in the same homework or programs, they will receive grades of 0 for that work, and further joint work will lead to their being dropped from the course. If you are uncertain about what constitutes undue cooperation, please discuss it with me. Please also review the college policy on academic honesty.

Printed copies of projects and homework are due at the start of the class on the specified date. Homework turned in after the start of class on the due date but before the start of the next class will receive half-credit, but after that time, no credit, since solutions will be available then. Late projects will be subject to a 10% penalty per calendar day.

All programs, including homework, must be properly documented and be formatted according to standard indentation practices. Be sure that there are no long lines that are wrapped or truncated (this means that you’ll have to insert carriage-returns rather than rely on a word-processor to format lines). Use only a constant-width font (Courier, typewriter) for programs. Programs that don’t meet these requirements will be marked as late and returned for resubmission.

The grade scale will be no stricter than A: ≥90,B: 80−89.9, C: 70−79.9,D: 60−69.9,F: <60.

You should plan to spend about 10 hours of work per week on this course outside class.

Languages and Labs

The course will use Standard ML for programming during the first half of the term. During the second half we shall use other languages (Scheme, Prolog, ...) for some assignments. The Olin 110 CS lab (Windows and Linux) and Pasta lab (Linux) have Standard ML of New Jersey (SML/NJ) (sml), which is also available for for downloading to PCs (IBM and Apple). The Pasta lab has GNU prolog (gprolog); information on other languages will come later. The Linux systems have the usual editors, emacs, vi, pico, kedit.

The public directory for the course is antipasto:/home/csc370pub. It contains or will contain homework solutions, lecture notes, examples from the text, and other programming examples.

Approximate Schedule

To benefit from the texts, you’ll need to read them before class discussion. Read chapters 1-6 of the ML book or the "Gentle introduction to ML that’s on the Web as soon as possible, so that you can use them as references for the program assignments. Further readings will be recommended later.

Week of                Topic                Readings (Tucker and Noonan)   homework due (Wednesdays)
Jan. 3    PL background; intro to FP        ch 1
Jan. 8    syntax, more FP                   ch 2, 3.1-3.2                  hw 1
Jan. 15   names                             ch 4                           hw 2
Jan. 22   types, type systems               ch 5-6                         hw 3
Jan. 29   semantics                         ch 7.1-7.5, 7.7                hw 4; project 1 (Mon.))
Feb 5     semantic interpretation           ch 8
Feb. 5    midterm
Feb. 12   semantics, functions              ch 9                           hw 5
Feb. 19   ADTs, object-oriented languages   ch 11.1-11.2,12.1, 13.1-13.3   hw 6, project 2 (Fri.)
Feb. 26   other functional languages        ch 14                          hw 7
Mar. 5    logic programming                 ch 15                          hw 8
Mar.12    TBA                               project 3 (Mon)