Traditional assignment considered harmful

Data movement in nearly all modern imperative languages is based on a single primitive: traditional assignment. (With traditional assignment, data are moved between variables by copying.) Unfortunately, traditional assignment poses many known software engineering drawbacks with respect to efficiency for value types, and with respect to modular reasoning for reference types. Moreover, its entrenched legacy has stifled serious regard of potentially superior data-movement primitives. Exploration of the complete design space for data-movement primitives supports the following conclusions: (1) traditional assignment is fundamentally flawed, and (2) any other data-movement primitive would be better.

[1]  Bruce W. Weide,et al.  Specification and Verification with References , 2001 .

[2]  Gary T. Leavens,et al.  A Simple and Practical Approach to Unit Testing: The JML and JUnit Way , 2002, ECOOP.

[3]  Gregory Kulczycki,et al.  Simplifying reasoning about objects with Tako , 2006, SAVCBS '06.

[4]  Stephen A. Cook,et al.  Soundness and Completeness of an Axiom System for Program Verification , 1978, SIAM J. Comput..

[5]  William F. Ogden,et al.  Specification of Abstract Data Types in Modula , 1980, TOPL.

[6]  James J. Horning A Case Study in Language Design: Euclid , 1978, Program Construction.

[7]  Jan Vitek,et al.  Aliasing in Object Oriented Systems , 1999, ECOOP Workshops.

[8]  Gary T. Leavens,et al.  Reasoning about object-oriented programs that use subtypes , 1990, OOPSLA/ECOOP '90.

[9]  Charles Antony Richard Hoare,et al.  Hints on programming language design. , 1973 .

[10]  Stephen H. Edwards,et al.  Design and Specification of Iterators Using the Swapping Paradigm , 1994, IEEE Trans. Software Eng..

[11]  Bruce W. Weide,et al.  Experience report: using RESOLVE/C++ for commercial software , 2000, SIGSOFT '00/FSE-8.

[12]  David R. Musser,et al.  STL tutorial and reference guide, second edition: C++ programming with the standard template library , 2001 .

[13]  Bruce W. Weide,et al.  Copying and Swapping: Influences on the Design of Reusable Software Components , 1991, IEEE Trans. Software Eng..

[14]  Bruce W. Weide,et al.  Reverse Engineering of Legacy Code Exposed , 1995, 1995 17th International Conference on Software Engineering.

[15]  Bruce Weide,et al.  Component-based software using RESOLVE , 1994, SOEN.

[16]  Jeannette M. Wing,et al.  A behavioral notion of subtyping , 1994, TOPL.

[17]  Richard B. Kieburtz,et al.  Programming without pointer variables , 1976, Conference on Data: Abstraction, Definition and Structure.

[18]  William F. Ogden,et al.  Modular Verification of Data Abstractions with Shared Realizations , 1994, IEEE Trans. Software Eng..

[19]  John Hogg,et al.  Islands: aliasing protection in object-oriented languages , 1991, OOPSLA '91.

[20]  Naftaly H. Minsky Towards Alias-Free Pointers , 1996, ECOOP.

[21]  K. Rustan M. Leino,et al.  Data abstraction and information hiding , 2002, TOPL.

[22]  Richard C. Holt,et al.  The Geneva convention on the treatment of object aliasing , 1992, OOPS.

[23]  James Coplien,et al.  Advanced C++ Programming Styles and Idioms , 1991, Proceedings. Technology of Object-Oriented Languages and Systems, TOOLS 25 (Cat. No.97TB100239).

[24]  David R. Musser,et al.  STL tutorial and reference guide , 2001 .

[25]  David C. Luckham,et al.  Verification of Array, Record, and Pointer Operations in Pascal , 1979, TOPL.