Language Design and Implementation (CS 4501) is a more accessible elective than its more challenging sister course, Programming Languages (CS 4610). Students who desire the more difficult experience of Programming Languages from previous semesters may opt in to a Legacy Grading Contract at the start of the course. Under the Legacy Grading Contract, students complete the programming assignments as they were presented in Programming Languages in previous semesters.

Students may opt in to the Legacy Grading Contract with the first assignment.

Students may opt out of the Legacy Grading Contract at any time — even in the middle of the course — with no penalty.

Legacy Grading Contract

Legacy Grading Contract students complete the programming assignments in different ways and using different materials. All deadlines remain the same.


If a Legacy Grading Contract student chooses to work with a partner, that partner must also be another Legacy Grading Contract student.

Language Selection

Legacy Grading Contract students must use a different programming language for each of PA2, PA3, PA4 and PA5.

For example, a Legacy Grading Contract student might complete the Lexer (PA2) in Ruby, the Parser (PA3) in Python, the Type-Checker (PA4) in Haskell, and the Interpreter (PA5) in OCaml.

Legacy Grading Contract students are encouraged to plan out in advance which language to use for each project. For example, while students are typically more familiar with Python and Ruby, their dynamic typing makes them particularly poor choices for PA4 and PA5 (e.g., although you may save X minutes writing in those familiar languages, you will lose 2X minutes in extra testing and debugging). OCaml and Haskell are typically viewed as the best choices for PA4 and PA5, but Haskell's handling of IO makes it a tricky choice for PA5. JavaScript's asynchronous IO makes it a particularly tricky choice regardless of the assignment. In addition, Lexical Analyzer Generator and Parser Generator support for PA2 and PA3 is not equally robust across all languages: students are welcome to visit legacy CS 4610 websites for hints about which languages have the best tool support.

If Legacy Grading Contract students work with partners (or even switch partners), each partner must independently satisfy the Language Selection Rule: each Legacy Grading Contract student must use a different language for each of PA2-PA5.

Legacy Languages

Legacy Grading Contract students must support older, legacy versions of programming languages when completing their assignments. Writing cross-platform and architecture-independent code that works on legacy servers is a particular challenge and a relevant skill for industry. The language versions used for Legacy Grading are:

If you use features, functions or syntax added in newer version of these languages, your code may not work on our grading servers. This is particularly relevant for Ruby and Python. In addition, because the Legacy Grading Contract server is terse with error messages, it may be difficult to tell the difference between "my code is failing a test because of an algorithmic mistake" and "my code is failing a test because I used a feature from the wrong version of this language". When reading standard library documentation, you may want to pay particular attention to @since and similar annotations that indicate when a function was added to the language. This challenge is intentional.


Legacy Grading Contract students must use an alternate grading submission website for each programming assignment.

This alternate submission website provides less information, uses harder tests, and uses the legacy language versions listed above. In particular, these held-out tests are typically anonymized (e.g., "your submission failed test #5") instead of labeled (e.g., "your submission failed test call-to-unknown-constructor.cl"). In addition, Legacy Grading Contract students may face more, different, or more difficult tests.

Reduced Curve

The grading curve for Legacy Grading Students may be slightly reduced for Legacy Grading Contract students. For example, it may be that in the default class, a raw B, B+, and A- all curve to an A, but with the Legacy Grading Contract, only a B+ or A- curve to an A. It is still entirely possible to receive an "A+" grade (and many students do each semester).

No Video Guides

Legacy Grading Contract students must not use any of the class-prepared video guides (except those for PA1). Legacy Grading Contract students are on their Honor to neither watch nor discuss such guides with other students. An intentional part of the challenge is figuring out how to set up the programs on your own.

Exception: Legacy Grading Contract students may use the PA1 Video Guides. Students will likely encounter those videos before they decide on the Legacy Grading Contract.


Legacy Grading Contract students must submit implementations in all seven different source languages for PA1 (rather than just two).

The available languages are C, Cool, Haskell, JavaScript, OCaml, Python, and Ruby. See the CS 4610 PA1 webpage for more information.

PA1 Legacy Grading (out of 50):

PA2, PA3, PA4, PA5

No specific changes. Note that the Language Selection, Legacy Language, Submission and No Video Guides rules still apply.

Opting In and Out

To opt-in to the Legacy Grading Contract, simply follow the rules above starting with the first assignment (e.g., do not watch the video guides, submit PA1c via the alternate grading server, etc.). No special permission is required. Students are welcome to discuss this prospect with the professor and teaching assistants (e.g., "I am also taking X, Y and Z this semester, will I have time for this?").

Students may only opt-in to the Legacy Grading Contract starting with the first assignment (PA1c).

To opt-out, simply send the instructor an email and start using the normal submission server. Your grades from already-completed assignments will be carried over and your final course grade will be calculated using the more generous non-Legacy curve. For example, if you complete PA1 and PA2 using the Legacy Grading Contract and then decide to opt out, your PA1 and PA2 grades will be transferred over verbatim, but you may complete PA3-PA5 using the same language each time, using the video guides, etc.


Programming Languages (CS 4610) is typically regarded as the most difficult and time-consuming undergraduate elective offered by the department. It is common for a CS 4610 class with an initial enrollment of 80 students to self-select down to 30. Students often view completing CS 4610 as a rite of passage. The Legacy Grading Contract allows a student to complete the Programming Languages material while receiving credit for Language Design and Implementation. In general, there are two reasons a student might desire this:

First, a student may honestly desire to learn as much as possible, regardless of the threat of a slightly lower grade or the additional time commitment required. While this is not a good fit for all students (e.g., a student trying to hold down a part-time job and take a number of electives may not have time for the extra work of the Legacy Grading Contract), some students will have both the time and the interest to do so.

Second, a student may desire a top-tier letter of recommendation or access to a future research experience. Students who complete CS 4610 or the Legacy Grading Contract with "A" or "A+" grades are typically invited to join the professor's lab as paid or for-credit undergraduate researchers. In addition, students seeking a PhD (or a particularly competitive industrial position that requires letters) can receive significantly stronger letters by completing the Legacy Grading Contract.