Schedule of presentations:
See below for guidelines on preparing your presentations.
All students are expected to select and complete a course project. This can be in the form of a paper exploring more deeply a topic covered in the course or a related topic which we have not covered in the course.
The first step is to write up a 1-page project proposal. The proposal should argue what do you expect to learn from the project (why is it interesting to you) and to propose a work schedule. Make sure to budget time for writing a short paper (max 6 pages) describing the project and for preparing a short (10-15 minute) presentation during the last three weeks of classes.
We expect that most projects will be individual, but we will accept teams of two for projects with a substantial research component.
The main goal of the project in CS263 is to allow you to customize the content of the course to your own interests. The goal is not to force you all to produce novel results in one semester. In past instances of this class a few projects continued after the end of the semester and resulted in publishable results.
- You should expect to learn from the project a comparable amount of material as from two or three lectures.
- 80 hours should suffice (within a factor of two)
- "One long week-end" will not suffice
- More ambitious projects are welcome:
- such projects must be staged so that you have something to show at the end of the semester
- I (or your advisor) can provide some guidance on such projects
- If you have a great idea and need help feel free to recruit it
- However, given the scope of most projects, especially the survey projects, I think that they are easier done alone
I envision 2 main kinds of projects:
- Survey of the work in some area of language design. There are some suggestions below. One great way to select a topic is to start from a paper from a recent instance of POPL, PLDI, OOPSLA (Splash).
- Research in language design
No matter which kind of project you pick, there should be a substantial formalization aspect to it. A pure implementation project is not a good choice for this class.
- Pick an area in which you are interested. Alternatively, pick a paper from a recent POPL or PLDI or OOPSLA conference.
- Read thoroughly 3-6 papers. Read at least superficially 3-6 other papers. I will provide some start leads but you should do most of the work in tracking the relevant papers.
- Write a report on what you have learned
- What are the basic problems
- What are the basic approaches to solving them
- What are the main achievements to date
- What are open problems
- Keep the scope narrow enough so you can say something interesting
There are several sorts of research projects
- Design: invent a language, or a language fragment, for some particular purpose or with some particular characteristic
- Modeling: try to formalize some interesting aspect of some existing language
In any case you should be prepared to write a report on your work.
These projects are the hardest because they also involve some survey work and sometimes implementation. Unless you already have an idea already you can start with a survey project and then turn it into a research one.
The project paper should have an Introduction describing the tackled problem, its motivation and a very brief summary of the accomplishment. Then you should write a description of your notations if they are different from what we used in class. Then you continue with the body of the material. The paper should end with a Conclusion putting the perspective the accomplishment of the project and mentioning the open problems and with a Bibliography of cited papers. Research papers should also have a Related Work section in which they compare the work with previous research results.
The paper should be typeset and made available in electronic form.
The presentation should be very short (15 minutes max including the questions) and should describe in what the problem was, what the difficulties were, and what was accomplished or learned. You must prepare slides. While preparing the talk keep in mind the background that your audience has. It is important for your colleagues to take home a lesson or two from your presentation. Keep in mind that your colleagues have not read all the papers that you have read to do the project.
The grade for the project will be based in part on the scores your colleagues give to your presentation.
Suggestions for Survey Projects
Again, I encourage you to define your own project. In case you do not have any ideas, here are some suggestions. Send me mail to indicate your interest in a topic that does not currently have a description.
- Language Constructs for Concurrency. See Chapter 14 in Winskel's for leads. You must go significantly beyond the simple pi calculus. There are a variety of proposals for new concurrent languages. Look at concurrency models like Futures as well as new languages like Erlang, Clojure, Cilk, Scala and newer ones like X10, Fortress.
- Language Constructs for Parallelism. Map/Reduce.
- Axiomatic semantics for parallel languages. Owiki Gries semantics. See the book by Apt and Olderog "Verification of Sequential and Concurrent Programs"
- Region-Based Memory Management. Is it possible to have a type-safe language where the programmer has some control over the memory deallocation? Regions are one such possibility. Start with the seminar paper by Talpin and then take a look at the Cyclone language.
- Language support for Databases and Web Applications. PL and databases have never entirely gotten along -- attempts to combine the two smoothly have run aground. Follow the links in this survey to see what the problems are, what approaches have been proposed and what remains to be done.
- Web Security. There are several exciting projects on language-based techniques for securing web applications. Start here.
- Dependent Types for Programming and Verification. Capture rich invariants about the program inside the type system. See Hybrid Type Checking, Liquid Types.
- Program Synthesis. Survey the literature on synthesizing programs from high level specifications. Look here for a starting point.
- Separation Logic. Is a recently discovered technique for reasoning about heap-manipulating programs at a low-level, using axiomatic semantics. Look here for a starting point.
- Shape Analysis. techniques attempt to statically analyze and predict the possible structures that will be created at run-time on the heap. Look here or here for a starting point.
- Termination Analysis techniques attempt to statically prove that a given program will terminate. Google "Andrey Rybalchenko" for a starting point. here and here.
- Scalable Symbolic execution. Techniques for generating tests and finding bugs using symbolic evaluation. Start here.