CS 460 Principles of Programming Languages

Department of Computer Science,  Sonoma State University

Fall 2006

  Instructor:           B. Ravikumar

                            Department of Computer Science

                            116 I, Darwin Hall, Phone 664 3335
                       E-mail:  ravi@cs.sonoma.edu

    Class meets: 

              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  

    Catalog description:

       460 Programming Languages (3) / Fall, Spring

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.          

  Course Goals:

        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.

    Course Outline:

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.

   Text Book:

Programming Language Pragmatics, Second EditionPLP cover art, Morgan-Kaufmann Publishers, 2005.    


Best price: Half.com sells for $ 36.99 + $ 3.25 (shipping)                                      



    Other references:  


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/

            For functional programming:

 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/policies/studentinfo.shtml