Prerequisite: a grade of C or better in CMSC330; and permission of instructor; or CMSC graduate student.
CMSC 838E is a graduate-level advanced compilers course. Its major goal is to design and build a complete modern programming language implementation, including advanced research-level features. Throughout the course, students will collaboratively design and implement a high-level, memory safe programming languages with modern features drawn from the programming language literature, incorporated into a compiler that target the x86 CPU architecture
The course assumes familiarity with a functional programming such as OCaml from CMSC 330, and, to a lesser extent, imperative programming in C and Assembly as covered in CMSC 216. Since the course builds significantly on CMSC 430, it is recommended undergraduate students have already completed 430 and that graduate students have taken a compilers course before, however in either case, highly motivated students should be able to keep up with the material without this background.
This course will be run as a collaborative research “workshop.” There will not be traditional lectures beyond the first few covering the background on functional programming and compilation. Once this background is covered, we will work collectively to accomplish goals we establish for our compiler. Students will work both in small teams and collectively with the whole class. Class time will be spent covering research papers relevant to our goals, discussing technical issues, and reviewing our collective work.
Outside of the scheduled class time, we will communicate primarily via Discord and Github.
The discord server is there for you to organize as a class, ask questions of each other, and to get help from eachother and the instructor.
This course will be intentionally open-ended; we will collectively decide what to explore, but some potential topics include:
Overview of compilation
Intermediate representations and bytecode
Type systems, type soundness, type inference
Register allocation and optimization
As a graduate course, your participation is extremely important and accounts for 20% of your assessment. This means attending class, participating in discussions, and engaging with the course material.
For the remaining 80%, there are two ways to be evaluated in this course:
The assignment-based path will require you to do and submit weekly work. It will be graded mostly for effort, not correctness.
The project-based path will require to propose, implement, and write-up a small PL-related research project. You have a lot of flexibility in terms of the design of the project, but you should work with the instructor early to make sure you’re on the right path. Collaborative projects are encouraged.
We will use the scheduled class times to meet synchronously in person.
Students are expected to use their own systems or resources provided by the department or university to develop the deliverables for this course.
We will use git and Github for revision control, continuous integration, and deployment. Please make sure everything you build works on these systems.
Asynchronous communication will be done via Discord. Please check in to the Discord server at least once per weekday at a bare minimum.
Students with disabilities who have been certified by Disability Support Services as needing any type of special accommodations should see the instructor as soon as possible during the schedule adjustment period (the first two weeks of class). Please provide DSS’s letter of accommodation to the instructor at that time.
All arrangements for exam accommodations as a result of disability must be made and arranged with the instructor at least three business days prior to the exam date; later requests (including retroactive ones) will be refused.
Please read the university’s guide on Course Related Policies, which provides you with resources and information relevant to your participation in a UMD course.
Graduate students should also be familiar with the Graduate School’s Academic Policies.
The Campus Senate has adopted a policy asking students to include the following statement on each examination or assignment in every course: "I pledge on my honor that I have not given or received any unauthorized assistance on this examination (or assignment)." Consequently, you will be requested to include this pledge on each exam and assignment. Please also carefully read the Office of Information Technology’s policy regarding acceptable use of computer accounts.
Projects may be completed collaboratively, therefore cooperation with others is not a violation of the University’s Code of Academic Integrity. However, your work must be your work. Plaigarism or the uncredited use of others’ work is not acceptable. Any evidence of this, or of unacceptable use of computer accounts, use of unauthorized materials, or other possible violations of the Honor Code, will be submitted to the Student Honor Council, which could result in an XF for the course, suspension, or expulsion.
If you have any question about a particular situation or source then consult with the instructor in advance.
It is the responsibility, under the honor policy, of anyone who suspects an incident of academic dishonesty has occurred to report it to their instructor, or directly to the Honor Council.
If you have a suggestion for improving this class, don’t hesitate to tell the instructor. At the end of the semester, please don’t forget to provide your feedback using the campus-wide CourseEvalUM system. Your comments will help make this class better.
Although every effort has been made to be complete and accurate, unforeseen circumstances arising during the semester could require the adjustment of any material given here. Consequently, given due notice to students, the instructors reserve the right to change any information on this syllabus or in other course materials. Such changes will be announced and prominently displayed at the top of the syllabus.