CSC123/252: Programming Languages

Dr. Chuck C. Liang
Office: 201A Adams Hall Office Phone: (516 463) 5559
Email: cscccl@hofstra.edu


Course Description:

A study of the semantics, specification and behavior of programming languages. The course will focus on various programming language paradigms including functional, imperative, object-oriented and aspect-oriented programming. Programming assignments using example languages from these paradigms will be required. Emphasis will be placed on learning languages such as Scheme, Perl, Java, ML, C++ and Ada. Other topics covered include language syntax, control structures, objects and functions.
Prerequisite: CSC 16, 155 or 120.
CSC 14 and 24 strongly recommended

Recommended Text: "Programming Languages: Concepts and Constructs, 2nd Edition" by Ravi Sethi.

Reference Material:


Class Web Page: http://www.cs.hofstra.edu/~cscccl/cs123/



Tentative List of Topics:

  1. Introduction and review of programming concepts:
    1. Runtime stack
    2. Type System
    3. Functional and class Abstraction
    4. Recursion
  2. Mathematical Foundations: the Lambda Calculus
  3. Formal Models of Computation:
  4. Lazy versus Eager Evaluation: The Church-Rosser Theorem
  5. Dynamic versus Lexical Scoping
  6. Side-effects and State
  7. Categories of Programming Languages
  8. Object Orientation
  9. Types
    1. the typed lambda calculus
    2. Safe versus unsafe type systems
    3. runtime versus static typing
    4. various forms of polymorphism
    5. principal types
    6. inheritance
    7. templates
  10. Language support for concurrent and distributed computing
  11. Aspect Oriented Programming.
  12. Interoperability
  13. Advanced topics (if time allow)



Exams, Assignments and Grading

Assignment will be given regularly. There will be a midterm exam and a final. The final exam will be cumulative. The grade distribution will be roughly as follows: midterm: 20%, final 30%, quizzes, homeworks and programming assignments 50%.

All material handed in must be in hard copy, and be well organized and legible. Unreadable material will not be graded. Consultation of outside sources (including books, friends) for completion of assignments must be pre-approved. Late assignments will not be accepted.

A Note on Collaboration:

Students are expected to write their own programs. No code sharing is allowed unless specified by the assignment. Code sharing include, but is not limited to, looking at someone else's code, copying and pasting text, writing code together, telling a friend what to type over the phone, and debugging a friend's program. Students are allowed to converse and share ideas, as long as no actual exchange of code is involved. For example, "I used an array to store the bank account objects; the size of the array is determined by a parameter to the constructor" is borderline acceptable. Anything more specific would be considered code sharing.

Attendance

Regular attendance is required. Students are responsible for all material, in all forms, presented during scheduled class times.



Final Note: The contents of the this syllabus may be modified depending on the progress of the course.