Hope (programming language): Difference between revisions

Content deleted Content added
Ζζ (talk | contribs)
type declarations in Haskell and ML can be explicit, and are considered good style.
Dsannella (talk | contribs)
m Wikipedia cross reference to Don Sannella
 
(90 intermediate revisions by 48 users not shown)
Line 1:
{{Infobox programming language
'''Hope''' is a small [[functional (programming)|functional]] [[programming language]] developed in the early 1980s prior to [[Miranda programming language|Miranda]] and [[Haskell (programming language)|Haskell]]. It is notable for being the first language with call-by-pattern evaluation and [[algebraic data type]]s. Hope is an important language in the development of functional programming.
| name = Hope
| logo = <!-- Filename -->
| logo caption =
| screenshot = <!-- Filename -->
| screenshot caption =
| sampleCode =
| paradigm = [[Functional programming|functional]]
| family =
| designers = [[Rod Burstall]]<br>D. B. MacQueen<br>[[Don Sannella]]
| developer =[[University of Edinburgh]]
| released = {{Start date and age|1980}}
| latest release version =
| latest release date = <!-- {{Start date and age|199y|mm|dd|df=yes}} -->
| typing =
| memory management =
| scope =
| programming language =
| discontinued = Yes
| platform =
| operating system =
| license =
| file ext =
| file format = <!-- or: | file formats = -->
| website = <!-- {{URL|www.example.com}} -->
| implementations =
| dialects = Hope+
| influenced by = [[NPL (programming language)|NPL]]
| influenced =
}}
 
