CSE 307: Principles of Programming Languages, Spring 2002

[Announcements][Homeworks][Projects]


Instructor:

Radu Grosu ( grosu@cs.sunysb.edu),

Class: TueThu  8:20pm - 9:40pm, Harriman Hll, room 137

Office hours: TueThu 10-11am, CS Building room 1425, and by appointment

TAs:

Wang, Yuanpeng (yuanpengwang@hotmail.com)

Office hours: Mon 10:30-11:30am, Fri 11:30-12:30pm, CS Building room 2110

Xu, Fang (faxu@ic.sunysb.edu)

Office hours: Tue 10-11am, Fri 3-4pm,  CS Building room 2110


Contents


Objectives

The goal of the course is to give you intellectual tools that will help you design, evaluate, and choose programming languages. You will learn to ask questions about language safety, error classification , type systems, formal semantics, abstraction mechanisms for both functions and data, and memory management.  The course provides an introduction to programming languages as an intellectual discipline. The elements of this discipline include specifications based on abstract syntax, lambda calculus, type systems, and dynamic semantics.

The course promotes case studies to give you experience with languages that go beyond the simple imperative paradigm. Case studies will cover languages from the functional, logic, and
object-oriented families. Example languages may include Standard ML, Smalltalk, CLU, Scheme and Prolog. The case studies are reinforced by suitable programming exercises. We assume previous experience programming in imperative languages like C, C++, or Java. You should plan to complete about a dozen programming assignments over the course of the term.


Prerequisites

You must have completed CSE 214 Computer Science II and CSE 220 Computer Organization and Systems Programming.

Being a project/homework  intensive course, a good working experience with C, C++ or Java programming and the UNIX environment (not just familiarity) is essential. You might also need to know how to set up "make" files and use symbolic debuggers. At the very least, you should be able to pick these up within the first couple of weeks.


Overview

During the class, we will discuss the most important programmnig language constructs present in modern languages. For each construct we discuss its merits, theoretical foundation and implementation in a programming language. In particular the overall organization of the course is as follows: The understanding of each programming language construct will be reinforced by suitable programming exercises. You should plan to complete about a dozen programming assignments over the course of the term.


Reading

The course will use the textbook titled  Programming Languages: An Interpreter-Based Approach, Draft manuscript, Fall 2000 by Sam Kamin, Norman Ramsey, and Russ Cox. Sections of the book will be distributed during the class.

Additional suggested reading:


Software

We will use the programming languages C, Scheme, ML, Smalltalk and Prolog. Documentation and free download will be posted on the web.


Grading

Your performance on the programming homeworks/projects will be the major part of the final grades. In addition, there will be a mid-term exam and a final exam. The relative weights for the above components will be: The grade for homeworks/projects is split between programming assignments (30%) and project presentation (10%). Near the end of the semester, each student will make a presentation of a particular portion of his/her project work to the instructor and TAs. The portion of project to be presented will be determined by the instructor and the TAs at that time; the student is expected to come prepared on all aspects of his/her code. The motivation for the presentation is to guage the understanding and insight the student had obtained by performing the project. There will be 8 homeworks/projects in all. Students will work in teams of two on the projects. Both members of the team are expected to know the code.

You are advised to start working on the projects at the earliest possible time even if the deadlines are far away. The date the projects are due will be clearly specified in the project handout, on the web; any changes in deadlines will be posted on the course homepages.

Projects are due by 11:59pm on the specified date. Late projects will be penalized at the rate of 20% per day. So, there is no point submitting a project more than 4 days late! Each team can submit one project late by seven calendar days (1 week) without late penalty. You don't need to send me mail about this. No extensions will be allowed beyond this.


Your Rights and Responsibilities


Special Needs

If you have a physical, psychological, medical or learning disability that may impact on your ability to carry out assigned course work, you are urged to contact the staff in the Disabled

Student Services office (DSS), Room 133 Humanities, 632-6748/TDD. DSS will review your concerns and determine, with you, what accommodations are necessary and appropriate.

All information and documentation of disability is confidential.

The Importance of Being Earnest

Because a primary goal of the course is to teach professionalism, any academic dishonesty will be viewed as evidence that this goal has not been achieved. Any act of cheating will be treated with utmost seriousness.

