Fetching the latest programs, projects, and workspace data.

Modern and immersive programming language
Showing 5 of 36 projects. Click any project card for scope, mentors, and proposal studio.
Mentors: Student: Zinnia Nagpal
The Pharo VM is written in Slang, a Smalltalk subset that is transpiled to C by the CCodeGenerator. Currently, the entire VM is generated into a handful of large monolithic C files where code from completely different subsystems the garbage collector, the interpreter, and the JIT compiler are all merged together into a single output stream. This makes the generated code difficult to read, navigate, and maintain, and means that changing a single method triggers recompilation of the entire VM rather than just the relevant module. This project introduces separate compilation to Slang by refactoring CCodeGenerator to route generated C code into multiple files, one per class hierarchy, while correctly tracking and emitting #include dependencies between them. The approach involves extending CCodeGenerator to maintain per-hierarchy output streams, implementing a dependency graph builder to determine which hierarchies reference which others, generating corresponding header files with the necessary forward declarations and prototypes, and updating the CMake build system to automatically discover the new files. The deliverables are: a working dependency graph builder for TMethod objects, a refactored CCodeGenerator supporting multiple output streams, successful extraction of the SpurMemoryManager garbage collector hierarchy into its own standalone C file with correct includes as a proof of concept, header file generation for all separated modules, extension of separate compilation to the Cogit JIT compiler and remaining hierarchies, and an updated CMake build configuration. All existing VM tests will pass throughout, ensuring no regressions in the generated code.
Mentors: Student: Biljana
Pharo provides an immersive and interactive development environment with powerful refactoring tools. However, its current refactoring workflows can be fragmented, rely on frequent pop-ups, and offer limited feedback, making them less user-friendly. This project aims to improve the usability and interactivity of Pharo’s refactoring tools, with a focus on rename operations. To achieve this, the project will develop a flexible driver and preview infrastructure that supports safe experimentation, introduce live name editing with immediate validation, and enhance the visualization of changes through a hierarchical tree structure. The expected outcomes include a streamlined refactoring workflow, a clear hierarchical preview of all changes, real-time validation of user input, and a more intuitive and interactive user experience that helps developers better understand and manage code transformations.
Mentors: Student: Hossam Saber Sayed
This project introduces a library of 7 data structures to the Pharo ecosystem, replacing O(N) bottlenecks with resilient, mathematically proven structures (including B Trees, K-D Trees, and Persistent Arrays). Following a full design approach, the implementations will be stress-tested using Competitive Programming datasets to guarantee architectural integrity under heavy load. Finally, the project utilizes VM-level tools (TimeProfiler and MemoryProfiler) to empirically benchmark performance, delivering production-ready infrastructure alongside interactive visual inspectors.
Mentors: Student: Tokimahery
In agent-based modeling, the goal is to understand how individual agent behavior agent behavior is influenced by social norms (rules like obligations, prohibitions, and permissions). Using platforms like CORMAS built in Pharo, modelers have to hardcode norms directly into agent behavior, making the system rigid and hard to manage. Using method proxies - a reflective programming technique in Pharo that intercepts method calls at runtime - we propose to implement norms as a separate, modular layer on top of CORMAS with different handlers for obligations, prohibitions, and permissions. This work aims to deliver 1) a CORMAS plugin (cormas-norms) with its tests and documentation, 2) a better UI to manage norms live during simulation, and 3) a real-world use case demo of the plugin.
Mentors: Student: Lucia Cardin
To build a DJ application with two decks in Pharo, I will make use of three libraries: Phausto for audio file playback (at variable speed), equalization, and filtering. Spec for building a browser to visualize audio files in a folder together with their metadata, and to organize these files into playlists. Bloc for the visualization of audio waveforms and the rendering of UI widgets to control playback speed, pitch, levels, the equalizer, and filter cutoff and resonance. As a first step, Phausto will be used to load and simultaneously play two audio files, mixing them via the Phausto API. Once the audio engine is in place, a Spec application will be built to browse audio files and load them into either of the two decks. With the file browser complete, a conventional user interface will be added to control the mix between the two tracks and their equalization. The Phausto standard library will then be used to add a delay effect per deck. With the DJ application running, final polish can be applied in the form of BPM detection and track quantization, which requires implementing peak detection for audio files within Pharo. Deliverables: The Spec application with audio file browsing and audio playback will be delivered before the first evaluation. The audio visualization and UI built with Bloc will be delivered halfway between the first and final evaluations. Extra features (BPM detection and quantization) will be added and tested before the final evaluation.