Personal Project
COP-5621, Spring 2024
Overview
Pick something that is larger than a programming homework, yet achievable in a few weeks before the end of the semester. It should be related to language design, implementation, and/or analysis in some way. If you have a personal or research project you are working on, that is okay to use as well, as long as you clearly delineate a portion to work on for the class, i.e., don't just take something you've already done. Try picking something you're curious about or interested in already. It may also be something academic, such as an in-depth study, empirical study, or literature review of a specific area of programming languages, compilers, or software.
Logistics
- Propose the project first by the proposal due date. The proposal must include:
- what you want to achieve,
- the rough technical steps, and
- (this is crucial) how to measure achievement.
- Propose something that would take at least around 2 weeks.
- Prepare a brief (around 10-15 minutes, including time for questions) presentation/demo of your project by the project due date.
- Submit the project according to the syllabus.
- Work on your own. Group projects possible in compelling cases.
- Everyone should have a different project. We can coordinate this via chat.
- Follow the rules about academic integrity.
Final presentation guidelines
- Follow your proposal
- Motivate the problem, give the intuition
- State the goals
- Briefly overview the technical aspects
- Evaluate or show that the goals were achieved
- Can have a recorded demo
- Grading
- You will be evaluated based on what you proposed, with an awareness that plans don't always work out
- You won't be penalized if you have a good story around any changes in goals or results
Sample project ideas
There are two categories of projects, building on the SimpleC compiler or de novo projects.
Build on the existing compiler
- Add some new language features, e.g., additional types of loops, more types, new function call semantics, pointers, arrays, first-class functions, immutable variables, etc.
- Add improved type-checking/analysis, e.g., more flexible function types, return statement(s) in all paths, etc.
- Add optimizations to intermediate code or machine code, e.g., peephole optimizations on generated assembly, better ordering of basic blocks, register allocation
- Implement control- and/or data-flow analyses from source, intermedite, or machine code
- Add a new machine code backend, e.g., arm, mips, etc.
- Develop an interpreter for source, intermediate, or machine code
- Design a new intermediate language
- Port the front-end to a different intermediate language, e.g., LLVM
- Improve error handling and reporting
- Implement union/find type inference
- Support heap allocation
Other project ideas
- Develop a source-to-source transformations, e.g., SimpleC to Rust, ANTLR's visitors can help with this
- Write a binary transformer, e.g., from x86 to ARM
- Implement an emulator for binary programs, e.g., for the Motorola 68000
- Implement a scheme interpreter in scheme
- Design a new source language and implement a compiler to our class's intermediate language