Child pages
  • Master theses and student project topics

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

JetBrains MPS is an open source language workbench that allows developers and language designers to easily build their own programming languages or extend existing ones. For more details, please check out the MPS website.

1. Type-system implementation for C# (bachelor or diploma thesis)

An implementation of C# for JetBrains MPS has been created as a student project and is now available as an open-source project. The idea of this work is to implement type-system for the C# language using the facilities of MPS. This work will bring into live highly theoretical principles that the new type-system support in MPS builds on. The project will become part of the open-source C# language plugin. JetBrains will provide a technical consultant to assist with both MPS and Haskell adoption.

Goals:

  • Type-system implementation for C# in MPS
  • Analysis of the new MPS approach to type-system definitions

Expected output (one or more of):

  • A functional type-system implementation integrated into the existing C# language plugin
  • Proper user as well as developer documentation in English

Resources:

2. Kotlin language support (student project)

The idea of this work is to implement the Kotlin language in MPS. This practical thesis should focus on implementing the language syntax as well as building typical IDE infrastructure to assist developers when editing, testing and debugging Kotlin code - code completion, error checking, static code analysis, re-factorings, etc. The IDE will be implemented with JetBrains MPS - an open-source language workbench built around a projectional (structured) editor. JetBrains will provide a technical consultant to assist with both MPS and Haskell adoption.

Goals:

  • Kotlin syntax described using the MPS structure language
  • Set of intuitive editors for editing Kotlin syntax
  • Type-system rules that would identify type errors in the editor
  • Code generators for Kotlin code

Expected output (one or more of):

  • A functional JavaScript language implementation distributable under an open-source license, building on top of the existing implementation
  • A functional IDE implementation distributable under an open-source license

Resources:

3. Grammar to JetBrains MPS convertor (diploma thesis)

JetBrains MPS is an open-source language workbench focusing on Domain-specific Languages (DSL). Unlike many competing language workbenches and in contrast to the industry prevalent approach, MPS uses a projectional (structured) editor for editing code. The developer directly manipulates the program in its tree (AST) form. The code is always represented as AST, including the persistence format, which avoids the need for parsing text.

...

2. Kotlin language support (student project)

The idea of this work is to implement the Kotlin language in MPS. This practical thesis should focus on implementing the language syntax as well as building typical IDE infrastructure to assist developers when editing, testing and debugging Kotlin code - code completion, error checking, static code analysis, re-factorings, etc. The IDE will be implemented with JetBrains MPS - an open-source language workbench built around a projectional (structured) editor. JetBrains will provide a technical consultant to assist with both MPS and Haskell adoption.

Goals:

  • Kotlin syntax described using the MPS structure language
  • Set of intuitive editors for editing Kotlin syntax
  • Type-system rules that would identify type errors in the editor
  • Code generators for Kotlin code

Expected output (one or more of):

  • A functional JavaScript language implementation distributable under an open-source license, building on top of the existing implementation
  • A functional IDE implementation distributable under an open-source license

Resources:

...

4. Querying NoSQL databases (diploma thesis)

