Instructor: Chen Ding, Prof.
TA: Luck Chen
Lectures: 3:25pm-4:40pm, Tuesday and Thursday @ CSB 601
Today's programmers face a wide range of programming
language features.
For efficiency in embedded systems, one may use static data structures and
macros. For extensibility in prototyping, one may favor polymorphic
operations and encapsulated modules. For resource sharing and
aggregation,
one may design a parallel and distributed system. Quite often, the
program
demand at hand is a mixture of many requirements, and the appropriate
solution is probably a combination of several languages/systems. For
example, if you were to write a web-based agent, what programming language
or languages would you use? To made such decision, you need to understand
how programming languages work.
This course teaches fundamental concepts in modern programming languages by
explaining their operational definitions, i.e. how they are implementated.
The course will guide students through basic techniques of lexical and
semantic analysis, code generation and run-time environment, first-class
functions, static and dynamic typing, and program communication and
synchronization. The teaching is styled as a process of problem solving,
so that students will see not only how languages were defined but also why
they were so designed. To complete the learning experience, students will
implement a set of core language features on a real machine.
The basic material of this course is covered by its textbook. In
addition,
I will emphasize concepts and techniques that are most relevant to building
large programs or programs processing large data sets. For this reason, I
will focus on high-level language implementation and leave out most
assembly-level issues. Drawing from my own research, I will add a few
lectures on data management, which will offer an integrated look at the
problems and techniques of mantaining the correctness and efficiency of
program data.
(*) indicates emphasis. (new material) means outside the textbook.
Introduction
Basic compilation (*)
lexical and semantic analysis (Chapter 2, 4)
scope, binding, and code generation (Chapter 3)
Controls
branch, iteration, recursion (Chapter 6)
exception, coroutine (Chapter 8)
Program abstraction (*)
type (Chapter 7)
inheritance and polymorphism (Chapter 10)
Concurrency
synchronization, message passing, RPC (Chapter 12)
Data management (*)
static and dynamic data
cache management (new material)
data partitioning (new material)
Functional and logic programming (Chapter 11)
Optional topics (depending on time and interest)
high-level program analysis and transformation
software components
instruction-level scheduling
program security and verification