Coordinating extensibility with CoLingua
We present a system for coordinating code within extensible applications. Applications are composed of spaces, which serve as sandboxes, state encapsulators and units of functionality. Spaces can be nested, and all I/O happens in the application’s outermost space.
By default all communication is fire and forget message passing, and we’re currently working on the semantics of synchronous communication in this system, and in particular when it should block concurrent activity in the same space. This is difficult not just from a technical perspective of balancing performance and safety, but also because one of our main goals is to enable inexperienced programmers to make valuable contributions, so the system should raise questions like “should this block?” as infrequently as possible.
We’re also working toward full projectional editing: the bytecode, together with some supplementary decorations, can be projected back up into the original code, but could also be projected into a visual editing mode, where changes in one mode affect the other. We’re finding that some aspects of development in this system are easier to reason about with boxes and arrows, and other parts are easier to reason about as code, and having both options on our toolbelt is better than either one alone.
We’re striving for a system that is simple, with few sharp corners and a gradual revelation of power. We hope to give end users the ability to easily customize the applications they use on the web, and developers the ability to build extensible applications as easily as they now build static ones. There are a number of projects that will be using this system in production next year, so now is an ideal time for feedback on the core system components.