Programming language internships in Paris, France
January 8, 2010 § Leave a comment
Edit: Thanks for all the high-level applications to MLstate’s internships. All positions are now filled.
See you soon for the next release of OPA.
MLstate develops OPA, a web development platform based on state-of-the-art research in programming languages, databases, concurrency and distribution. MLstate offers several internship positions around OPA in both R&D and Development around the following topics:
- programming languages;
- web development;
- type systems;
- static analysis;
- compiler optimization;
- proof of programs;
- user interfaces.
Internships will be remunerated €800 per month + bonus and can lead to full-time positions and/or PhD positions.
Ideally, candidates will be graduate students in Computer Science, interested in R&D and in safe-by-design programming. Furthermore, candidates should have some knowledge in at least one of the following topics:
- functional programming, preferably with a statically-typed language such as OCaml, SML, F#, Haskell, Scala;
- web development;
- concurrent/distributed programming;
- message-passing models;
- theory of concurrency;
- type systems;
- proof of programs;
- databases, including non-relational databases;
Candidates must be allowed to work in France and will be affected in the R&D team of MLstate, in Paris, France, close to the National Library, in a multilingual team of researchers and engineers.
Development of optimizing compilers for high-level languages is often hampered by fundamental design issues in modern processors and virtual machines, designed to improve the performance of imperative, low-level, languages. Numerous techniques such as lambda-lifting, continuation passing-based transformations and others have been designed to efficiently compile functional higher-order languages towards imperative instruction sets. Similar techniques can be used for compilation of concurrent and/or distributed code.
The OPA language is a high-level language, with several compilers targeting several native and interpreted platforms, both sequential and concurrent. As part of this work, the intern will take part in the development of an experimental branch of the native parallelizing compiler of OPA. The intern will research, design and implement techniques of compilation, optimization and static analysis, as well as measure and improve the performance of the compiler itself.
Topic: Online development tools
Today’s development tools, compiler, IDE, debuggers, etc. are typically hosted on the developer’s workstation. This does not have to be, all the tools exist to move them to online platforms. In particular, the OPA language has been designed for such applications.
As part of this work, the intern will take part in the design and development of online tools for developers, including an online interpreter and an online IDE and compiler, accessible as webservices and web applications. This work will take place in OPA and will serve both to push forward the user experience of OPA developers and as a demo for potential future OPA users.
Topic: Type systems
In statically typed languages, the first line of defense against security holes goes is the type system, which checks consistency between hypothesis made by the programmer, implicitly or explicitly. Despite the flexibility offered by type systems with inference and structural typing, no type system will accept every correct program and every programmer will eventually be stopped by the limitations of his type system.
The OPA language is statically typed with an innovative type system. OPA has already been through two major generations of type systems, which have let it improve in flexibility, power and safety. As part of this work, the student will take part in the design and development of a third generation. The intern will suggest extensions to the type system and its inference mechanism, to improve handling of implicit recursive types, open recursive types, as well as interactive correction of type errors and interaction between static and dynamic type systems.
Topic: Type-safe metaprogramming
Metaprogramming is a programming technique that lets users write programs which will be evaluated during compilation or interpretation and produce new programs which can themselves be compiled, evaluated, possibly produce new programs themselves, etc. This powerful technique is difficult to manage, in terms of dependencies, typing, performance, traceability.
The OPA toolchain makes use of metaprogramming techniques which are not, for the moment, usable by external developers. The main objective of this work is to experiment and define metaprogramming practices and analysis which can be safely used by end-users. In parallel, the intern will take part in the development of tools for type-safe static manipulation of programs, in particular for refactoring purposes.
Topic: Distributed programming
By nature, web applications are distributed between one server and numerous clients. The server component itself is also usually distributed between several web servers, several storage servers and sometimes additional processing servers. While such distribution is generally necessary for reasons of performance, storage capacity or features, the underlying mechanisms are often slow, waste space and commonly open security holes.
The OPA compiler produces applications which are distributed between all these targets. The objective of this work is to take part in improving the distributed runtime for OPA, in particular optimizing the distributed garbage-collector, the communication and migration protocols, as well as routing.
(other topics will be posted as they become available)
Tagged: ajax, compiler, concurrency, database, dependencies, distribution, ide, internship, job, metaprogramming, OCaml, online development, OPA, performance, programming, programming language, type system, typing, usability, web, web 2.0