- Location and Time: Nichols 122, TR 1:05 -- 2:20
Note that there will be several extra lectures
throughout the semester. These will be primarily held to to make up for
time lost due to the instructor's travel to conferences and to other
universities for research visits and to supplement lectures.
- Instructor and E-Mail:
Anindya Banerjee
(ab AT cis.ksu.edu)
- Office and Phone: 324B Nichols Hall, ph. 532-7944
- Office Hours:
T: 2:30 -- 3:30 and by appointment. (This means please stop by anytime).
My office is located in N324B.
- Recommended readers for OCaml:
Jason Hickey's notes on ML ;
Developing Applications with
Objective Caml
- Course home page:
http://www.cis.ksu.edu/~ab/Courses/505/fall08/index.html
- Course objectives:
The overarching goal of this course is to learn the principles of programming
languages, by prototyping interpreters for reasonable subsets of imperative,
functional, and object-oriented programming languages.
Upon completion of the course, students will have:
- Mastery of programing language concepts including type, scope and extent,
abstraction mechanisms and control.
- Knowledge of programming paradigms, including one or more of
logic, functional and object-oriented programming, and
programming languages supporting the selected paradigms.
- Mastery of techniques for implementing interpreters, compilers and
virtual machines for the paradigmatic languages studied in the course.
- Knowledge of storage management and some techniques for garbage collection
- Mastery of type checking and type inference techniques for the
paradigmatic languages studied in the course.
In the process, students will learn a significant part of the functional
language, Objective Caml (OCaml) and will
use OCaml as a vehicle to implement interpreters for other languages.
Note that we will not be embarking on a tour of particular programming
languages.
- Prerequisites
- CIS 300 (Algorithms and Data Structures): programming in Java,
dynamic data structures such as linked lists and binary trees, recursion.
- CIS 301 (Logical Foundations of Programming): reading and writing
mathematical proofs, BNF's, mathematical induction, structural induction,
propositional and predicate logic, program logics.
- Recursively, all prerequisites of CIS 300 and CIS 301.
If you are an undergraduate who has not earned a C or better in each of the
prerequisite courses, the College of Engineering may drop you without warning.
- Topics
- Functional programming in OCaml, types, polymorphism
- Interpreters
- Lexical analysis and parsing
- Abstract machines
- Stacks and Scopes
- Type checking and type inference
- Control: Exceptions and continuations
- Data abstraction
- Object-oriented programming
Most of the above topics are also topics of intensive research in the
programming languages and compilers community.
- Lecture Notes and lectures
The material presented in CIS 505 is not neatly covered in any textbook
or collection of textbooks. Please take detailed notes!.
- Programming
All programming in this course will be done using the
Objective Caml (OCaml)
language, under Linux or MacOS (and not under Windows).
Here is a comprehensive collection
of OCaml resources. You must use the
Emacs editor
for programming in OCaml. The Emacs editor has an OCaml mode; Please see the
course web page handout on how to install this (handout #06).
Homeworks, Quizzes, Class Participation and Exams
The approximate percentages are: Homeworks (30%), Exam 1 (35%),
Exam 2 (35%). All exams are open-book, open-notes. I may choose to give
substantial projects in lieu of in-class exams.
This is a required course. To pass the course, a student must score at
least a C. There are no make-up quizzes or exams.
Your grade in this course will be based solely on your performance in
the exams/projects and homeworks and your participation in discussions
in class. No other considerations can be given when it comes to deciding
the final grade.
- Homework Assignments
Homework assignments will include pencil and paper problems and/or programming
problems.
Each programming assignment should begin
with your name, assignment number, and the date of submission. All
programs should be syntactically correct and must compile.
Submitting syntactically incorrect programs or programs that don't compile
will automatically result in a failing grade for the assignment.
Please spend
substantial time with paper and pencil before approaching a computer;
you will spend much less time debugging, and better understand your
programs. Remember: "An hour with a pencil is often worth several at
the keyboard"!
- Policy statements
-
Collaboration policy:
I believe that collaboration fosters a healthy and enjoyable
educational environment. For this reason, I encourage you to talk with
other students about the course and to form study groups.
Because the programming assignments in this course are particularly
challenging, you will be allowed on any assignment to form a
"team" (exact number per team TBD) with a partner.
The team members must
work closely together on the assignment and turn in a
single copy of the assignment for the team. The grade received on such a
submission will be given to all team members.
This is a rather unusual collaboration policy, and it is only allowed
subject to the following ground rules:
- The work must be a true collaboration in which each member of the
team will carry his/her own weight. It is not acceptable for
team members to split the problems of the assignment between them and
work on them independently. Instead, the team members must
actively work together on all parts of the assignment.
- Any team member may be asked individually or jointly to
explain every detail of the code they have written. A failure to
explain code will automatically result in a failing grade for the
assignment for the team. So it is in your best interests to truly
collaborate! Take copious notes while coding on what you learnt
from the assignment.
- The fact that team members have to program together means that you
need to carefully consider a partner's schedule before
forming a team. You cannot be a team if you cannot find large
chunks of time to spend at a computer together!
- Unless otherwise instructed, teams are allowed to discuss problem sets
with other teams and exchange ideas about how to solve them. However,
beware the thin line between collaboration and plagiarizing the work
of others! Therefore, I require that each
team compose its own solution to each assignment. In particular,
while you may discuss strategies for approaching the programming
assignments with other teams and may receive debugging help from them,
each team is required to write all of its own code. It is
unacceptable (1) to write a program with another team and
turn in two copies of the same program or (2) to copy code written by other
teams; such incidents will be interpreted as violations of the Honor Code.
- In keeping with the standards of the scientific community, you must
give credit where credit is due. If you make use of an idea that was
developed by (or jointly with) others, please reference them
appropriately in your work. E.g., if person X gets a key idea for
solving a problem from person Y, person X's solution should begin with
a note that says "I worked with Y on this problem" and should say "The
main idea (due to Y) is ..." in the appropriate places. It is
unacceptable for students to work together but not to acknowledge each
other in their write-ups.
- When working on homework problems, it is perfectly reasonable to use
code from the course readers and other materials handed out in class. It
is also reasonable to consult public literature (books and articles but
not the internet) for hints, techniques, and even solutions.
However, you must
cite any sources that contribute to your solution. There is one
extremely important exception to this policy:
assignments and solutions from previous terms of CIS 505 are
not considered to be part of the "public" literature. Any violation or
suspected violation of this policy will automatically be reported to the Honor
Council . You must refrain from looking at any solutions to problem
sets or exams from previous semesters of CIS 505.
Incompletes: An incomplete (I) final grade
will ve given only by prior arrangement in exceptional circumstances conforming
to department policy in which the bulk of the course work has been completed
in passing fashion.
Students with disabilities: If you have any condition,
such as a physical or learning disability, which will make it
difficult for you to carry out the work in this course, or
which will require academic accommodations, please notify me in the
first two weeks of the course.
Dropping this course:
If you decide not to complete this course, it is your responsibility to
drop.
Cell phones/pagers:
Cell phones and pagers must be turned off during lectures.
Newspapers:
Despite strong temptation, please do not read newspapers during a lecture.
Other official policies
Acknowledgements:
To Franklyn Turbak and Shriram Krishnamurthi for their inspirational teaching
and help regarding this course.
Anindya Banerjee