Here are a number of ideas for projects that might be suitable for a
Bachelor's or Master's project.
-
Create a WebKit-based (or Web-based) REPL for Scala.
-
Create a data visualization library in JavaScript.
Ideally, the library should serve as a replacement for some
uses of the language R, allowing importing of data from text files and XML (specified via a URL), processing of the data using statistical functions, then rendering of graphs and other visualizations of the data.
-
Create a program visualization toolkit.
The first part of the project is to display data using
type-specific visualizations.
One could
then
integrate
this into the Eclipse debugger or into the Cloud9 IDE.
The second part of the project is to display
the control and data flow of the program.
For instance, one should be able to
hover over a cell of an array and the GUI should highlight
where that data came from. A follow-on project would allow
editing of the program through the GUI.
-
Create a visual programming language for GPU programming.
To get good performance on a GPU, one has to be careful about
memory management, including low-level details like alignment,
and data movement between the host and the GPU and among different levels
of the memory hierarchy on the GPU. In this project, you'll design a
graphical language for specifying computations on the GPU, and then
generate OpenCL or CUDA code from the graphical constraints.
-
Create a pattern matching library in JavaScript.
Support Scala-like extractors or Matchete-like matching (see PADL'08),
in JavaScript.
-
Implement an actors library for JavaScript.
-
Create a JavaScript-based compiler framework that enables domain-specific
languages to be implemented in JavaScript and run in a browser.
This project is rather large and could be broken into components or implemented by multiple people. The library should provide parser combinators, abstract-syntax-tree manipulation, and code generation.
-
Implement a compiler from (a subset of) Haskell to JavaScript
or to Java bytecode.
-
Create a meta-programming system for Java or Scala similar to Template Haskell. This is part of a larger project to create a new JVM-based language designed for JVM library writers and to serve as a target language for compilers.
Knowledge of Java bytecode is useful.
-
Create a Morphic-based IDE in JavaScript capable of running
on iOS or Android devices. This could be based on
JsMorphic or on the Lively Kernel. JsMorphic currently does not work well on touch-based devices, so some low-level JS hacking is required.
- Extend the Polyglot compiler framework to support Java7 features.
- Performance analysis of JVM scripting languages.
- Implement a Java bytecode library for Scala, supporting generation of bytecode and pattern matching on bytecode. This could be a wrapper around the ASM bytecode library.
- Create a logic programming framework for Scala.
- Create a domain-specific language for writing Scala compiler plugins.
- Create a Scala frontend to the Processing language.