Everything we do at AdaCore is centered around helping developers build safe, secure and reliable software.
For over 25 years, we've worked with global leaders across the military and civil avionics, defense systems, air traffic management/control, space, railway, and financial services industries, building tools and providing services that ease the complex and difficult process of developing high-integrity software. As the need for truly secure and reliable applications expands into industries such as automotive, medical, energy, and IOT, we’re advancing our time-tested technologies to bring expertise and services to help a whole new generation of developers. Through our subscription-based business model and dedicated services arm, we have worked with hundreds of customers over the year on thousands of projects.
Our 120 experts worldwide in the US (New York, Lexington), France (Paris, Toulouse, Grenoble and Vannes), the UK, and Estonia, all play a role in developing state-of-the-art technologies to meet the challenges of building the highest grade of software.
Joining AdaCore is about joining a culture of innovation, openness, collaboration and dependability, which defines how we work together, with our customers and partners.
 https://github.com/AdaCore/langkit  https://en.wikipedia.org/wiki/Unparser
Design of a new finite domain constraint solver for semantic analysis
Libadalang  is a syntactic and semantic engine for the Ada language. It is able to parse and semantically analyze Ada code.
Libadalang is based upon Langkit , an engine for specifying code analysis engines from grammar and specification of the language semantics.
The semantic analysis phase of Libadalang uses a general purpose finite domain constraint solver developed specifically for Langkit. The problem with this solution is that the design of the solver results in some Ada statements taking an exponential time to resolve.
The intern’s job would be to:
Get familiar with the high level formalism of the desired solver
Get familiar with the possible theoretical solutions and the design of the prototype solver.
Make a design (possibly including, or inspired from the prototype solver) for a new solver, with the concern of satisfying the desired semantics, and being fast enough for the known edge cases.
Implement this design, and integrate it in Langkit/Libadalang
This will include possibly getting familiar with the existing state of the art for finite domain constraint solvers, the pros and cons of different implementation approaches, etc. The finality is to replace the existing solver, and to solve the existing performance problems in Libadalang.
Skills required/nice to have:
Experience/interest in compilers, parsing, syntactic & semantic analysis
Experience/interest in constraint solving/logic programming
During 2021 - 6 months - Paris Office