'''Hope''' is a [[programming language]] based on [[functional programming]] developed in the 1970s at the [[University of Edinburgh]].<ref name="BMS">{{cite book |last1=Burstall |first1=R. M. |author1-link=Rod Burstall |last2=MacQueen |first2=D. B. |last3=Sannella |first3=D. T. |date=1980 |chapter=Hope: An Experimental Applicative Language |title=Proc. 1980 LISP Conference|place=Stanford University, Stanford, California, United States |page=136–143 |url=https://homepages.inf.ed.ac.uk/dts/pub/hope.pdf}}</ref><ref>
A Hope tutorial by Roger Bailey was featured in the August [[1985]] issue of [[Byte magazine|Byte]] on [[declarative programming]].
{{cite book |last1=Bailey |first1=Roger |date=1 April 1990 |title=Functional Programming with Hope |series=Ellis Horwood Series in Computers and Their Applications |publisher=Ellis Horwood Ltd}}</ref>
It predates [[Miranda (programming language)|Miranda]] and [[Haskell]] and is contemporaneous with [[ML (programming language)|ML]], also developed at the University. Hope was derived from [[NPL (programming language)|NPL]],<ref name="design"/> a simple functional language developed by [[Rod Burstall]] and [[John Darlington]] in their work on program transformation.<ref>{{cite journal |last1=Burstall |first1=R. M. |author1-link=Rod Burstall |last2=Darlington |first2=J. |author2-link=John Darlington |date=1977 |title=A transformation system for developing recursive programs |journal=Journal of the Association for Computing Machinery |volume=24 |issue=1 |pages=44–67}}</ref> NPL and Hope are notable for being the first languages with call-by-pattern evaluation and [[algebraic data type]]s.<ref>{{Cite book |last1=Hudak |first1=Paul |author1-link=Paul Hudak |last2=Hughes |first2=John |author2-link=John Hughes (computer scientist) |last3=Peyton Jones |first3=Simon |author3-link=Simon Peyton Jones |last4=Wadler |first4=Philip |author4-link=Philip Wadler |date=2007-06-09 |title=A history of Haskell: being lazy with class |publisher=ACM |pages=12–1 |doi=10.1145/1238844.1238856 |isbn=9781595937667 |s2cid=52847907}}</ref>
 
Hope was named for [[Sir Thomas Hope, 8th Baronet|Sir Thomas Hope]] (c. 1681–1771), a Scottish [[agriculture]] reformer, after whom ''Hope Park Square'' in [[Edinburgh]], the ___location of the [[artificial intelligence]] department at the time of the development of Hope, was also named.
A factorial program in Hope is
 
The first implementation of Hope used [[strict evaluation]], but there have since been [[lazy evaluation]] versions and strict versions with lazy constructors. A successor language Hope+, developed jointly between [[Imperial College]] and [[International Computers Limited]], added annotations to dictate either strict or lazy evaluation.<ref name=annotations>{{cite book |last1=Kewley |first1=John |last2=Glynn |first2=Kevin |date=1989 |chapter=Evaluation Annotations for Hope+ |editor1-last=Davis |editor1-first=Kei |editor2-last=Hughes |editor2-first=R. J. M. |title=Functional Programming: Proceedings of the 1989 Glasgow Workshop, Workshops in Computing |pages=329–337 |place=London, United Kingdom |publication-date=1990 |publisher=[[Springer-Verlag]]}}</ref>
 
==Language details==
A [[factorial]] program in Hope is:
dec fact : num -> num;
--- fact 0 <= 1;
--- fact n <= n*fact(n-1);
Unlike in [[Haskell (programming language)|Haskell]], changing the order of the clauses would not change the meaning of the program, because Hope's pattern matching always favors more specific patterns over less specific ones.
 
AnotherChanging waythe inorder of clauses does not change the meaning of the program, whichbecause Hope's differspattern frommatching Haskellalways andfavors more specific patterns over less specific ones. Explicit [[:Category:MLDeclaration programming(computer language familyprogramming)|MLdeclarations]] isof that explicit[[data type declarations]]s in Hope are required:; Therethere is no option[[type to use a type-inference]] algorithm in Hope.
 
Hope provides two built-in [[data structure]]s: [[tuple]]s and [[List (abstract data type)|lists]].<ref name=byte/>
The first implementation of Hope was [[strict evaluation|strict]], but since that one there have been [[lazy evaluation|lazy]] versions and strict versions with lazy constructors.
 
==External linksImplementations==
Roger Bailey's Hope tutorial in the August 1985 issue of ''[[Byte (magazine)|Byte]]'' references an [[Interpreter (computing)|interpreter]] for [[IBM PC DOS]] 2.0.<ref name=byte/> [[BT Group|British Telecom]] embarked on a project with [[Imperial College London]] to implement a version of Hope. The first release was coded by Thanos Vassilakis in 1986. Further releases were coded by Mark Tasng of British Telecom.
*[http://www.soi.city.ac.uk/~ross/Hope/ Hope homepage]
*[http://haskell.org/haskellwiki/History_of_Haskell History of Haskell] which mentions Hope being the first language with algebraic data types.
*[http://www.devili.iki.fi/library/issue/136.en.html table of contents of Byte, August 1985]
 
==References==
[[Category:Functional languages]]
{{Reflist|refs=
<ref name="design">{{cite conference |last1=Burstall |first1=R. M. |author1-link=Rod Burstall |date=1977 |title=Design considerations for a functional programming language (invited paper) |conference=Proceedings Infotech State of the Art Conference "The Software Revolution" |place=Copenhagen |pages=45–57}}</ref>
<ref name=byte>{{cite magazine |last1=Bailey |first1=Roger |date=August 1985 |url=https://archive.org/stream/BYTE_Vol_10-08_1985-08_The_Amiga#page/n241/mode/2up |title=A Hope Tutorial |magazine=[[Byte (magazine)|Byte]] |volume=10 |issue=8 |page=235–258 |access-date=13 January 2025}}</ref>
}}
 
==External links==
*[https://web.archive.org/web/20130801064002/http://www.hopemachine.co.uk/ Hope Interpreter for Windows]
*[http://cgibin.erols.com/ziring/cgi-bin/cep/cep.pl?_key=Hope Entry in the online Dictionary of Programming Languages]
 
{{Authority control}}
{{compu-lang-stub}}
 
{{DEFAULTSORT:Hope (Programming Language)}}
[[ru:Hope]]
[[Category:Functional languages]]
[[Category:Academic programming languages]]
[[Category:History of computing in the United Kingdom]]
[[Category:Statically typed programming languages]]
[[Category:University of Edinburgh]]
<!-- Hidden categories below -->
[[Category:Articles with example code]]