Multi-View Architecture Description and Enforcement
Given the dynamic process of software development, it follows that systems will evolve greatly over time. As a result, preserving consistency between the implementation and the properties prescribed in the program architecture becomes a non-trivial problem. Often as software is being developed, programmers have free rein to use libraries with access to system resources. This creates the potential for extraneous dependencies, unsafe data-sharing, and other structural violations. The resulting deviation from the intended architecture is known as architectural drift or erosion. Our approach to a solution is to make program execution semantically dependent on the architecture. To accomplish this, we embedded a multi-view architecture description language (ADL) into a programming language that supports metaprogramming and restricts access to resources using capabilities. This enables us to generate connections between program components based on the architectural description and prevent programmers from making arbitrary connections. Not only does this ensure that the system semantics reflect its architectural principles, but this also facilitates editing compatible with rapid software evolution. To demonstrate this, we implemented a new ADL over the capability-safe language Wyvern and were able to execute the client-server network architecture.