Taking programming to the Next Level

Are you interested in programming? Would you like to improve your craft and learn more about how programming languages work? There is no better way than exploring programming language design and implementation.

Language Engineering & IDEs

Would you like to design a programming language with minimal effort? There are now some fabulous tools to design domain-specific languages (DSLs). Martin Fowler has even invented a new paradigm name for this approach: Language-Oriented Programming. You could either focus on designing your own language or creating teaching material for some of these fancy tools for DSL engineering.

IDEs are now a critical part of the language engineering. Most IDEs for Java are very nicely extensible and we are happy to supervise topics about extending Eclipse or IntelliJ with support for some language or tool. If you want a concrete project, see our suggested plugin topics.

The Haxl Project at Facebook and other applications of functional programming

The Haxl Project at Facebook is only one example of the practical use of functional programming. We have a long history with functional programming here at Tartu. Professor Varmo Vene used to say that he would supervise any topic, anything at all, as long as it's implemented in Haskell. We continue this tradition and would happily supervise any software project developed in a functional language, including F#, Clojure, and Scala.

It would be particularly interesting to explore some of the fancy libraries, DSLs, and application of functional programming, such as TangibleValue, Haxl, Netwire, Grapefruit, Phooey, Threepenny-gui, wxHaskell, Gtk2Hs.

If you'd rather look into some advanced Scala topics, please assist us preparing some teaching material for our future Scala course!

Making the world safe & secure with static analysis

Safe & Secure Mobility

If you are concerned about safety and security of software systems that are embedded into everything we do, there actually is something you can do to make the world safer for our children: develop static analysis tools! We have two projects where you can contribute immediately.

  • Goblint is a static analyzer for C code that we develop together with the Technical University of Munich.
  • Alvor is an analyzer that statically validates SQL sentences embedded in Java code.

Testing so much that fear turned to boredom long ago? Try verified programming...

Verified programming is the future of programming. There are different approaches to this, such as Agda2, Coq, F*, but perhaps the easiest to get started with is Dafny. It has a simple tutorial on Rise4Fun and also runs in Visual Studio. It is thus very nice for learning this approach to programming, but it's not merely a toy: Dafny is used within the Ironclad/Ironfleet project at Microsoft Research to verify distributed systems.

Here, you could write your own account of attempting to verify a small program. We will help you select a good example based on existing tutorials. You don't necessarily have to succeed with the proof in order to complete the writing.

Post-Rebel Dynamic Software Updates

The most successful commercial tool for dynamic reloading of Java classes is ZeroTurnaround's JRebel. Are there any academic developments in reloading since then? One very interesting tool seems to be Rubah. It would be very interesting to see what are the capabilities of this tool and compare it with JRebel. This is a good topic if you are also taking their course on Java Fundamentals and find Java technology interesting.