M2 Internship 2023–2024: Efficient compilation of a modular distributed programming language
Distributed systems; distributed programming; programming languages
Distributed systems are increasingly widespread and critical. A typical distributed system is a composition of communicating, concurrent modules; this enhances scalable performance, modularity, clear APIs, elasticity and flexibility. However, composition is hard because of concurrency, failures, and lack of guarantees such as type checking.
Accordingly, our group aims to develop a programming environment that both leverages the strengths of distributed computing, and helps to tackle its issues. Such an environment should enable the developer to reason about individual components and about the behaviour of their composition, while preserving performance and programmer control.
Our Varda distributed programming environment is designed to reconcile performance and strong abstractions. A Varda program specifies a system as an architecture of independently-developed components. Each component has a well-specified protocol interface and high-level safety constraints. Furthermore, the developer specifies the system’s orchestration, i.e., how components are created, destroyed, where they are located, how they interact , and what invariants must be maintained. A Varda system can be re-architected flexibly thanks to transparent interception.
Varda supports lightweight but strong abstractions, which are designed to have low overhead and to not come at the expense of performance, placement control and elasticity. The current Varda compiler emits Java code and interfaces with a runtime in the Akka environment; its overhead is not satisfactory.
The goal of the internship is to extend support to the Go language, interfacing with Kubernetes, and to improve performance and flexibility. The intern will gain working knowledge of the Go language and of Kubernetes, and will advance the state of the art of distributed systems and distributed languages.
Requirements and application
The candidate should ideally be familiar with compilation and have some knowledge about distributed system.
The candidate should also have a basic experience in software programming in OCaml and usage of collaborative tools such as git.
- A resume or Curriculum Vitæ.
- A motivation letter.
- A list of courses and grades of the last two years of study (an informal transcript is OK).