one interpreter, fifteen languages
Student final projects from the Introduction to Probabilistic Programming Languages course at the University of Buenos Aires, 2026.
For the final project in the Introduction to Programming course at the University of Buenos Aires, students were asked to translate the interpreter implementation we had used in class into another programming language.
The course covered the book An Introduction to Probabilistic Programming by van de Meent, Paige, Yang, and Wood. However, during the course, we built a slightly different interpreter, which became the basis of the final project. It was a simple Python interpreter based on two stacks: one for values and another for operations. The interpreter was initially created with Claude and continued to grow during the course.
The idea for this project was partly inspired by Crista Lopes’ book Exercises in Programming Style. In that book, the author explores different programming paradigms by solving the same task over and over again—computing the frequency of words in a text file—using radically different styles. To motivate students to consider different paradigms, I suggested that they choose a programming language of their choice, hoping that the different languages would naturally induce different programming styles.
Indeed, that is what we observed. The number of programming languages represented was much higher than I had anticipated, and the solutions showed very interesting variations. I think it is a fascinating experience to have the chance to look at so many different approaches to solving the same problem. I wanted to share these solutions with the students and with the rest of the world, whenever the authors agreed to make them public. Students were allowed to use AI for this project. Some created tutorials, even including exercises! Some solved the problem using the continuation monad; some relied on native support for continuations; some used the visitor pattern; some added static analysis to reduce errors; and some implemented basic automatic differentiation. All of them, however, showed a clear understanding of the topic.
I hope you enjoy the projects as much as I did!
| Student(s) | Language | Repository |
|---|---|---|
| Leonel Alan Braginski Maguitman | Kotlin | LeoBrasileo/HOPPL-Interpreter |
| Joaquin Melone Zarauza | C# | joaquinmelone/PPL-TP |
| Germán Schischlo | Rust | gschl/hoppl-rs |
| Andy Pomsztein | Dart | AndyPandy25/Trabajo-Final-PPLs-Andy-Pomsztein |
| Felipe Durini | JavaScript | felipedurini/intro-ppl |
| Martín Nievas Wilberger | Rust | MartoNievas/IntroPPL-TP-FINAL |
| Lautaro Orsi | Java | lautaorsi/ppls26-tp |
| Nazareno Olazarri | C++ | nazolaz/choppl |
| Maria Sassot | C++ | sassi20/PPL |
| Santiago Eric Majic | Zig | zesanty/ZPPL |
| Alexis Starcenbaum Bouchez | C | a-Bouchez/Resumable-PPL |
| Nicolas Marchetto | Haskell | NicolasMarchetto/TP-PPL |
| Facundo Della Rosa | Java | fdllrs/java-ppl |
| Ivo Martin Castello Marino | C++ | IvoCastello/Probabilistic-Programming-Language |
| Joaquin Oteyza | C++ | Joaquin-Oteyza/Mini-PPLs |
| Gonzalo Matias Lafuente | TypeScript | GonzaloLafuent/Probabilistic-Language-ts |
| Valeria Arratia Guillen, Magali Giansiracusa | Python (OOP) | val-arratia/Intro-PPL |
| Julian Antonio Lella | Go | julilella/go-ppl |
| Agustín Frenkel, Bárbara Rivero | Haskell | agFrenk/minippl |
| Luciano Calobini, Juan Cruz Montero | Cuis/Smalltalk | JCM200309/Smalltalk-PPL |
| Nicolás Rivas | Java | RivasNicolas/Probabilistic-Programming-Language |
| Julieta Cavalieri Olguin, Ema Sapirstein | Python | Julietacavalieri/IntroPPLs |
| Pedro Lautaro Arce Montoiro | Lua | pedroarcem/probabiluasticpl |
| Antuanette Carolina Rozas Chavez | Haskell | Antu2001/ppl-trabajo-final |
| Malena Montaño, Clara Lucia Rizzuti | Cuis/Smalltalk | malemontano/hoppl-smalltalk |