CPSC 511:
Programming Languages Fundamentals and Applications
News
- First lecture: Monday September 10th, 12:30-2 pm.
- Lectures every Monday, Wednesday 12:30-2pm DMP 101.
Important Links
- Schedule: Lecture by lecture
schedule, of topics covered, papers to read, deadlines etc.
- Projects Ideas: An evolving list of
ideas for potential course projects.
- Paper reviews: Some guidelines
on how to write a review and a template "review form" to use.
- Mini Conference: Schedule
for the "mini conference" at the end of term, with links to papers
submitted by the students.
- Java Code: An ongoing attempt at porting
some of the various LiLa implementation into Java.
Why take this course
Increasingly programming language techniques are being used to
solve a variety of hard problems in software systems. Partial
evaluation is used to automatically synthesize optimized
implementations for spefic deployment contexts, from more generic
high-level implementations. Sophisticated type systems and static
analysis tools are being developed to find different kinds of bugs in
software systems. Reflection is used throughout web servers to enable
dynamic deployment and configuration of webservices. Continuation
passing style can be used to reconcile the stateless web-based http
protocol
with the implementation of statefull web applications, without ending
up
with hopelessly convoluted code.
This course will give you a solid foundation in programming language
techniques and show you how programming language experts think about
building complex systems.
Course Overview
We will cover a number of fundamental ideas in programming
languages, and for each idea we will trace a bridge from the basic
idea, through advanced research, to practical applications. Following
is a tentative list of topics we will likely cover.
This list of topics may change based on the specific interests of
the students in the course. We will use a variety of tools to explore
each topic area, including writing simple interpreters as semantic
models and developing simple applications with tools such as the
PLT web server, the Esc/Java static checker, the AspectJ programming
environment, MetaML, etc.
- Core semantics of procedural programming languages:
- Core semantics: higher-order procedures, scoping mechanisms,
environments, continuations.
- Real world application: using continuations to prevent
important, but unfortunately common, problems with web applications.
- Possible projects: implement a web application with the PLT
Webserver.
- Object-oriented and aspect-oriented programming languages:
- Semantic models of simplified OO (Java-like) and AO
(AspectJ-like) languages
- Efficient implementation of OO and AO languages.
- Other OO and AO languages.
- Real World Application: Large-scale AOSD
for middleware.
- Possible projects: implement/refactor something in the AspectJ
aspect-oriented programming language.
- Type checking and static program verification:
- Partial evaluation automatic program specialization
- Basic operation and principles of online and offline program
specializers.
- Futamura projections: making compilers from interpreters,
making compiler compilers from partial evaluators, etc.
- Staged execution in MetaML.
- Application: Aspect weaving through partial evaluation.
- Real world application: The Sythesis Kernel.
- Possible project: download and install "Similix" and apply it
to one of our semantic models to derive a more efficient "compiled"
implementation.
Course Style
We will do this by building working model implementations in
Scheme. These models will be simplified and emphasize conceptual
understanding of high-level semantics and key ideas in implementation.
On the other hand we will look also at how some of these ideas have
have actual impact and applications in the construction of real
systems.
Your work
In this course, you will:
- Study a number of Scheme model implementations.
- Some small home works, extending or working with the
aforementioned models.
- Some small home works downloading and using some of the real
world tools we discuss in lecture.
- Read some research papers and prepare for a class discussion by
writing a short review.
- Do a larger project of your choice.
- Write a report about your project and submit it at the end of
term.