You can discuss the course material with other students, but not the homework assignments themselves. In effect, you can discuss the problems but not the solutions. If you help another student with a homework, use examples that do not resemble those in the homework. Remember that there are many different ways to solve the same problem; even solutions with the same central idea can be formulated in many different ways. Therefore, suspiciously similar homework solutions will be considered as evidence of disallowed collaboration or copying.

In case you have any questions about whether an act of collaboration may constitute "cheating", please come and talk to the instructor beforehand to clarify the issue.

Copying an assignment from another student in this class or obtaining a solution from some other source will lead to an automatic F for this course and to a disciplinary action. Allowing another student to copy one's work will be treated as an act of academic dishonesty, leading to the same penalty as copying. You should learn how to protect your data. Failure to do so is also unprofessional and it may expose you to the danger that someone will copy your homework and will submit it as his or her own (see above). In this case, you may be given a score of 0 for the assignment in question (and the other party will get an F).

 All cases of academic dishonesty will be reviewed by the Engineeing College's committee (CASA).

Survival Tips

Do not postpone working on assignments. Start working on programming assignments as soon as they are handed out. Do not wait till the day before the deadline. You will see that assignments take much more time when you work on them under pressure, than when you are more relaxed. Remember that no late submissions are allowed.

Do not postpone working on assignments! This cannot be understated. Despite the above warning, most students will end up working only around the deadline. Remember, the homeworks usually take more time that it initially appears. Furthermore, I expect both the TA and me to be swamped on the office hours before projects are due. So, you, being wiser than the rest, should start earlier and beat the rush!

Design before you code. Writing a well designed piece of code is always easier than staring with some code that "almost works" and adding patches to make it "really work".

Follow good programming discipline. Why spend hours debugging when you can party? A little bit of thought before you do some esoteric pointer manipulation will save you a lot of time, headache and may be a grade!


Tentative Schedule

  Date Topic Chapter Projects
1.  Jan 24 Organization. Overview of the class.  l1 1  
2. Jan 29 Imperative core: abstract synatx and environments.  l1 2  
3.  Jan 31  Inference rules and evaluation    l1 2  
4. Feb 05 Scheme: S-expressions, programming with recursion and lists, association lists   l2  3  P1 out
5. Feb 07 Scheme: functions as values, the funarg problem, closures l2 3  
6. Feb 12 Scheme: programming with higher-order functions   l2  3  
7. Feb 14 Scheme: more fun with lambda, continuations    l2 3 P1 due, P2 out
8. Feb 19 Scheme: implementing closures, scoping rules, real Scheme, assessment l2 3  
9. Feb 21 Memory management: mark-and-sweep collection   l3 4  
10. Feb 26 Memory management: generational and conservative collection  l3 4  
11. Feb 28 ML: a whirlwhind tour  l4 5  
12. Mar 05 ML: the tour, continued  l4 5  P2 due
13. Mar 07 ML: type system and type checking   l5 5  
14. Mar 12 type checking  l5 6  
15. Mar 14 Mid-Term Exam.    
16. Mar 19 Lambda calculus: lambda calculus  l6    
17. Mar 21 Lambda calculus: computing with lambda calculus l6    P4 due, P5 out
*** Mar 26 Spring recess (no class)    
*** Mar 28 Spring recess (no class)    
19. Apr 02 Lambda calculus: second-order typed lambda calculus l6    
20. Apr 04 Semantics: lattices, recursive functions    P5 due, P6 out
21. Apr 09 Semantics: simple programs and flow of control     
22. Apr 11 Semantics: lvalues and rvalues, more control flow     
23. Apr 16 Semantics: continuations, expression continuations     P6 due, P7 out
24. Apr 18  CLU: Clu and data abstraction     
25.  Apr 23 Smalltalk: inheritance     
26. Apr 25  Smalltalk: class hierarchies     
27. Apr 30 Standard ML: Structures, signatures, functors    
28. May 02 Standard ML: Sharing and matching     
29. May 07 Prolog: backtracking and the cut l7  
29. May 09 Final Exam (8-10:30 am) in the class room.  HW #4,  Guidelines for final.    

Aknowledgment: The lecture notes build on the notes kindly provided by Norman Ramsey from Harvard University.



Last updated on Apr 25, 2002 by Radu Grosu