COMP 150PLD-Programming Language Design
Fall 2014

Time: MW 10:30–11:45
Place: Halligan 102
Home page:
Instructor: Kathleen Fisher, Halligan 205
Office Hours: Wednesday 3:30-5pm and by appointment

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 in this note (with thanks to Norman Ramsey) to structure our class discussions.

Class Project

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 students.

Late Policy

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,

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.