Programming tools for Pharo based on Type Inference

Research Team:
Team leader (HDR):
Stéphane Ducasse
Project leader and contact:
Stéphane Ducasse

Project Context

Pharo is a new open-source Smalltalk-inspired programming language and environment. It provides a platform for innovative development both in industry and research. As a dynamically-typed language it has a lot of benefits but also drawbacks. One of these drawback is that it is complex to analyse the system since no type information is available statically. Type inference mechanisms can be used to compute the types of variables from the source code. Several type inference tools already exists for Smalltalk[1] but the type information they bring has not revealed all its potential yet. The goal of this internship is to leverage this type information thanks to new programming tools.


The student will have to develop programming tools using type information. Example of such tools are:

  • Code analysis tools
    • better "implementors of" and "sender of" lists
    • dead code finder
  • Development tools
    • type mismatch hints at compile-time
    • better code completion

Work plan

To solve this problem, the student will have to:

  • evaluate existing type inferencer for Smalltalk;
  • adapt the best alternative in Pharo;
  • develop new programming tools

Benefits for the Pharo community

  • Improve existing code base in all the system;
  • Better development tools

Benefits for the student

  • Integration into a prolific research group, fond of software development and programming languages;
  • Potential integration as a master and/or PhD student either within the group or within one of its numerous partners around the world (Switzerland, Chile, Belgium, Argentina, Italy).


  • Having a good understanding of object-oriented programming.
  • Being eager to learn a new programming language and environment.


[1] Pluquet, F., Marot, A., & Wuyts, R. (2009). Fast type reconstruction for dynamically typed programming languages. ACM Sigplan Notices, 44(12), 69-78.