CISC 470/670 Programming Languages Spring 2004 M/W/F 9:05 am-9:55 am, SMI 219 Instructor: Daniel Chester Office: Room 205, 77-79 E. Delaware (The green house next to East Hall) Hours: TF 4:00 pm-5:00 pm Phone: 831-1955 Email: chester@cis.udel.edu TA: Xiaojin Niu Office: 115B Pearson Hall Hours: F 10:00 am-Noon Email: xiaojin@udel.edu Textbook: Programming Language Pragmatics, by Michael L. Scott, Morgan Kaufmann Publishers Web Page: http://www.cis.udel.edu/~chester/courses/670.html Course Description: Selection, use and implementation of appropriate language(s) for given problems. Syntax, semantics, pragmatics, parameter passing and abstract data types. Course Objectives: This course examines the fundamental principles at work in the most important contemporary languages, highlights the critical relationship between language design and language implementation, and devotes special attention to issues of importance to the expert programmer. Students should emerge better prepared to choose the best language for particular projects, to make more effective use of languages they already know, and to learn new languages quickly and completely. Prerequisites: Programming skill in a block structured language and Lisp; an understanding of symbol tables, lists, trees, stacks, queues is assumed (e.g., CISC 220); CISC 301 or CISC 310. Recommended Background: CISC 320 (Algorithms and Advanced Programming). Topics (tentative): Overview (Chapter 1) Syntax (Chapter 2 except section 2.2.4) Bindings (Chapter 3) Control Flow (Chapter 6) Data types (Chapter 7 through section 7.7) Subroutines and Exceptions (Chapter 8 through section 8.3, and section 8.5) Objects (Chapter 10) Functional and Logic Languages (Chapter 11) Grading: Grades will be based on (with equal weight) [tentative]: projects assignments midterm (April 2) final exam (May 25th, 10:30 am) Policies: Projects and assignments are due at the beginning of class on the due date. All work turned in must be your own; it must not be copied from another student's work, nor from a book or other source. YOU ARE EXPRESSLY FORBIDDEN TO SHOW YOUR PROGRAM CODE OR WRITTEN ASSIGNMENTS TO OTHER STUDENTS UNTIL BOTH OF YOU HAVE TURNED IN YOUR RESPECTIVE WORK FOR GRADING. You may consult with others about conceptual problems. If you need someone to look at your code for debugging, see the TA, me, or someone not taking this course. Do not show your code to another student taking this course. All programs must be well documented. A program is well documented if it is readable and clear. This usually means that function definitions should be short. Function and variable names should be chosen to make definitions clearer. Insert one comment ahead of a function definition that explains briefly what the function does and what the input parameters are expected to be. Insert other comments only where the definition might not be clear to a person who knows C/C++/JAVA but is not familiar with the algorithm you are using. Note that too many comments can lessen the readability of your program, clumsy algorithms can lessen the readability of your code, and output can be "correct" but be produced by a combination of errors that cancel each other out. Points will be taken off for each of these cases. Written assignments will not be accepted after their solutions have been presented in class or posted on the class web site. If you can't come to scheduled office hours, please send me email; I'd be happy to schedule a meeting at some other mutually-agreed upon time.