CS 460 Principles of Programming Languages
Department of Computer Science, Sonoma State University
Instructor: B. Ravikumar
Department of Computer Science
116 I, Darwin Hall, Phone 664 3335
lecture: MW 10 to 10:50 AM, Darwin 31 lab: M 12 to 1:50 PM, Darwin 25
Office hours: M 11 to 11:50, T 9:30 to 10:40
Lecture, 2 hours; laboratory, 3 hours. A survey of the syntactic, semantic and implementation features of functional, procedural, object-oriented, logic and concurrent programming languages. Prerequisite: CS 250 and 315, or consent of instructor.
· Learn how to define a programming language – syntax (what is a “correct” program) and semantics (what is the expected outcome when it is executed).
· Present central paradigms of programming such as functional, logic and object-oriented programming (mainly), data flow, scripting and others (secondarily).
· Learn the internal structures built by compilers when translating a high-level language. This includes the heap and stack structures used for procedure calls, dynamic memory allocation, garbage collection, parameter passing mechanisms, exception handling etc. In addition, we will look at some common features of high-level languages such as abstract data types, recursion, control flow and concurrency and learn to use them effectively.
· Experiment with a few programming languages to get a flavor of different styles of programming.
· Compare the various trade-offs offered by different features (static vs. dynamic scooping, early vs. late binding, strongly typed vs. loosely typed vs. type-free, pointer access vs. pointer hiding) of various programming languages in terms of efficiency, simplicity, security etc.
This course is intended to provide a deeper understanding of the essential features of a high-level programming language. We start with the mechanisms for defining programming language – the grammar to describe correct programs and semantics to describe what they compute. Then, we will learn the major programming paradigms: functional, logic and imperative (structured and object-oriented, in particular) programming. We will implement some programs in these languages. Scheme will be our choice for functional language, Prolog for logic programming and Java/C# will be used for imperative programming. Central features of high-level languages - such as scope rules, abstract data types, control structures, exception handling, dynamic memory allocation and garbage collection etc. will be discussed.
Programming Language Pragmatics, Second Edition, Morgan-Kaufmann Publishers, 2005.
Best price: Half.com sells for $ 36.99 + $ 3.25 (shipping)
Sebesta, Principles of Programming Languages, Addison-Wesley, Inc.
Programming languages: Application and interpretation by Sriram Krishnamurthi, a draft of the book is available from the web page http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/
How to design programs? An introduction to computing and programming by M.Felleisen et al. An electronic version of the book is available from the web page http://www.htdp.org/
For logic programming
An Introduction to Logic Programming through Prolog by Spivey. The complete book is now available from the web page http://spivey.oriel.ox.ac.uk/~mike/logic/
For imperative programming
C. Horstmann and G. Cornell, Core Java, Prentice Hall.
Outline of Topics covered (tentative)
Chapter 1 – Sections 1.1, 1.2 and 1.3
Chapter 2 – Sections 2.1, 2.2 and 2.3
Chapter 3 – Sections 3.1, 3.2 and 3.3
Chapter 6 – Sections 6.1 to 6.6
Chapter 7 – Sections 7.1 to 7.8
Chapter 8 – Sections 8.1 to 8.3, 8.5
Chapter 9 – Sections 9.1 to 9.4
Chapter 10 – Sections 10.1 to 10.5
Chapter 11 – Sections 11.1 to 11.3
Course Work and Grading
Programming projects 30%
Non-programming home work assignments 10%
2 Mid-semester tests 25%
Final exam (35%).
The projects will be done individually. The dates of the mid-semester tests will be announced at least one week in advance. They will be 50 or 75 minutes long and will be scheduled during the lecture hour or during the lab.
Policy on collaboration
You are allowed to freely discuss with others any aspect of the programming projects or homework assignments. However, no sharing of work will be allowed. This means that you can discuss ideas and write down design approaches, sketch of the solution etc. from the discussion. But when you write the code or the solution to a HW, it should be an individual effort. Any submitted work that does not meet this requirement will not be given any credit.
Some University-wide Guidelines
There are important
University policies that you should be aware of, such as the add/drop policy;
cheating and plagiarism policy, grade appeal procedures; accommodations for
students with disabilities and the diversity vision statement. Go to the URL
below to find them. http://www.sonoma.edu/uaffairs