AdaCore: Helping Developers Build Software that Matters
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.
Rejuvenating a codebase to be safer, more concise, structured and readable might be challenging depending on the project’s technical debt. The goal of this internship is to develop tools that aid developers in addressing and eliminating this problem. Such tools would refactor the code by first detecting code-smells  and anti-patterns  and then replacing them with a better and more structured solution. When possible, new features and semantics that have been added to the language should be used.
These tools have the potential to significantly reduce the time and effort needed to rejuvenate a codebase.
Use Libadalang  to analyse a fully semantically resolved AST and implement code rejuvenation tools. A non-exhaustive list of tools could be:
Detection of declarations that could be made private
Detection of declarations that could be scoped more narrowly
Detection of unused fields of a record
Removal of magic numbers and strings
Detection of duplicated code
Detection of unhandled exceptions
Detection of global variables that could be declared constants
Detection of declarations that shadow others declared in an outer scope
Skills required or Nice to have:
Experience with one high-level programming language (ideally Ada or Python)
Ease with UNIX command-line shell and git
As a bonus, experience or interest in developing static analysis tools
Timeframe and location:
Flexible timeframe, ideally with a duration of 6 months
Bristol (UK), Paris (France)