PhD Student at RUC, advised by Morten Rhiger.
- Functional Programming
- Programming Languages
- Parallel and Concurrent Programming
- Blockchain and Cryptocurrencies
Turtle Graphics is a well-known system for drawing geometric shapes on a Cartesian plane. It is usually accompanied by a programming language to specify how the shapes should be drawn.
The programming language usually looks like this:
using Luxor, Colors
Drawing(600, 400, "assets/figures/turtles.png")
origin()
background("midnightblue")
🐢 = Turtle() # you can type the turtle emoji with \:turtle:
Pencolor(🐢, "cyan")
Penwidth(🐢, 1.5)
n = 5
for i in 1:400
Forward(🐢, n)
Turn(🐢, 89.5)
HueShift(🐢)
n += 0.75
end
fontsize(20)
Message(🐢, "finished")
finish()
[source]
How drawing in Turtle Graphics looks like (in its simpliest form):
[source]
There are many implementations of such a language, both for 2D and 3D coordinate systems, for example, a new implementation in Rust called Rurtle.
You can create a game based on Turtle Graphics with your own crazy rules. Apple has used the Turtle Graphics engine to create a game to teach the Swift programming language called Swift Playgrounds.
- learn how to build a small programming language
- experiment with generative programming
- learn about graphic systems
Zork is a classic text-based interactive game where the user gives commands in an English-like language. You can play Zork online.
There are many possibilities here for creating a game in any natural language and in any style. For instance, you can create an escape room game in a Danish-like language.
- learn how to build a "natural language" parser
- learn the basics of machine learning applied to natural language processing
- learn the basics on how to build an interpreter
Blockchain and cryptocurriencies are on the rise, but sadly smart contracts are on its absolute infancy. Many companies are trying to come up with a good language for smart contracts that is safe and unable to express all kinds of programs. The simpliest language is Simplicity, which is heavily-based on regular expressions. You don't need to come up with the perfect smart contract language, but you should be able to create an extremely simple language to handle blockchain contracts (even if you want to do crazy things with it).
Among all project ideas, this one is probably the most demanding as you will need to learn some theory and lingo related to programming languages design.
- learn about smart contracts and blockchain
- learn how to specify a small programming language
- learn how to build a small programming language
WebAssembly (wasm, WA) is web standard that defines a binary format and a corresponding assembly-like text format for executable code in Web pages. It is meant to enable executing code nearly as fast as running native machine code. It was envisioned to complement JavaScript to speed up performance-critical parts of web applications and later on to enable web development in other languages than JavaScript. It is developed at the World Wide Web Consortium (W3C) with engineers from Mozilla, Microsoft, Google and Apple. [source]
Webassembly is a promise to bring high-quality game engines to the browser and create faster webapps. It also brings the opportunity for escaping JavaScript and creating new languages for the web. Learn more about Webassembly.
In this project, you will be able to create either a general programming language or a domain-specific one targeted to solve a problem or demand. The project is somewhat demanding because you will need to learn about webassembly and how compiling to webassembly works.
- learn how to build a small programming language
- learn about a real-world intermediate representation
You can also mix the ideas showcased here and come up with a new project. For instance, a turtle graphics language that compiles to webassembly (there is already a Rust-to-webassembly compiler, so you can work on a way to embed your language in Rust and compile it to webassembly) or a weird smart contract language/game that gives you coins when you manage to find rare items in escape rooms.