{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T05:47:53Z","timestamp":1784180873289,"version":"3.55.0"},"reference-count":29,"publisher":"Cambridge University Press (CUP)","issue":"1","license":[{"start":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T00:00:00Z","timestamp":1226016000000},"content-version":"unspecified","delay-in-days":6155,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[1992,1]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    One can have all the advantages of functional programming \u2013 correctness, clarity, simplicity, and flexibility \u2013 without\n                    <jats:italic>any<\/jats:italic>\n                    sacrifice in performance, even for a scientifically significant computation on a supercomputer. Therefore, why use Fortran? We demonstrate\n                    <jats:italic>parity<\/jats:italic>\n                    \u2013 equality of speed and storage use \u2013 between a program generated automatically from a functional specification and a program written by hand in the procedural style. To our knowledge, this demonstration of parity is the first for a program that solves a scientifically significant problem \u2013 quasi-linear hyperbolic partial differential equations \u2013 on a scientifically interesting supercomputer \u2013 the CRAY X-MP. We use pure Lisp, including higher-order functions, to express the functional specification for the PDE solver. We designed this specification for maximal clarity and flexibility, rather than for efficiency. Nevertheless, we obtain a highly efficient program to solve the PDEs: automated program transformations put back the missing efficiency as they produce an executable Fortran program from the specification. The generated Fortran program vectorizes on the CRAY X-MP and runs about 4% faster than a handwritten Fortran program for the same problem. We describe the problem and the specification, and some of the problem-domain-specific and hardware-specific transformations that we use to obtain the high-efficiency program.\n                  <\/jats:p>","DOI":"10.1017\/s0956796800000289","type":"journal-article","created":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T11:14:32Z","timestamp":1226056472000},"page":"81-126","source":"Crossref","is-referenced-by-count":9,"title":["A practical functional program for the CRAY X-MP"],"prefix":"10.1017","volume":"2","author":[{"given":"James M.","family":"Boyle","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Terence J.","family":"Harmer","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2008,11,7]]},"reference":[{"key":"S0956796800000289_ref028","volume-title":"The Implementation of Functional Programming Languages","author":"Peyton-Jones","year":"1987"},{"key":"S0956796800000289_ref027","doi-asserted-by":"publisher","DOI":"10.1145\/357172.357177"},{"key":"S0956796800000289_ref026","volume-title":"LISP F3, Users Guide","author":"Nordstrom","year":"1978"},{"key":"S0956796800000289_ref025","volume-title":"Proc. Workshop on Massive Parallelism","author":"Nikhil","year":"1991"},{"key":"S0956796800000289_ref029","volume-title":"Theory and Applications of Cellular Automata","author":"Wolfram","year":"1986"},{"key":"S0956796800000289_ref013","volume-title":"4th Int. Conf. on Architectural Support for Programming Languages and Operating Systems","author":"Culler","year":"1991"},{"key":"S0956796800000289_ref015","unstructured":"Federal Coordinating Council for Science, Engineering and Technology. 1987. A research and development strategy for high performance computing. Executive Office of the President, Office of Science and Technology Policy, Washington, DC (Nov. 20)."},{"key":"S0956796800000289_ref009","first-page":"361","volume-title":"Software Reusability","volume":"I","author":"Boyle","year":"1989"},{"key":"S0956796800000289_ref003","volume-title":"Introduction to Functional Programming","author":"Bird","year":"1988"},{"key":"S0956796800000289_ref010","first-page":"13","volume-title":"Proc. IFIP TC2\/WG2.1 Working Conf. on Construction Programs from Specifications","author":"Boyle","year":"1991"},{"key":"S0956796800000289_ref004","doi-asserted-by":"publisher","DOI":"10.1007\/BF01806169"},{"key":"S0956796800000289_ref024","volume-title":"SIGPLAN Notices","volume":"21","author":"Kranz","year":"1986"},{"key":"S0956796800000289_ref012","volume-title":"The Calculi of Lambda Conversion","author":"Church","year":"1941"},{"key":"S0956796800000289_ref023","volume-title":"ORBIT: An Optimizing Compiler for Scheme","author":"Kranz","year":"1988"},{"key":"S0956796800000289_ref002","first-page":"28","volume-title":"Proc. Functional Programming and Computer Architecture","author":"Barth","year":"1991"},{"key":"S0956796800000289_ref001","doi-asserted-by":"publisher","DOI":"10.1093\/comjnl\/32.2.127"},{"key":"S0956796800000289_ref005","doi-asserted-by":"publisher","DOI":"10.1093\/comjnl\/32.2.152"},{"key":"S0956796800000289_ref016","doi-asserted-by":"publisher","DOI":"10.1016\/0743-7315(90)90035-N"},{"key":"S0956796800000289_ref006","doi-asserted-by":"publisher","DOI":"10.2172\/4108022"},{"key":"S0956796800000289_ref007","first-page":"3","volume-title":"Practice in Software Adaptation and Maintenance","author":"Boyle","year":"1980"},{"key":"S0956796800000289_ref011","doi-asserted-by":"publisher","DOI":"10.1109\/52.16906"},{"key":"S0956796800000289_ref008","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.1984.5010281"},{"key":"S0956796800000289_ref014","volume-title":"Beyond \u2018Speedup\u2019: Performance Analysis of Parallel Programs","author":"Dritz","year":"1987"},{"key":"S0956796800000289_ref017","volume-title":"Functional Programming","author":"Field","year":"1988"},{"key":"S0956796800000289_ref022","volume-title":"Proc. 16th ACM Symposium on Principles of Programming Languages","author":"Kelsey","year":"1989"},{"key":"S0956796800000289_ref018","volume-title":"The Little LISPer","author":"Friedman","year":"1986"},{"key":"S0956796800000289_ref019","doi-asserted-by":"publisher","DOI":"10.1016\/0167-8191(90)90067-J"},{"key":"S0956796800000289_ref020","first-page":"527","volume-title":"Proc. 1988 Int. Conf. on Supercomputing","author":"Harrison","year":"1989"},{"key":"S0956796800000289_ref021","volume-title":"Functional Programming for Loosely-Coupled Multiprocessors","author":"Kelly","year":"1989"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796800000289","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:35:09Z","timestamp":1779834909000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796800000289\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1992,1]]},"references-count":29,"journal-issue":{"issue":"1","published-print":{"date-parts":[[1992,1]]}},"alternative-id":["S0956796800000289"],"URL":"https:\/\/doi.org\/10.1017\/s0956796800000289","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1992,1]]}}}