COMP 150PLD-Programming Language Design
Creating a new programming language requires designers to draw on a
wide range of skills: theory to ensure their creation has a
well-defined semantics, engineering to ensure they produce an
efficient implementation, and aesthetics to ensure the whole is
coherent and pleasing to programmers. In this class, we will study
the principles and tools that underlie programming language design.
We will consider both general-purpose languages, which are languages
intended for almost any programming task, and domain-specific
languages, which are languages focused on specific tasks. The class
will be a combination of lectures and seminar-style discussions about
selected academic papers. You will use the knowledge you
acquire to design and implement your own domain-specific programming
language. Prerequisites are CS40 and CS105.
Reading Academic Papers
In this class, we will be reading recently published academic papers
on both programming language designs and on tools for creating such
languages. Reading such papers is an acquired skill, and we'll work on
honing that skill in this class. I will assign a new paper roughly
once a week. You will be expected to read the paper in
advance of the class in which we start to discuss the paper and
then to participate actively in the class discussions. We will use
the process described
note (with thanks to Norman Ramsey) to structure our class discussions.
Each of you will design and implement an embedded domain-specific
language in Haskell. The project
includes picking a suitable domain of personal interest, identifying
the necessary features and abstractions, designing the syntax, writing a parser,
and defining a semantics via translation into Haskell. You will use
Haskell's quasi-quotation mechanism to connect the pieces
into a cohesive domain-specific language. There will be
cumulative milestones throughout the semester where portions of the
project will be due. At the end of the semester, you will be
responsible for describing and evaluating your design both in an
in-class presentation and in a written final report. Students may
self-organize into teams, which are then collectively responsible for
producing a project. In this case, the scope of the project
should be proportional to the size of the team.
Your grade in this couse will be based 50% on class participation and
50% on the class project. Because of the importance of class
participation, you are strongly encouraged not to miss class. In
the event of an unavoidable absence, you should contact me and we will
devise a suitable way for you to make up the work.
On homework problems that are not explicitly joint projects, it is
fine to discuss general strategies and approaches with other
students. However, you should do all your own coding. You should not
look at other students code and you should not show your code to other
Homework is expected to be submitted on time. However, I recognize
that the exigencies of college life occasionally interfere with
on-time submission. As a result,
- The deadline for any deliverable except the final project will be extended for up
to 48 hours on request, subject to these limitations:
- You may ask for at most one extension this term.
- You must ask at lesat 2 days before the deliverable is due.
- The extension must not interfere with my ability to
deliver a lecture or other classroom experience.
For example, if a lecture or classroom exercise
is going to build on the solution to a programming
problem, I will not grant an extension for that problem.
- You must visit me in my office to tell me how this
course and your semester more generally are going.
- There shall be no extensions on the final project.
- If a serious illness affects your ability to complete homework on
time, your first step is to report the illness using the "Illness
Notification Form" that is available in SIS under Resources (the
Settings icon). We will make suitable arrangements.
- For extraordinary difficulties, such as bereavement, family
emergencies, or other extraordinary unpleasant events, your first step
should be to make contact with your
associate dean for undergraduate education. You must take this
step before the assignment is due. Ask your dean to drop me an email
or give me a call, and we will make special arrangements that are
suited to your circumstances.
Academic integrity policy
Tufts holds its students strictly accountable for adherence to
academic integrity. The consequences for violations can be severe. It
is critical that you understand the requirements of ethical behavior
and academic work as described in
Tufts' Academic Integrity handbook. If you ever have a question about
the expectations concerning a particular assignment or project in this
course, be sure to ask me for clarification. The Faculty of the School
of Arts and Sciences and the School of Engineering are required to
report suspected cases of academic integrity violations to the Dean of
Student Affairs Office. If I suspect that you have cheated or
plagiarized in this class, I must report the situation to the dean.