.nd started 0 .nr do_refs 0 .if ~started .nr do_refs 1 .en .so clu/clupap.header .so r/ref3.rmac .if csg_memo==0 .ls 1 .if narrow .new_font 1 .ef .new_font 3 .en .nf c .vp 2i Abstraction Mechanisms in CLU .if narrow .new_font 0 .ef .new_font 1 .en .sp .5i Barbara Liskov Alan Snyder Russell Atkinson Craig Schaffert .sp .3i Laboratory for Computer Science Massachusetts Institute of Technology 545 Technology Square Cambridge, MA 02139 .sp 2 .if ~narrow .vp 8.5i .en .nf l .fi .new_font 0 This research was supported in part by the Advanced Research Projects Agency of the Department of Defense, monitored by the Office of Naval Research under contract N00014-75-C-0661, and in part by the National Science Foundation under grant DCR74-21892. .ls .end .if csg_memo>0 .ls 1 .nf c .new_font 3 Massachusetts Institute of Technology Laboratory for Computer Science .new_font 0 (formerly Project MAC) .sp 1.25i Computation Structures Group Memo csg_memo-1 .sp 1.25i .new_font 4 Abstraction Mechanisms in CLU .new_font 1 .sp by .sp Barbara Liskov Alan Snyder Russell Atkinson Craig Schaffert .new_font 0 .nf l .vp 8.25i .fi .new_font 0 This research was supported in part by the Advanced Research Projects Agency of the Department of Defense, monitored by the Office of Naval Research under contract N00014-75-C-0661, and in part by the National Science Foundation under grant DCR74-21892. .nf c .sp .5i January 1977 .nf l .fi .ls .end . . .if narrow .sp 2 .new_font 1 .ll 7i .ef .bp .rs .vp 3i .new_font 3 .en ABSTRACT .new_font 0 .sp .ns .para CLU is a new programming language designed to support the use of abstractions in program construction. Work in programming methodology has led to the realization that three kinds of abstractions, procedural, control, and especially data abstractions, are useful in the programming process. Of these, only the procedural abstraction is supported well by conventional languages, through the procedure or subroutine. CLU provides, in addition to procedures, novel linguistic mechanisms that support the use of data and control abstractions. .para This paper provides an introduction to the abstraction mechanisms in CLU. By means of programming examples, we illustrate the utility of the three kinds of abstractions in program construction and show how CLU programs may be written to use and implement abstractions. We also discuss the CLU library, which permits incremental program development with complete type-checking performed at compile-time. .sp .fi l Key words and phrases: programming languages, data types, data abstractions, control abstractions, programming methodology, separate compilation. .sp CR categories: 4.0, 4.12, 4.20, 4.22. .br .fi b .if narrow .ll .en . .ref All71 Allen, F. E. and Cocke, J. A catalogue of optimizing transformations. Rep. RC 3548, IBM Thomas J. Watson Research Center, Yorktown Heights, N.@Y., 1971. .em .ref All75 Allen, F. E. A program data flow analysis procedure. Rep. RC 5278, IBM Thomas J. Watson Research Center, Yorktown Heights, N.@Y., 1975. .em .ref Atk76 Atkinson, R. R. Optimization techniques for a structured programming language. S.M. Thesis, Dept. of Electrical Engineering and Computer Science, M.@I.@T., Cambridge, Mass., June 1976. .em .ref Dah70 Dahl, O. J., Myhrhaug, B., and Nygaard, K. The SIMULA 67 common base language. Publication S-22, Norwegian Computing Center, Oslo, 1970. .em .ref DK75 DeRemer, F. and Kron, H. Programming-in-the-large versus programming-in-the-small. 2Proceedings of International Conference on Reliable Software*, 2SIGPLAN Notices 10*, 6 (June 1975), 114-121. .em .ref Dij72 Dijkstra, E. W. Notes on structured programming. 2Structured Programming, A.P.I.C. Studies in Data Processing No. 8*, Academic Press, New York 1972, 1-81. .em .ref Guttag Guttag, J. V., Horowitz, E., and Musser, D. R. Abstract data types and software validation. Rep. ISI/RR-76-48, Information Sciences Institute, University of Southern California, Marina del Rey, Calif., August 1976. .em .ref Hoare72 Hoare, C. A. R. Proof of correctness of data representations. 2Acta Informatica*, 4 (1972), 271-281. .em .ref Knu73 Knuth, D. 2The Art of Computer Programming*, vol. 3. Addison Wesley, Reading, Mass., 1973. .em .ref LCS75 2Laboratory for Computer Science Progress Report 1974-1975*, Computation Structures Group. Rep. PR-XII, Laboratory for Computer Science, M.@I.@T., to be published. .em .ref Lam71 Lampson, B. W. Protection. Proc. Fifth Annual Princeton Conference on Information Sciences and Systems, Princeton University, 1971, 437-443. .em .ref Lis74 Liskov, B. H. and Zilles, S. N. Programming with abstract data types. Proc. ACM SIGPLAN Conference on Very High Level Languages, 2SIGPLAN Notices 9*, 4 (April 1974), 50-59. .em .ref Lis75 Liskov, B. H. and Zilles, S. N. Specification techniques for data abstractions. 2IEEE Trans. on Software Engineering*, 2SE-1*, (1975), 7-19. .em .ref Lis76 Liskov, B. H. and Berzins, V. An appraisal of program specifications. Computation Structures Group Memo 141, Laboratory for Computer Science, M.@I.@T., Cambridge, Mass., July 1976. .em .ref McC62 McCarthy, J., et al. 2LISP 1.5 Programmer's Manual*, MIT Press, 1962. .em .ref Mor73 Morris, J. H. Protection in programming languages. 2Comm. ACM 16*, 1 (Jan 1973), 15-21. .em .ref Mor74 Morris, J. H. Toward more flexible type systems. Proceedings of the Programming Symposium, Paris, April 9-11, 1974, 2Lecture Notes in Computer Science 19*, Springer-Verlag, New York, 377-384. .. .ref Par71 Parnas, D. L. Information distribution aspects of design methodology. Proc. IFIP 1971. .em .ref Sch76 Scheifler, R. W. An analysis of inline substitution for the CLU programming language. Computation Structures Group Memo 139, Laboratory for Computer Science, M.@I.@T., Cambridge, Mass., June 1976. .em .ref Spitzen Spitzen, J. and Wegbreit, B. The verification and synthesis of data structures. 2Acta Informatica*, 4 (1975), 127-144. .em .ref Standish Standish, T. A. 2Data structures: an axiomatic approach*. Rep. 2639, Bolt Beranek and Newman, Cambridge, Mass., 1973. .em .ref Thomas Thomas, J. W. Module interconnection in programming systems supporting abstraction. Rep. CS-16, Computer Science Program, Brown University, Providence, R.@I., 1976. .em .ref Wir71a Wirth, N. Program development by stepwise refinement. 2Comm. ACM 14*, 4 (1971), 221-227. .em .ref Wir71b Wirth, N. The programming language PASCAL. 2Acta Informatica*, 1 (1971), 35-63. .em .ref Wul84 Wulf, W. A., London, R., and Shaw, M. An introduction to the construction and verification of Alphard programs. 2IEEE Transactions on Software Engineering SE-2*, (1976), 253-264. .em .bp .if do_refs .insert_refs .en .if narrow .rs .sp 3i .en