Debugger for Tierless Programming

Printer-friendly version
  • You have an interest in web programming and some experience with it.
  • Knowing about tierless programming or JavaScript is not required, but any prior knowledge is a definite plus.

Web development has become complex: rich internet applications with a lot of interactive features are omnipresent. Realizing such advanced features in a traditional three-tier architecture requires developers to select and master a myriad of technologies because each tier comes with its own technology stack. Examples include a query language for the database tier, PHP or Java for the server tier, and a combination of JavaScript, HTML and CSS for the client tier —often together with Ajax and jQuery. It is up to the programmer to combine and align the different technology stacks. This might not only require a lot, but also rather complex glue code for web applications.
Tierless programming languages aim to reduce this complexity. They enable developing a web application as a single mono-linguistic application, which renders its development alike to that of a desktop application. A preprocessor or the runtime of these languages realizes a split into a client, server and sometimes a database tier, where communication between the different tiers is handled transparently. 
Current approaches to tierless web development require an investment in novel programming languages. More importantly, they require developers to annotate code carefully with tier splitting information — a time-consuming and often error-prone process.
We therefore allow tierless web applications in a general- purpose language instead, such that its existing tool support can be used. JavaScript, for instance, is already a common compilation target for the client and even some server tiers (think of Node.js).
More concretely, we developed a tier-splitting tool called STiP.js that is able to split a tierless JavaScript program into the client and server tier. Developers are only required to adorn a minimum of code with @client and @server annotations. This tierless program then gets transpiled (a transpiler is a source-to-source compiler where source and target language are both high-level) to corresponding server and client programs in JavaScript, with the necessary cross-tier communication mechanisms.

Goal & Research Activities: 

A downside of transpiling a tierless program into several tiers, is that developers may witness code at run-time that differs from the code that they had implemented. The transpiled code is at odds with their tierless model of the program. This problem becomes apparent when developers need to debug their program, since existing debuggers will be oblivious to the transpilation process.

The goal of this thesis propsal is realizing a specialized debugger for tierless programs. The debugger must provide a unified, tierless view of the state of the program, abstracting away from the asynchronous nature of the interactions across tiers.  

  1. STiP.js:
  2. Tierless Languages: Hop, Links, Opa, Ur/Web
  3. Tierless Frameworks: GWT, Meteor