For background information on the topic as a whole, scroll to the end of this page.
Available Project Proposals
If you are interested in the general topic of Programming Languages and Paradigms, or if have your own project idea related to the topic, please contact us directly. Alternatively, you can also work on one of the following concrete project proposals:
Contact
Background
There are many programming languages out there, with different features for solving different problems. Most of them can be roughly categorized in what paradigms, i.e., approaches to programming, they support. Three well-known paradigms are:
- imperative, where a program describes how to change the state of objects (e.g. variables). For example, C and Java are imperative languages, and Python supports, among others, imperative programming.
- functional, where a program is described as a (mathematical) function. Haskell is a typical example.
- declarative describes the desired result, but no direct way to compute it. An example is the SQL database query language.
Note, however, that many programming languages support more than one paradigm, or are somewhere in between. For example, Python also supports functional programming, and C++ and Java have evolved from purely imperative languages to also support functional features, like lambda abstractions. An overview of many paradigms and languages can be found in this video, which is based on Peter van Roy's overview.
In this topic, we cover questions about programming languages, including their design, features, and implementations. Typical projects in this topic
- add new features to an existing programming language
- improve an existing programming language implementation
- implement a new programming language from scratch
- compare different programming languages
Prerequisites
- Programming experience, ideally with more than one language
Related Modules
- Programming Paradigms (functional, concurrent and logic programming + compiler construction)
- Discrete Structures and Algorithms (automata and graph algorithms, semantics)