ABSTRACT
An applicative language called HOPE is described and discussed. The underlying goal of the design and implementation effort was to produce a very simple programming language which encourages the construction of clear and manipulable programs. HOPE does not include an assignment statement; this is felt to be an important simplification. The user may freely define his own data types, without the need to devise a complicated encoding in terms of low-level types. The language is very strongly typed, and as implemented it incorporates a typechecker which handles polymorphic types and overloaded operators. Functions are defined by a set of recursion equations; the left-hand side of each equation includes a pattern used to determine which equation to use for a given argument. The availability of arbitrary higher-order types allows functions to be defined which 'package' recursion. Lazily-evaluated lists are provided, allowing the use of infinite lists which could be used to provide interactive input/output and concurrency. HOPE also includes a simple modularisation facility which may be used to protect the implementation of an abstract data type.
- 1.Aubin, R. Strategies for Mechanizing Structural Induction. Proc. 5th Int. Joint Conf. on Artificial Intelligence, Cambridge, Massachusetts, August, 1977, pp. 363-369.Google ScholarDigital Library
- 2.Backus, J. Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs. Comm. ACM 21, 8 (August 1978), 613-641. Google ScholarDigital Library
- 3.Boyer, R.S. and Moore, J.S. A Computational Logic. Academic Press, 1980.Google Scholar
- 4.Burge, W.H. Recursive Programming Techniques. Addison-Wesley, 1975.Google Scholar
- 5.Burstall, R.M. Design Considerations for a Functional Programming Language. Infotech State of the Art Conference: The Software Revolution, Copenhagen, October, 1977.Google Scholar
- 6.Burstall, R.M. Electronic Category Theory. Proc. 9th Int. Symp. on Mathematical Foundations of Computer Science, Rydzyna, Poland, September, 1980. Google ScholarDigital Library
- 7.Burstall, R.M. and Darlington, J. A Transformation System for Developing Recursive Programs. J. ACM 24, 1 (January 1977), 44-67. Google ScholarDigital Library
- 8.Burstall, R.M. and Goguen, J.A. Putting Theories Together to Make Specifications. Proc. 5th Int. Joint Conf. on Artificial Intelligence, Cambridge, Massachusetts, August, 1977, pp. 1045-1058.Google Scholar
- 9.Burstall, R.M. and Sannella, D.T. HOPE User's Manual. In preparation.Google Scholar
- 10.Dahl, O-J., Dijkstra, E.W. and Hoare C.A.R. Structured Programming. Academic Press, 1972. Google ScholarDigital Library
- 11.Dahl, O-J., Myhrhaug, B. and Nygaard, K. The SIMULA 67 Common Base Language. Publication S22, Norwegian Computing Centre, Oslo, 1970.Google Scholar
- 12.Dewar, R.B.K., Grand, A., Liu, S-C. and Schwartz, J.T. Programming by Refinement, as Exemplified by the SETL Representation Sublanguage. ACM Trans. Programming Languages and Systems 1, 1 (July 1979), 27-49. Google ScholarDigital Library
- 13.Feather, M.S. A System for Developing Programs by Transformation. Ph.D. Th., University of Edinburgh, 1979.Google Scholar
- 14.Goguen, J.A. and Burstall, R.M. CAT, a System for the Structured Elaboration of Correct Programs from Structured Specifications. In preparation.Google Scholar
- 15.Goguen, J.A. and Tardo, J.J. An Introduction to OBJ: A Language for Writing and Testing Formal Algebraic Program Specifications. Specifications of Reliable Software Conf. Proc., Cambridge, Massachusetts, April, 1979.Google Scholar
- 16.Gordon, M.J.C. The Denotational Description of Programming Languages. Springer-Verlag, 1979. Google ScholarDigital Library
- 17.Gordon, M.J.C., Milner, A.J.R.G., Morris, L., Newey, M. and Wadsworth, C. A Metalanguage for Interactive Proof in LCF. Proc. 5th ACM Symp. on Principles of Programming Languages, Tucson, Arizona, 1978. Google ScholarDigital Library
- 18.Henderson, P. and Morris, J. A Lazy Evaluator. Proc. 3rd ACM Symp. on Principles of Programming Languages, Atlanta, Georgia, 1976, pp. 95-103. Google ScholarDigital Library
- 19.Henderson, P. and Snowdon, R. An Experiment in Structured Programming. BIT 12, 1 (1972), 38-53.Google Scholar
- 20.Ichbiah, J.D. et al. Preliminary ADA Reference Manual. SIGPLAN Notices 14, 6A (June 1979). Google ScholarDigital Library
- 21.Iverson, K. A Programming Language. John Wiley and Sons, 1962. Google ScholarDigital Library
- 22.Jenks, R.D. The SCRATCHPAD Language. Proc. Symp. on Very High Level Languages, April, 1974. Google ScholarDigital Library
- 23.Kernighan, B.W. and Plauger, P.J. Software Tools. Addison-Wesley, 1976. Google ScholarDigital Library
- 24.Landin, P.J. The Next 700 Programming Languages. Comm. ACM 9, 3 (March 1966), 157-166. Google ScholarDigital Library
- 25.Liskov, B., Snyder, A., Atkinson, R. and Schaffert, C. Abstraction Mechanisms in CLU. Comm. ACM 20, 8 (August 1977), 564-576. Google ScholarDigital Library
- 26.Milne, G. and Milner, R. Concurrent Processes and Their Syntax. J. ACM 26, 2 (April 1979), 302-321. Google ScholarDigital Library
- 27.Milner, R. A Theory of Type Polymorphism in Programming. Journal of Computer and System Sciences 17, 3 (December 1978), 348-375.Google ScholarCross Ref
- 28.Turner, D.A. SASL Language Manual. University of St. Andrews, 1979.Google Scholar
- 29.Wadsworth, C.P. Semantics and Pragmatics of the Lambda Calculus. Ph.D. Th., Programming Research Unit, Oxford University, 1971.Google Scholar
- 30.Warren, D.H.D, Pereira, L.M. and Pereira, F.C.N. PROLOG—The Language and Its Implementation Compared With LISP. Proc. ACM Symp. on Artificial Intelligence and Programming Languages, Rochester, New York, August, 1977. Google ScholarDigital Library
- 31.Wulf, W.A., London, R.L. and Shaw, M. An Introduction to the Construction and Verification of Alphard Programs. IEEE Trans. on Software Eng. SE-2, 4 (December 1976), 253-265.Google ScholarDigital Library
Index Terms
- HOPE: An experimental applicative language
Recommendations
Faith, hope, and love: an essay on software science's neglect of human factors
OOPSLA '10: Proceedings of the ACM international conference on Object oriented programming systems languages and applicationsResearch in the area of programming languages has different facets -- from formal reasoning about new programming language constructs (such as type soundness proofs for new type systems) over inventions of new abstractions, up to performance ...
Layout-sensitive language extensibility with SugarHaskell
Haskell '12: Proceedings of the 2012 Haskell SymposiumProgrammers need convenient syntax to write elegant and concise programs. Consequently, the Haskell standard provides syntactic sugar for some scenarios (e.g., do notation for monadic code), authors of Haskell compilers provide syntactic sugar for more ...
Layout-sensitive language extensibility with SugarHaskell
Haskell '12Programmers need convenient syntax to write elegant and concise programs. Consequently, the Haskell standard provides syntactic sugar for some scenarios (e.g., do notation for monadic code), authors of Haskell compilers provide syntactic sugar for more ...
Comments