Programming Language Design and Implementation
Project Description
Programming languages (PL) are central conceptual tools in computer science, software engineering, and related fields. Beyond just telling computers what to do, they are vectors for expressing thoughts in a rigorous way and for communicating these thoughts to other humans.

There is a vast space of possible design and implementation choices to make when creating a new language or improving an existing one. Because this space is too large and complex to explore exhaustively, a certain dose of creativity and consistent intuition building are important parts of PL research. Equally important is the rigorous analysis of programming language semantics, verifying that language designs exhibit desirable properties and that language implementations fulfill their specifications. Finally, relatively advanced programming and algorithmic skills are required to ensure the reliability and efficiency of compiler and type checker implementations.

The goal of this project is to explore each of these axes to varying extents, depending on each student's personal interests.

REQUIREMENTS: Students applying to this project should have extensive programming experience and at least some experience in either functional programming or compiler design. For instance, a good way of obtaining this experience is to take the Principles of Programming Languages and/or Modern Compiler Design courses.
Supervisor
PARREAUX Lionel
Quota
4
Course type
UROP1000
UROP1100
UROP2100
UROP3100
UROP4100
Applicant's Roles
Develop new PL features and type system ideas, implement them in prototypes, formalize them and prove basic correctness properties about them. The actual features investigated will be up to the student's affinities and background knowledge.
Applicant's Learning Objectives
In this project, students will learn the basics of programming language research and development, including the implementation of type system and runtime features, but also the formalization of programming language semantics and the derivation of mathematical correctness proofs for them. They will learn new programming and algorithmic skills on the way.
Complexity of the project
Moderate