Live Programming for reactive applications
A Reactive System is a particular type of software that reacts to external events and transforms its environment. Common examples of reactive systems are groupware systems, e-commerce systems, in- formation systems, production control systems, interactive editors, etc.
The development of reactive systems is commonly a difficult task because they need to perpetually keep track (i.e. in real-time) of the status of one or more external agents. The difficulty lies in fact that the status and the control-flow of the application is no longer determined by the structure of the code. The control-flow of these systems is determined by the events and values that are produced by external agents (e.g. a user, values produced by other programs, etc.). Tackling this problem with conventional programming languages (e.g. Java, C#, Python, etc.) leads to a code that consists of an overwhelming myriad of callback functions that will be invoked whenever a change in the status occurs. Reactive programming (RP) has emerged as a promising avenue to solve the aforementioned problems. RP allows a programmer to write expressions whose value is automatically recomputed every time that a value of one of its subexpressions changes, instead to use event handlers to update the status of the application. In RP each expression is compiled into a dependency graph that makes explicit which (sub) expressions depend on one another.
On the other hand, current environments for developing reactive systems are based on the traditional and synchronous edit-compile-run cycle. In other words, current technologies entail writing the code, deploying it, and running it for testing. If this feedback reveals errors, the programmer mentally needs to map the error in behavior back to the source code that caused it before being able to fix it. This sychronous approach suffers from a large cognitive distance between the code and the final result, which slows down development and can make experimentation in some cases (e.g. BigData) prohibitively expensive. Live programming (LP) seems to be an effective way to provide a continuous visual feedback to developers about their changes in the source code. LP makes programming easier by reexecuting a program continuously during editing.
In this thesis we are interested in research how a combination of Live programming and Rective programming could improve the development of reactive systems. Before the thesis can be started proper, the student will have to get acquainted with the Live programming and Reactive programming aproaches. The main result of this thesis will be an implementation of a live and reactive language.
E. Bainomugisha, A. L. Carreton, T. V. Cutsem, S. Mostinckx, and W. de Meuter, “A Survey on Reactive Programming,” CSUR, vol. 45, no. 4, pp. 52:1–52:34, Aug. 2013.
S. McDirmid, “Living it up with a Live Programming Language,” presented at the Proceedings of the 22Nd Annual ACM SIGPLAN Conference on Object-oriented Programming Systems and Applications, New York, NY, USA, 2007, pp. 623–638.