After two decades of effort, type inference for dynamically typed languages scales to programs of a few tens of thousands of lines of code, but no further. For larger programs, th...
Software developers create a variety of artifacts that model viour of applications at different levels of abstraction; e.g. use cases, sequence diagrams, and source code. Aspect-o...
Jonathan Sillito, Christopher Dutchyn, Andrew Davi...
Given the importance of encapsulation to object-oriented programming, it is surprising to note that mainstream object-oriented languages offer only limited and fixed ways of enca...
Module systems are well known as a means for giving clear interfaces for the static linking of code. This paper shows how adding explicit interfaces to modules for 1) dynamic linki...
Abstract. Object invariants describe the consistency of object-oriented data structures and are central to reasoning about the correctness of object-oriented software. Yet, reasoni...
Design patterns are a standard means to create large software systems. However, with standard object-oriented techniques, typical implementations of such patterns are not themselv...
Many compiler optimizations and software engineering tools need precise pointer analyses to be effective. Unfortunately, many Java features, such as dynamic class loading, refle...
Software evolution is an inevitable process when developing a system of any notable size and is the most costly stage in the life cycle of a system. Automating parts of this proces...
It is becoming increasingly clear that we are entering a new era in systems software. As the age-old tension between structure and performance acquiesces, we can finally venture b...