The influence of software reuse on programming language design

Software quality and programmer productivity are two of the biggest challenges facing the software engineering community. Reusability, a mainstay of other engineering disciplines, is an approach to software development that addresses both of these issues. This research investigates programming language features that either encourage or discourage the design of reusable software components. A reusable software component is defined as one that can be incorporated into a variety of programs without modification (except possibly parameterization); furthermore, reusing a software component should not compromise other software engineering principles such as information hiding and data abstraction. A well-designed reusable software component is characterized by five properties: it is formally specified, its specification and implementation are in separately-compilable units, it is parameterized (i.e., generic) if possible, it may have multiple implementations, and it is possible to construct efficient implementations. Evaluation of several modern programming languages with respect to how well they support components exhibiting these characteristics suggests that none has all of the features necessary to encourage and facilitate the design and implementation of reusable software components. A new programming language, called RESOLVE, is defined that is based entirely upon constructs that support and even encourage the design of reusable software parts. A RESOLVE component usually defines a program type along with operations for manipulating variables of that type. A program type is formally specified by modelling it as a mathematical type, and operations are formally specified using pre- and post-conditions written as assertions in the mathematical theories modelling the operation's parameters. The formal specification of a RESOLVE component is contained in a conceptualization module, while the data structures and code implementing a conceptualization are contained in realization modules. A conceptualization may have multiple realizations. Swapping the contents of one variable with another is the only data movement primitive defined in RESOLVE. The traditional "copy" assignment statement is not defined. Swapping is included because it is efficient to implement for all types, and is safe in the sense that it does not introduce aliasing. Numerous RESOLVE conceptualizations and realizations are discussed, providing examples of well-designed reusable components.

[1]  Kathleen J. Mullen,et al.  Agricultural Policies in India , 2018, OECD Food and Agricultural Reviews.

[2]  Summary and Conclusions Summary and Conclusions , .