Section: Scientific Foundations

Open programming

Part of the language developments in Sardes concern the challenge of providing programming support for computer systems with continuously running services and applications, that operate at multiple physical and logical locations, that are constantly introduced, deployed, and combined, that interact, fail and evolve all the time. Programming such systems – called open programming by the designers of the Alice programming language [101] — is challenging because it requires the combination of several features, notably: (i) modularity, i.e. the ability to build systems by combining and composing multiple elements; (ii) security, i.e. the ability to deal with unknown and untrusted system elements, and to enforce if necessary their isolation from the rest of the system; (iii) distribution, i.e. the ability to build systems out of multiple elements executing separately on multiple interconnected machines, which operate at different speed and under different capacity constraints, and which may fail independently; (iv) concurrency, i.e. the ability to deal with multiple concurrent events, and non-sequential tasks; and (v) dynamicity, i.e. the ability to introduce new systems, as well as to remove, update and modify existing ones, possibly during their execution.

The rigorous study of programming features relate to the study of programming language constructs and semantics [97] , [112] , in general. Each of the features mentioned above has been, and continues to be, the subject of active research on its own. Combining them into a practical programming language with a well-defined formal semantics, however, is still an open question. Recent languages that provide relevant background for Sardes ' research are:

  • For their support of dynamic notions of modules and software components: Acute [106] , Alice [101] , [102] , ArchJava [54] , Classages [91] , Erlang [56] , Oz [112] , and Scala [98] .

  • For their security and failure management features: Acute, E [95] , Erlang and Oz [68] .

  • For their support for concurrent and distributed execution, Acute, Alice, JoCaml [73] , E, Erlang, Klaim [61] , and Oz.