With the advent modern NoSQL databases a need for targeted query languages, such as Cypher (http://docs.neo4j.org/chunked/1.4/cypher-query-lang.html), has become evident. Explore the field and investigate whether Language Workbenches can make a contribution in this domain. In particular, the domain of graph databases, such as Neo4j, could be interesting.

Goals (one or more of the following):

  • Implement a practical MPS-based query DSL for a chosen NoSQL database like Redis, Riak, Neo4J and other
  • Implement the existing Cypher language with help of MPS and analyze the impact of projectional Language Workbenches in the domain of graph-databases compared to the traditional approaches
  • Analyse the options for integration of such query DSLs into the usual development life-cycle

Expected output:

  • An MPS-based query DSL for one of the NoSQL databases
  • Analysis of how the projectional DSLs fit into the development process, what challenges there are and what benefits they bring in comparison to the other approaches

Resources:

...

------------------------------------------------------------------------------------------------------------------------------------

Backlog - inspirational, taken and obsolete topics

Alternative computational models

Create languages and simulators that would allow definition of alternative computational models, such as Turing machines or stack machines, and illustrate their processing with graphical animations.

 

GPU programming in JetBrains MPS (diploma thesis/student project)

 

Modern graphical cards in personal computers contain highly parallel Graphical Processing Units (GPU). These chips are optimized for massively parallel processing of numeric values. Several standards, such as OpenCL or CUDA, have been created to give cross-platform programmatic access to these processors from within Java code. The actual code that runs on the GPU, however, has to be programmed in plain C and compiled separately from the application's Java code.
JetBrains MPS is an open-source language workbench focusing on Domain-specific Languages (DSL). Its projectional editor allows rich notations, such as math vectors and matrices to become first class citizens in programming languages. Code written in DSLs needs to be transformed into one or more General-purpose languages (GPL) before triggering the compiler of the target platform and generating binary code.
This thesis should focus on seamless integration of GPU programming into the Java programmers workflow. Ideally, Java programmers should write the code, which eventually runs on a GPU, directly in Java together with the rest of the application. The desire to have a piece of Java code run on a GPU should be expressed by means orthogonal to the actual code - e.g. by an annotation.
The outputs of the thesis will be packaged as an MPS language plugin, distributed under the open-source Apache 2 license and available for free download. All outputs including documentation will be in English. JetBrains will provide a technical consultant to assist with MPS adoption.

 

Goals:

 

  • Design and implementation of an MPS language extension providing intuitive high-level notations for vector and matrix operations that allows Java code to be seamlessly run on a GPU
  • Allow the programmer to indicate at compile-time the intention whether to generate GPU-specific code or whether to generate plain Java code instead
  • Analyze and compare the code-generation approach to the existing alternative approaches

 

Expected output (one or more of):

 

  • A functional MPS language extension packaged an an IntelliJ IDEA plugin distributable under an open-source license
  • An MPS language plugin for IntelliJ IDEA that would enable GPU programming in IntelliJ IDEA
  • Analysis of the pros and cons of code generation for this problem domain

 

Resources:

 

4. Querying NoSQL databases (diploma thesis)

With the advent modern NoSQL databases a need for targeted query languages, such as Cypher (http://docs.neo4j.org/chunked/1.4/cypher-query-lang.html), has become evident. Explore the field and investigate whether Language Workbenches can make a contribution in this domain. In particular, the domain of graph databases, such as Neo4j, could be interesting.

Goals (one or more of the following):

...

 

...

...

Expected output:

  • An MPS-based query DSL for one of the NoSQL databases
  • Analysis of how the projectional DSLs fit into the development process, what challenges there are and what benefits they bring in comparison to the other approaches

Resources:

------------------------------------------------------------------------------------------------------------------------------------

Backlog - inspirational, taken and obsolete topics

Alternative computational models

Create languages and simulators that would allow definition of alternative computational models, such as Turing machines or stack machines, and illustrate their processing with graphical animations.

 

Go language implementation in JetBrains MPS

 

Go is an imperative programming language from Google with strong focus towards performance and concurrency. Being primarily a low-level language go lacks the flexibility to easily build expressive internal DSLs.
JetBrains MPS is an open-source language workbench focusing on Domain-specific Languages (DSL). Code written in DSLs needs to be transformed into one or more General-purpose languages (GPL) before triggering the compiler of the target platform and generating binary code. 
Since MPS does not rely on parsing, but instead uses a projectional (structured) editor and layered code generation, existing GPLs that should be made editable and generatable in MPS need to be re-implemented using the MPS language definition facilities. Only then can these GPLs be used as targets for code generation in MPS.
This practical thesis should focus on implementing the Go language in MPS using the MPS language definition capabilities. Bare-bone IDE infrastructure to assist developers when editing Go code should be also created. The outputs of the thesis will be packaged as an MPS language plugin, distributed under the open-source Apache 2 license and available for free download. All outputs including documentation will be in English. JetBrains will provide a technical consultant to assist with MPS adoption.

 

Goals:

 

  • Go syntax described using the MPS structure language
  • Set of intuitive editors for editing Go syntax
  • Type-system rules that would identify basic type errors in the editor
  • Code generators for Go code

 

Expected output (one or more of):

 

  • A functional Go language implementation distributable under an open-source license

 

Resources:

 

 

Transparent code tracing

Design a convenient way for developers to enable transparent tracing for Java code using the JetBrains MPS language workbench. The created solution should be based on a Domain Specific Language (DSL) that will enable developers to specify, which classes, methods, fields or other Java syntax elements need to be traced, and then the target Java code will be automatically enhanced to log the requested traces. Typical events to trace include method enter/exit events, class instantiation as well as field access (separately read and write access). 

...

Rust language implementation in MPS

 

Rust is a general-purpose, multi-paradigm, compiled programming language developed by Mozilla Research. It is designed to be a "safe, concurrent, practical language", supporting pure-functional, concurrent-actor, imperative-procedural, and object-oriented styles. JetBrains MPS is an open-source language workbench focusing on Domain-specific Languages (DSL). Code written in DSLs needs to be transformed into one or more General-purpose languages (GPL) before triggering the compiler of the target platform and generating binary code. Since MPS does not rely on parsing, but instead uses a projectional (structured) editor and layered code generation, existing GPLs that should be made editable and generatable in MPS need to be re-implemented using the MPS language definition facilities. Only then can these GPLs be used as targets for code generation in MPS.

This practical thesis should focus on implementing the Rust language in MPS using the MPS language definition capabilities. Bare-bone IDE infrastructure to assist developers when editing Rust code should be also created. Rust type checks (including borrow checking) should be implemented. The outputs of the thesis will be packaged as an MPS language plugin, distributed under the open-source Apache 2 license and available for free download. All outputs including documentation will be in English. JetBrains will provide a technical consultant to assist with MPS adoption.

Goals:

  • Rust syntax described using the MPS structure language
  • Set of intuitive editors for editing Rust syntax
  • Type-system rules that would identify type errors in the editor, including violations of borrowing semantics.
  • Code generators for Rust code

Expected output (one or more of):

  • A functional Rust language implementation distributable under an open-source license

Resources:

 

Model-Based and Property-Based Testing

 

Model-based testing is a software testing technique, in which the test cases are derived from a model of the system under test. The model-based approach has several advantages: the necessity of having a formal model of the system leads to higher clarity in requirements, thus reducing errors in the implementation. Another advantage is the possibility to tune the test generation process to improve characteristics such as test coverage or run time.

Property-based testing is a technique where the behavior of the system under test is specified as a set of properties rather than individual examples. The test execution software then generates example values and checks whether the properties hold, in an attempt to falsify them. A canonical example of property-based testing is the QuickCheck library written in Haskell.

JetBrains MPS is an open-source language workbench focusing on domain-specific languages (DSLs).

The goal of this thesis is to design a set of languages for model-based and/or property-based testing Java (BaseLanguage) applications. As a proof of concept a simple but non-trivial test suite for MPS could be produced.

The outputs of the thesis will be packaged as an MPS language plugin, distributed under the open-source Apache 2 license and available for free download. All outputs including documentation will be in English. JetBrains will provide a technical consultant to assist with MPS adoption.

Goals:

  • Explore different ways a system may be modeled for the purpose of testing.
  • Explore different ways in which test cases may be generated from a model of a system.
  • Design and implement a DSL (or a set of DSLs) for model-based testing.

Expected output:

  • MPS DSLs for model-based and/or property-based testing
  • A suite of tests for a non-trivial application written in the above DSLs.

 

Resources:

 

...