Section: Overall Objectives
Constructs for modular and secure programming
Programming languages traditionally assume that the world is consistent. Although different parts of a complex system may only have access to restricted views of the system, the system as a whole is assumed to be globally consistent. Unfortunately, this means that unanticipated changes may have far-reached, harmful consequences for the global health of the system. Using class inheritance to support unanticipated software evolution is proved to be the source of broken typing relations and code duplication, leading to a fragile and complex system . At a micro level, single class inheritance suffers from lack of adaptation, and the complexity of multiple inheritance is known to not be an alternative. At a macro-level, traditional packaging systems mainly deal with name resolution. In addition, with the pressure to have more secure systems, a modular system is the foundation to support secure applications. However, in the context of dynamic languages, there is a definitive tension between security (confidentiality and integrity) and language flexibility and openness. The language construct challenge tackled by RMoD is formulated as follows:
What are the language modularity constructs to support reuse and security?
We are going to continue our research effort on traits (Traits are groups of methods that can be composed orthogonally to simple inheritance. However contrary to mixin, the class has the control of the composition and conflict management.) by assessing trait scalability and reuse on a large case study and developing a pure trait-based language. In addition, some efforts will be dedicated to remodularizing a meta-level architecture in the context of the design of a secure dynamic language. Indeed at the extreme, modules and structural control of reflective features are the first steps towards flexible, dynamic, yet secure, languages. As a result, we expect to demonstrate that having adequate composable units and scoping units will help the evolution and recomposition of an application.