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