Component Technology for Pointers: Why and How

Key software engineering questions concerning ease of understanding, reasoning, and efficient and predictable performance can be traced to the use of pointers in imperative programming languages. In this paper we apply modern component technology to pointers and, as a result, take an important step towards addressing these questions at a foundational level. We present a formal specification for a component that captures the complex behavior of pointers. The specification provides programmers with a precise mathematical abstraction for understanding pointer behavior, and enables sound and systematic reasoning about pointer-based data structures. The specification is designed to be implementation-neutral. Alternative implementations of the specification can be plugged in to give programmers the flexibility to choose manual memory management or automatic garbage collection depending on their performance concerns.

[1]  Murali Sitaraman,et al.  Modular Verification of Performance Correctness , 2001 .

[2]  James Gosling,et al.  The Real-Time Specification for Java , 2000, Computer.

[3]  簡聰富,et al.  物件導向軟體之架構(Object-Oriented Software Construction)探討 , 1989 .

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

[5]  James Noble,et al.  Ownership types for flexible alias protection , 1998, OOPSLA '98.

[6]  Roger Henriksson,et al.  Scheduling Garbage Collection in Embedded Systems , 1998 .

[7]  Jan Vitek,et al.  Flexible Alias Protection , 1998, ECOOP.

[8]  Frank Vahid,et al.  Embedded system design - a unified hardware / software introduction , 2001 .

[9]  Jeannette M. Wing A specifier's introduction to formal methods , 1990, Computer.

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

[11]  James A. Gosling,et al.  The java language environment: a white paper , 1995 .

[12]  Bertrand Meyer,et al.  On To Components , 1999, Computer.

[13]  John Thomas Berry,et al.  Advanced C Programming , 1986 .

[14]  Paul Kimmel Advanced C# Programming , 2002 .

[15]  Eric C. R. Hehner Formalization of Time and Space , 2005, Formal Aspects of Computing.

[16]  John Nicholls,et al.  Z notation , 1994 .

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

[18]  Andrew Koenig,et al.  Teaching Standard C++ , 1998, J. Object Oriented Program..

[19]  Rafael Dueire Lins,et al.  Garbage collection: algorithms for automatic dynamic memory management , 1996 .

[20]  Henry G. Baker,et al.  “Use-once” variables and linear objects: storage management, reflection and multi-threading , 1995, SIGP.

[21]  Al Stevens,et al.  C programming , 1990 .

[22]  Bruce W. Weide,et al.  Checkmate: cornering C++ dynamic memory errors with checked pointers , 2000, SIGCSE '00.

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

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

[25]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming , 2002 .

[26]  Cliff B. Jones,et al.  Systematic software development using VDM , 1986, Prentice Hall International Series in Computer Science.

[27]  Gregory Kulczycki,et al.  Reasoning about Procedure Calls with Repeated Arguments and the Reference-Value Distinction , 2003 .

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

[29]  V. T. Rajan,et al.  A real-time garbage collector with low overhead and consistent utilization , 2003, POPL '03.

[30]  C. A. R. Hoare,et al.  Recursive data structures , 1975, International Journal of Computer & Information Sciences.

[31]  Paulo Sérgio Almeida Balloon Types: Controlling Sharing of State in Data Types , 1997, ECOOP.

[32]  Graeme Smith Reasoning about Object-Z specifications , 1995, Proceedings 1995 Asia Pacific Software Engineering Conference.

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

[34]  Gary T. Leavens Modular specification and verification of object-oriented programs , 1991, IEEE Software.

[35]  Murali Sitaraman,et al.  Impact of performance considerations on formal specification design , 1996, Formal Aspects of Computing.

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

[37]  Gregory Kulczycki,et al.  Reasoning about Software-Component Behavior , 2000, ICSR.

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

[39]  Robert M. Hierons,et al.  Real-Time Systems and Software , 2001, Softw. Focus.

[40]  Andrei Alexandrescu,et al.  Modern C++ design: generic programming and design patterns applied , 2001 .