clup0.25 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. .nd started 0
  2. .nr do_refs 0
  3. .if ~started
  4. .nr do_refs 1
  5. .en
  6. .so as/clupap.header
  7. .so r/ref3.rmac
  8. .if csg_memo==0
  9. .ls 1
  10. .if narrow
  11. .new_font 1
  12. .ef
  13. .new_font 3
  14. .en
  15. .nf c
  16. .vp 2i
  17. Abstraction Mechanisms in CLU
  18. .if narrow
  19. .new_font 0
  20. .ef
  21. .new_font 1
  22. .en
  23. .sp .5i
  24. Barbara Liskov
  25. Alan Snyder
  26. Russell Atkinson
  27. Craig Schaffert
  28. .sp .3i
  29. Laboratory for Computer Science
  30. Massachusetts Institute of Technology
  31. 545 Technology Square
  32. Cambridge, MA 02139
  33. .sp 2
  34. .if ~narrow
  35. .vp 8.5i
  36. .en
  37. .nf l
  38. .fi
  39. .new_font 0
  40. This research was supported in part by the Advanced Research
  41. Projects Agency of the Department of Defense, monitored by the
  42. Office of Naval Research under contract N00014-75-C-0661, and
  43. in part by the National Science Foundation under grant DCR74-21892.
  44. .ls
  45. .end
  46. .if csg_memo>0
  47. .ls 1
  48. .nf c
  49. .new_font 3
  50. Massachusetts Institute of Technology
  51. Laboratory for Computer Science
  52. .new_font 0
  53. (formerly Project MAC)
  54. .sp 1.25i
  55. Computation Structures Group Memo csg_memo-1
  56. .sp 1.25i
  57. .new_font 4
  58. Abstraction Mechanisms in CLU
  59. .new_font 1
  60. .sp
  61. by
  62. .sp
  63. Barbara Liskov
  64. Alan Snyder
  65. Russell Atkinson
  66. Craig Schaffert
  67. .new_font 0
  68. .nf l
  69. .vp 8.25i
  70. .fi
  71. .new_font 0
  72. This research was supported in part by the Advanced Research
  73. Projects Agency of the Department of Defense, monitored by the
  74. Office of Naval Research under contract N00014-75-C-0661, and
  75. in part by the National Science Foundation under grant DCR74-21892.
  76. .nf c
  77. .sp .5i
  78. January 1977
  79. .nf l
  80. .fi
  81. .ls
  82. .end
  83. .
  84. .
  85. .if narrow
  86. .sp 2
  87. .new_font 1
  88. .ll 7i
  89. .ef
  90. .bp
  91. .rs
  92. .vp 3i
  93. .new_font 3
  94. .en
  95. ABSTRACT
  96. .new_font 0
  97. .sp
  98. .ns
  99. .para
  100. CLU is a new programming language designed to support
  101. the use of abstractions in program construction.
  102. Work in programming methodology has led to the realization
  103. that three kinds of abstractions,
  104. procedural, control, and especially data abstractions,
  105. are useful in the programming process.
  106. Of these, only the procedural abstraction
  107. is supported well by conventional languages,
  108. through the procedure or subroutine.
  109. CLU provides, in addition to procedures,
  110. novel linguistic mechanisms that
  111. support the use of data and control abstractions.
  112. .para
  113. This paper provides an introduction to the abstraction mechanisms
  114. in CLU.
  115. By means of programming examples, we illustrate the utility of
  116. the three kinds of abstractions in program construction
  117. and show how CLU programs may be written to use
  118. and implement abstractions.
  119. We also discuss the CLU library, which permits
  120. incremental program development with complete
  121. type-checking performed at compile-time.
  122. .sp
  123. .fi l
  124. Key words and phrases: programming languages, data types,
  125. data abstractions, control abstractions, programming
  126. methodology, separate compilation.
  127. .sp
  128. CR categories: 4.22, 4.0, 4.12.
  129. .br
  130. .fi b
  131. .if narrow
  132. .ll
  133. .en
  134. .
  135. .ref All71
  136. Allen, F. E. and Cocke, J.
  137. A catalogue of optimizing transformations.
  138. Rep. RC 3548,
  139. IBM Thomas J. Watson Research Center,
  140. Yorktown Heights, N.@Y., 1971.
  141. ..
  142. .ref All75
  143. Allen, F. E.
  144. A program data flow analysis procedure.
  145. Rep. RC 5278,
  146. IBM Thomas J. Watson Research Center,
  147. Yorktown Heights, N.@Y., 1975.
  148. ..
  149. .ref Atk76
  150. Atkinson, R. R.
  151. Optimization techniques for a structured programming language.
  152. S.M. Thesis,
  153. Dept. of Electrical Engineering and Computer Science,
  154. M.@I.@T., Cambridge, Mass., June 1976.
  155. ..
  156. .ref Dah70
  157. Dahl, O. J., Myhrhaug, B., and Nygaard, K.
  158. The SIMULA 67 common base language.
  159. Publication S-22, Norwegian Computing Center, Oslo, 1970.
  160. ..
  161. .ref DK75
  162. DeRemer, F. and Kron, H.
  163. Programming-in-the-large versus programming-in-the-small.
  164. 2Proceedings of International Conference on Reliable Software*,
  165. 2SIGPLAN Notices 10*, 6 (June 1975), 114-121.
  166. ..
  167. .ref Dij72
  168. Dijkstra, E. W.
  169. Notes on structured programming.
  170. 2Structured Programming,
  171. A.P.I.C. Studies in Data Processing No. 8*,
  172. Academic Press, New York 1972, 1-81.
  173. ..
  174. .ref Guttag
  175. Guttag, J. V., Horowitz, E., and Musser, D. R.
  176. Abstract data types and software validation.
  177. Rep. ISI/RR-76-48, Information Sciences Institute,
  178. University of Southern California, Marina del Rey,
  179. Calif., August 1976.
  180. ..
  181. .ref Hoare72
  182. Hoare, C. A. R.
  183. Proof of correctness of data representations.
  184. 2Acta Informatica*, 4 (1972), 271-281.
  185. ..
  186. .ref Knu73
  187. Knuth, D.
  188. 2The Art of Computer Programming*, vol. 3.
  189. Addison Wesley, Reading, Mass., 1973.
  190. ..
  191. .ref LCS75
  192. 2Laboratory for Computer Science Progress Report 1974-1975*,
  193. Computation Structures Group.
  194. Rep. PR-XII,
  195. Laboratory for Computer Science, M.@I.@T.,
  196. to be published.
  197. ..
  198. .ref Lam71
  199. Lampson, B. W.
  200. Protection.
  201. Proc. Fifth Annual Princeton Conference on Information
  202. Sciences and Systems, Princeton University, 1971, 437-443.
  203. ..
  204. .ref Lis74
  205. Liskov, B. H. and Zilles, S. N.
  206. Programming with abstract data types.
  207. Proc. ACM SIGPLAN Conference on Very High Level Languages,
  208. 2SIGPLAN Notices 9*, 4 (April 1974), 50-59.
  209. ..
  210. .ref Lis75
  211. Liskov, B. H. and Zilles, S. N.
  212. Specification techniques for data abstractions.
  213. 2IEEE Trans. on Software Engineering*, 2SE-1*,
  214. (1975), 7-19.
  215. ..
  216. .ref Lis76
  217. Liskov, B. H. and Berzins, V.
  218. An appraisal of program specifications.
  219. Computation Structures Group Memo 141,
  220. Laboratory for Computer Science,
  221. M.@I.@T., Cambridge, Mass., July 1976.
  222. ..
  223. .ref McC62
  224. McCarthy, J., et al.
  225. 2LISP 1.5 Programmer's Manual*, MIT Press, 1962.
  226. ..
  227. .ref Mor73
  228. Morris, J. H.
  229. Protection in programming languages.
  230. 2Comm. ACM 16*, 1 (Jan 1973), 15-21.
  231. ..
  232. . .ref Mor74
  233. . Morris, J. H.
  234. . Toward more flexible type systems.
  235. . Proceedings of the Programming Symposium, Paris, April 9-11, 1974,
  236. . 2Lecture Notes in Computer Science 19*, Springer-Verlag, New York,
  237. . 377-384.
  238. . ..
  239. .ref Par71
  240. Parnas, D. L.
  241. Information distribution aspects of design methodology.
  242. Proc. IFIP 1971.
  243. ..
  244. .ref Sch76
  245. Scheifler, R. W.
  246. An analysis of inline substitution for the CLU programming language.
  247. Computation Structures Group Memo 139,
  248. Laboratory for Computer Science,
  249. M.@I.@T., Cambridge, Mass., June 1976.
  250. ..
  251. .ref Spitzen
  252. Spitzen, J. and Wegbreit, B.
  253. The verification and synthesis of data structures.
  254. 2Acta Informatica*, 4 (1975), 127-144.
  255. ..
  256. .ref Standish
  257. Standish, T. A.
  258. 2Data structures: an axiomatic approach*.
  259. Rep. 2639, Bolt Beranek and Newman, Cambridge,
  260. Mass., 1973.
  261. ..
  262. .ref Thomas
  263. Thomas, J. W.
  264. Module interconnection in programming systems supporting
  265. abstraction.
  266. Rep. CS-16, Computer Science Program, Brown University,
  267. Providence, R.@I., 1976.
  268. ..
  269. .ref Wir71a
  270. Wirth, N.
  271. Program development by stepwise refinement.
  272. 2Comm. ACM 14*, 4 (1971), 221-227.
  273. ..
  274. .ref Wir71b
  275. Wirth, N.
  276. The programming language PASCAL.
  277. 2Acta Informatica*, 1 (1971), 35-63.
  278. ..
  279. .ref Wul84
  280. Wulf, W. A., London, R., and Shaw, M.
  281. An introduction to the construction and verification
  282. of Alphard programs.
  283. 2IEEE Transactions on Software Engineering SE-2*,
  284. (1976), 253-264.
  285. ..
  286. .bp
  287. .if do_refs
  288. .insert_refs
  289. .en
  290. .if narrow
  291. .rs
  292. .sp 3i
  293. .en