HOPE(ID:810/hop001)


Named for Hope Park Square, where Edinburgh's Computer Science Department was (but also for Higher Order Parameters and "springs eternal" and so forth.)

R.M. Burstall and Don Sanella , U Edinburgh and Dave McQueen, Bell Labs 1978.

Functional language with polymorphic types and lazy lists. First language to use call-by-pattern.
a small polymorphically-typed functional language. First language to use call-by-pattern. HOPE was originally strict, but there are versions with lazy lists, or with lazy constructors but strict functions.

Places
People:
Structures:
Related languages
NPL => HOPE   Successor
HOPE => FP/M   Target language for
HOPE => Hope+   Extension of
HOPE => SML   Derivation of

References:
  • Burstall , R. M.; Darlington, John "A Transformation System for Developing Recursive Programs" p44-67 view details Abstract: A system of rules for transforming programs is described, with the programs in the form of recursion equations. An initially very simple, lucid, and hopefully correct program is transformed into a more efficient one by altering the recursion structure. Illustrative examples of program transformations are given, and a tentative implementation is described. Alternative structures for programs are shown, and a possible initial phase for an automatic or semiautomatic program-manipulation system is indicated.
          in [ACM] JACM 24(1) Jan 1977 view details
  • Burstall, R.M. "Design Considerations for a Functional Programming Language" view details
          in Infotech State of the Art Conference: The Software Revolution, Copenhagen, October, 1977. view details
  • Burstall, R.M. and Sannella, D.T. HOPE User's Manual. In preparation. view details
          in Infotech State of the Art Conference: The Software Revolution, Copenhagen, October, 1977. view details
  • Burstall R.M., MacQueen D.B. and Sannella D, T. "HOPE: An experimental Applicative Language" Internal Report CSR-62-80 (Updated Feb. 1981). Department of Computing Science. University of Edinburgh. view details
          in Infotech State of the Art Conference: The Software Revolution, Copenhagen, October, 1977. view details
  • Burstall, R.M. et al, "HOPE, an Experimental Applicative Language" pp136-143 view details 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. Extract: HOPE
    3. THE HOPE PROGRAMMING LANGUAGE
    A programming language called HOPE which
    illustrates the features mentioned above has been
    designed and implemented at Edinburgh University.
    A brief informal description of HOPE follows; full
    details can be found in [9]. A precursor, NPL, was
    described in [5].
    The aim throughout was to design a programming
    language which was very simple and encouraged
    clarity and manipulability of programs. Major
    influences in the design of HOPE have been LISP and
    Landin's ISWIM [24]. We were not trying to be
    original; we sought a judicious selection of wellunderstood
    ideas. HOPE seeks some blend of LISP
    power with the discipline of strong typing and
    modularity. It bears some resemblance to a number
    of other languages, including PROLOG [30], ML [17],
    SASL [28], OBJ [15], SCRATCHPAD [22], and languages
    by Burge [4] and Backus [2].
    HOPE (in its present form) is an experiment in
    language design and a means of testing certain
    ideas in programming methodology rather than the
    ultimate in programming languages. It is still
    somewhat incomplete and lacks such conveniences as
    sensible input/output facilities (but see section
    3.5).
    Part of the HOPE implementation was carried out
    by Michael Levy and we express our appreciation of
    his efforts.
          in [ACM] Proceedings of the 1980 ACM Conference on LISP and functional programming 1980, Stanford University view details
  • Eisenbach S. HOPE SWURCC Micro Software Quarterly Issue 5 Nov 1981. University of Bath Computer Center. view details
          in [ACM] Proceedings of the 1980 ACM Conference on LISP and functional programming 1980, Stanford University view details
  • Moor, Ian W. "An applicative compiler for a parallel machine" view details Abstract: A compiler for the applicative language HOPE is described. The compiler is itself written in HOPE and generates a machine independent compiler target language, suitable for execution on the parallel reduction machine ALICE. The advantages of writing a compiler in a very high level applicative language are discussed, and the use of program transformation and other techniques to turn the initial 'runnable specification' into a more efficient (if less clear) program are outlined. Extensions to the HOPE language and the compiler which can exploit the parallelism and various execution modes of ALICE are described.

          in SIGPLAN Notices 17(06) June 1982 Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, Boston, Massachusetts, June 23-25, 1982 view details
  • Wu W.H. Using the Imperial College HOPE interpreter. Internal Report. Department of Computing, Imperial College, 1982. view details
          in SIGPLAN Notices 17(06) June 1982 Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, Boston, Massachusetts, June 23-25, 1982 view details
  • Harland, David M. "Polymorphic Programming Languages", Ellis Horwood 1984. view details
          in SIGPLAN Notices 17(06) June 1982 Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, Boston, Massachusetts, June 23-25, 1982 view details
  • Bailey, R. "A HOPE Tutorial" view details pdf
          in BYTE August 1985 view details
  • Eisenbach, S.; McLoughlin, L.; Sadler, C. "Data-flow design as a visual programming language" Proceedings of the 5th International Workshop on Software Specifications & Design Pittsburgh, Pennsylvania, United States 1989 pp281-283 view details Abstract: Data-flow design techniques and the functional programming style both decompose problems in a data-driven fashion. We propose a method based
    on data-flow diagrams which yields designs which can be mechanically
    translated into code written in a functional programming language. Users who specify or design systems with data-flow techniques can effectively execute their specifications or designs with a minimum of additional design decisions and without recourse to a programming language. Data-flow diagram elements behave as programming constructs in a ?visual pmgramming? language. The paper solves a single problem to illustrate the methodology and show the kind of code produced. DOI
          in BYTE August 1985 view details
  • Bailey, R. "Functional Programming with Hope", Ellis Horwood 1990. view details
          in BYTE August 1985 view details
    Resources
    • PC Hope

      "
    • Hope home page
      Hope is a small functional programming language, with polymorphic typing, algebraic types, pattern matching and higher-order functions. The version here is a fully lazy interpreter.

      - A Hope tutorial by Roger Bailey (also available in DVI, PostScript and PDF formats).
      - A Hope interpreter - Reference (also available in DVI, PostScript and PDF formats).
      - Hope libraries.
      - A few Hope examples. (also available in DVI, PostScript and PDF formats).
      - C source code for the interpreter (distributed under the GNU General Public Licence).
      external link