The Scala team at EPFL Lausanne is this year again a mentoring organization for the Google Summer of Code, “a global program that offers students stipends to write code for open source projects”. Following a presentation André van Delft gave there a month ago, the Scala team has included two projects for GSoC related to his language extension named SubScript. More information is here at the Scala site and below.
Students can apply until 3 May. Interested and qualified? You may contact andre dot vandelft at gmail dot com if you have questions.
SubScript
SubScript is a way to extend common programming languages aimed to ease event handling and concurrency. Typical application areas are GUI controllers, text processing applications and discrete event simulations. SubScript is based on a mathematical concurrency theory named Algebra of Communicating Processes (ACP).
You can regard ACP as an extension to Boolean algebra with ‘things that can happen’. These items are glued together with operations such alternative, sequential and parallel compositions. This way ACP combines the essence of grammar specification languages and notions of parallelism.
Adding ACP to a common programming language yields a lightweight alternative for threading concurrency. It also brings the 50 year old but still magic expressiveness of languages for parser generators and compiler compilers, so that SubScript suits language processing. The nondeterministic style combined with concurrency support happens to be very useful for programming GUI controllers. Surprisingly, ACP with a few extras even enables data flow style programming, like you have with pipes in Unix shell language.
Currently a SubScript extension to Scala is available, see http://subscript-lang.org. This comes with a branch of the Scala compiler, a run-time library, support for the Scala-Swing reactive framework and example programs. The “C” part of ACP is not yet supported.
Investigate SubScript on top of JavaScript
SubScript might as well extend other languages next to Scala. An interesting starter would be JavaScript. The good thing is that as from April 2013 (?) Scala translates into JavaScript. Therefore a single code base of the SubScript VM, which is written in Scala, may also work for JavaScript.
The project would involve some of the following tasks:
- develop use cases, both for client-side and server-side applications
- create a translator for SubScript into JavaScript
- extend an existing JavaScript interpreter to understand SubScript
- define a strategy to send over SubScript in HTML pagesand have it translated
- provide a translator for the SubScript VM source code into JavaScript
- JavaScript does not support explicit multithreading; develop an alternative
Enhance Akka using SubScript
Akka is the Scala actor implementation, very useful for distributed functions. Typically an actor operates a state machine, which is programmed using state variables. This is relatively inconvenient to program and read. SubScript may provide a better alternative for programming actor internals. This project would involve:
- develop typical actors in two versions: just Scala and SubScript
- compare these versions in terms of clearness and conciseness
- measure the performance of these versions
- make a tutorial
More information on SubScriptActors is available at http://subscript-lang.org/subscript-actors/.