Guillermo Polito

Guillermo Polito

Mastering objects


I participate in many software projects, that are of value from a research point of view, as well as open source communities and companies.


DBXTalk is the relational database suite for the Pharo language. It provides you with database drivers for the mainstream relational database engines, an ORM and some other utilities like polymorphic query a database schema or some scaffolding tools.


Ozono is simplified development environment built on top of Pharo to teach OOP. Its core idea is to focus on the main ideas behind the object paradigm: object, message and polymorphism. As a consequence, other ideas such as the way to organize the behavior of objects (e.g. with classes or traits or mixins) is delayed and treated as a secondary concept.

The current implementation has its UI in spanish. There are some ongoing efforts to provide translations to english and french.

Espell Object Spaces

Espell is the main software contribution from my phd. Espell object spaces allow the complete manipulation of an object runtime from another object runtime: debugging, browsing, object graph analysis, etc. My implementation is based on Pharo and contains two main elements:

  • Oz Virtual Machine. is a Pharo Stack virtual machine with support for handling several worlds at the same time.
  • Espell Language side Packages. are the packages that at the language level allow the manipulation of other object runtimes.

Using Espell, I developed many experimental utilities:

  • Oz recovery tools. The Oz image loader and Oz emergency kernel help in the recovery of a broken or unstable Pharo image.
  • Oz development tools. Debugging, browsing and inspecting another object runtime.
  • Hazelnut. Bootstrapping a reflective object kernel. Hazelnut bootstrap takes as input the source code defining the new object kernel and outputs an object graph defining the new runtime. The bootstrapped object runtime is aimed so far to run on the Pharo Virtual Machine.
  • Tornado. Tornado is a tool to extract used classes from an application to prepare it for deployment. From a set of selected classes and a couple of expressions that run your application, it dinamically selects the elements your application needs at the end. Our extraction algorithm (Run-Fail-Grow) works, in contrast with other extraction techniques, in dinamically-typed languages, and under the use of reflection. With Tornado, we managed to produce minimal Pharo images of up to 10k, and Seaside images of around 600k.