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:
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 Edition, Morgan-Kaufmann Publishers, 2005.
ISBN: 0126339511
Best price: Half.com
sells for $ 36.99 + $ 3.25 (shipping)
Other
references:
General:
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