Managing complexity is a major challenge in developing software. Abstraction is a key technique for tackling complexity. Todays programming languages provide a fixed, limited set of abstraction techniques, such as procedures and inheritance. Co-op is a novel language that allows the use of any abstraction technique, define new ones, and combine them freely.
Co-op achieves this by allowing programmers to define tailored method lookup, through declaring so-called ‘bindings’. Co-op models a function call as a message send. That is, every method call (or field access) results in sending a message. Every message has several properties. These properties can be changed by bindings, before the message send results in the execution of a method. This allows for influencing the method lookup process in many ways.
An example of a message send is given in the figure shown below. Here, we show multiple rewrite steps including some additional details of the rewrite process, like constraints between bindings and colors that visualize the applicability of bindings. Since this message send and rewrite process is the essence of Co-op, it is important to understand the details of the process when developing applications. Therefore, a visualization of this process is very useful for understanding and debugging the behavior of a program.
The shown images can be generated automatically from debugging output provided by the Co-op runtime. However, we currently only have static images (exactly the ones you see here). Especially when the rewrite process becomes larger, this will result in unreadable images, like the one shown in the figure below. This image is too large to read. Therefore, it would be nice to look at a simple overview first. E.g. a version where all blocks are collapsed into a single node. To inspect more details of a block, a user might be able to expand this block to the view that is given in the figures here. Possibly, other details can be hidden/shown on demand too. (To get an idea what collapsing can provide you might take a look at www.cloudextend.com by clicking on “Watch an overview”. Especially the last half minute shows some nice collapsing.)
Eclipse provides a framework that allows such kinds of visualizations with limited effort. The goal is to visualize the debugging output (represented as an XML file) given by Co-op using Eclipse. How collapsing can be supported in these diagrams should also be researched.