858 bibliography - kaukau.edu.sa/files/830/files/57095_concepts techniques and...bibliography 859...
TRANSCRIPT
858 BIBLIOGRAPHY
[69] Richard Hamming. The Art of Doing SCIENCE and Engineering: Learningto Learn. Gordon and Breach Science Publishers, 1997.
[70] Seif Haridi and Sverker Janson. Kernel Andorra Prolog and its computationmodel. In 7th International Conference on Logic Programming, pages 31–48. The MIT Press, June 1990.
[71] Seif Haridi, Peter Van Roy, Per Brand, Michael Mehl, Ralf Scheidhauer,and Gert Smolka. Efficient logic variables for distributed computing. ACMTransactions on Programming Languages and Systems, May 1999.
[72] Seif Haridi, Peter Van Roy, Per Brand, and Christian Schulte. Program-ming languages for distributed applications. New Generation Computing,16(3):223–261, May 1998.
[73] Seif Haridi, Peter Van Roy, and Gert Smolka. An overview of the design ofDistributed Oz. In the 2nd International Symposium on Parallel SymbolicComputation (PASCO 97). ACM, July 1997.
[74] Martin Henz. Objects for Concurrent Constraint Programming. Interna-tionale Series in Engineering and Computer Science. Kluwer Academic Pub-lishers, Boston, MA, USA, 1997.
[75] Martin Henz. Objects for Concurrent Constraint Programming, volume 426of The Kluwer International Series in Engineering and Computer Science.Kluwer Academic Publishers, Boston, November 1997.
[76] Martin Henz. Objects in Oz. Doctoral dissertation, Saarland University,Saarbrucken, Germany, May 1997.
[77] Martin Henz and Leif Kornstaedt. The Oz notation. Technical re-port, DFKI and Saarland University, December 1999. Available athttp://www.mozart-oz.org/.
[78] Martin Henz, Tobias Muller, and Ka Boon Ng. Figaro: Yet another con-straint programming library. In Workshop on Parallelism and Implementa-tion Technology for Constraint Logic Programming, International Confer-ence on Logic Programming (ICLP 99), 1999.
[79] Martin Henz, Gert Smolka, and Jorg Wurtz. Oz – a programming languagefor multi-agent systems. In 13th International Joint Conference on ArtificialIntelligence, pages 404–409. Morgan Kaufmann, August 1993.
[80] Martin Henz, Gert Smolka, and Jorg Wurtz. Oz—a programming languagefor multi-agent systems. In Ruzena Bajcsy, editor, 13th International JointConference on Artificial Intelligence, volume 1, pages 404–409, Chambery,France, 30 August–3 September 1993. Morgan Kaufmann Publishers.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
BIBLIOGRAPHY 859
[81] Martin Henz, Gert Smolka, and Jorg Wurtz. Object-oriented concur-rent constraint programming in Oz. In Pascal Van Hentenryck and Vi-jay Saraswat, editors, Principles and Practice of Constraint Programming,pages 29–48, Cambridge, Mass., 1995. The MIT Press.
[82] Charles Antony Richard Hoare. Monitors: An operating system structuringconcept. Communications of the ACM, 17(10):549–557, October 1974.
[83] Charles Antony Richard Hoare. Communicating sequential processes. Com-munications of the ACM, 21(8):666–677, August 1978.
[84] Bruce K. Holmer, Barton Sano, Michael Carlton, Peter Van Roy, andAlvin M. Despain. Design and analysis of hardware for high performanceProlog. J. Log. Prog., 29:107–139, November 1996.
[85] Paul Hudak. Conception, evolution, and application of functional program-ming languages. Computing Surveys, 21(3):359–411, September 1989.
[86] Paul Hudak, John Peterson, and Joseph Fasel. A gentle introduction toHaskell version 98. Available at http://www.haskell.org/tutorial/.
[87] John Hughes. Why Functional Programming Matters. Computer Journal,32(2):98–107, 1989.
[88] Robert A. Iannucci. Parallel Machines: Parallel Machine Languages. TheEmergence of Hybrid Dataflow Computer Architectures. Kluwer, Dordrecht,the Netherlands, 1990.
[89] Daniel H. H. Ingalls. Design principles behind Smalltalk. Byte, 6(8):286–298, 1981.
[90] Joxan Jaffar and Michael Maher. Constraint logic programming: A survey.J. Log. Prog., 19/20:503–581, May/July 1994.
[91] Raj Jain. The Art of Computer Systems Performance Analysis. WileyProfessional Computing, 1991.
[92] Sverker Janson. AKL–A Multiparadigm Programming Language. PhD the-sis, Uppsala University and SICS, 1994.
[93] Sverker Janson and Seif Haridi. Programming paradigms of the Andor-ra Kernel Language. In International Symposium on Logic Programming,pages 167–183, October 1991.
[94] K. Jensen and N. Wirth. Pascal: User Manual and Report (Second Edition).Springer-Verlag, 1978.
[95] Richard Jones and Rafael Lins. Garbage Collection: Algorithms for Auto-matic Dynamic Memory Management. John Wiley & Sons, 1996.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
860 BIBLIOGRAPHY
[96] Andreas Kagedal, Peter Van Roy, and Bruno Dumant.Logical State Threads 0.1, January 1997. Available athttp://www.info.ucl.ac.be/people/PVR/implementation.html.
[97] Gilles Kahn. The semantics of a simple language for parallel programming.In IFIP Congress, pages 471–475, 1974.
[98] Gilles Kahn and David B. MacQueen. Coroutines and networks of parallelprocesses. In IFIP Congress, pages 993–998, 1977.
[99] B. W. Kernighan and D. M. Ritchie. The C Programming Language (ANSIC), Second Edition. Prentice Hall, 1988.
[100] Gregor Kiczales, Jim des Rivieres, and Daniel G. Bobrow. The Art of theMetaobject Protocol. The MIT Press, 1991.
[101] Donald E. Knuth. The Art of Computer Programming: SeminumericalAlgorithms, volume 2. Addison-Wesley.
[102] Donald E. Knuth. The Art of Computer Programming: Fundamental Algo-rithms, volume 1. Addison-Wesley, 1973.
[103] Donald E. Knuth. Structured programming with go to statements. Com-puting Surveys, 6(4), December 1974.
[104] Leif Kornstaedt. Gump – a front-end generator for Oz. Tech-nical report, Mozart Consortium, December 2001. Available athttp://www.mozart-oz.org/.
[105] S. Rao Kosaraju. Analysis of structured programs. J. Computer and SystemSciences, 9(3), December 1974.
[106] Robert Kowalski. Logic for Problem Solving. North-Holland, 1979.
[107] James F. Kurose and Keith W. Ross. Computer networking: a top-downapproach featuring the Internet. Addison-Wesley, 2001.
[108] Leslie Lamport. LaTeX: A Document Preparation System, Second Edition.Addison-Wesley, 1994.
[109] Hugh C. Lauer and Roger M. Needham. On the duality of operating sys-tem structures. In Second International Symposium on Operating Systems,IRIA, October 1978. Reprinted in Operating Systems Review, 13(2), April1979, pp. 3–19.
[110] Doug Lea. Concurrent Programming in Java. Addison-Wesley, 1997.
[111] Doug Lea. Concurrent Programming in Java, Second Edition. Addison-Wesley, 2000.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
BIBLIOGRAPHY 861
[112] Nancy Leveson and Clark S. Turner. An investigation of the Therac-25accidents. IEEE Computer, 26(7):18–41, July 1993.
[113] Henry Lieberman. Using prototypical objects to implement shared behav-ior in object-oriented systems. In 1st Conference on Object-Oriented Pro-gramming Languages, Systems, and Applications (OOPSLA 86), Septem-ber 1986. Also in Object-Oriented Computing, Gerald Peterson, ed., IEEEComputer Society Press, 1987.
[114] John Lloyd. Foundations of Logic Programming, Second Edition. Springer-Verlag, 1987.
[115] Nancy Lynch. Distributed Algorithms. Morgan Kaufmann, San Francisco,Calif., 1996.
[116] Bruce J. MacLennan. Principles of Programming Languages, Second Edi-tion. Saunders, Harcourt Brace Jovanovich, 1987.
[117] Michael Maher. Logic semantics for a class of committed-choice programs.In International Conference on Logic Programming (ICLP 87), pages 858–876, May 1987.
[118] Zohar Manna. The Mathematical Theory of Computation. McGraw-Hill,1974.
[119] Sun Microsystems. The Remote Method Invocation Specification, 1997.Available at http://www.javasoft.com.
[120] John McCarthy. LISP 1.5 Programmer’s Manual. The MIT Press, 1962.
[121] Michael Mehl, Christian Schulte, and Gert Smolka. Futuresand by-need synchronization for Oz. DRAFT. Available athttp://www.mozart-oz.org/papers/, May 1998.
[122] Bertrand Meyer. Object-Oriented Software Construction, Second Edition.Prentice Hall, 2000.
[123] Mark Miller, Marc Stiegler, Tyler Close, Bill Frantz, Ka-Ping Yee, ChipMorningstar, Jonathan Shapiro, and Norm Hardy. E: Open source dis-tributed capabilities, 2001. Available at http://www.erights.org.
[124] Mark Miller, Ka-Ping Yee, and Jonathan Shapiro. Capability myths de-molished. Draft available at http://zesty.ca/capmyths, 2003.
[125] Mark S. Miller, Chip Morningstar, and Bill Frantz. Capability-based finan-cial instruments. In Financial Cryptography 2000, Anguilla, British WestIndies, February 2000.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
862 BIBLIOGRAPHY
[126] Robin Milner, Mads Tofte, and Robert Harper. Definition of Standard ML.MIT Press, Cambridge, MA, USA, 1990.
[127] J. Paul Morrison. Flow-Based Programming: A New Approach to Applica-tion Development. Van Nostrand Reinhold, 1994.
[128] Almetwally Mostafa, Ilies Alouini, and Peter Van Roy.Fault tolerant global store module, 2001. Available athttp://www.mozart-oz.org/mogul/info/mostafa/globalstore.html.
[129] Mozart Consortium. The Mozart Programming System version 1.2.3, De-cember 2001. Available at http://www.mozart-oz.org/.
[130] Peter Naur. Revised report on the algorithmic language ALGOL 60. Com-munications of the ACM, 1963.
[131] Rishiyur S. Nikhil. ID language reference manual version 90.1. TechnicalReport Memo 284-2, MIT, Computation Structures Group, July 1994.
[132] Rishiyur S. Nikhil. An overview of the parallel language Id – a foundationfor pH, a parallel dialect of Haskell. Technical report, Digital EquipmentCorporation, Cambridge Research Laboratory, 1994.
[133] Rishiyur S. Nikhil and Arvind. Implicit Parallel Programming in pH. Mor-gan Kaufmann, 2001.
[134] Donald A. Norman. The Design of Everyday Things. Basic Books, Inc.,1988.
[135] Theodore Norvell. Monads for the working Haskell programmer – a shorttutorial. Available at http://www.haskell.org/.
[136] Peter Norvig. Paradigms of Artificial Intelligence Programming: Case Stud-ies in Common Lisp. Morgan Kaufmann, 1992.
[137] K. Nygaard and O. J. Dahl. The Development of the SIMULA Languages,pages 439–493. Academic Press, 1981.
[138] Chris Okasaki. Purely Functional Data Structures. Cambridge UniversityPress, 1998.
[139] Richard A. O’Keefe. The Craft of Prolog. The MIT Press, 1990.
[140] Andreas Paepcke, editor. Object-Oriented Programming: The CLOS Per-spective. The MIT Press, 1993.
[141] Seymour Papert. Mindstorms: Children, Computers, and Powerful Ideas.The Harvester Press, 1980.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
BIBLIOGRAPHY 863
[142] David Lorge Parnas. On the criteria to be used in decomposing systemsinto modules. Communications of the ACM, 15(12):1053–1058, December1972.
[143] David Lorge Parnas. Teaching programming as engineering. In 9th In-ternational Conference of Z Users, volume 967 of Lecture Notes in Com-puter Science. Springer-Verlag, 1995. Reprinted in Software Fundamentals,Addison-Wesley, 2001.
[144] David Lorge Parnas. Software Fundamentals. Addison-Wesley, 2001.
[145] F. Paterno. Model-based Design and Evaluation of Interactive Applications.Springer-Verlag, Berlin, 1999.
[146] David A. Patterson and John L. Hennessy. Computer Architecture: AQuantitative Approach, Second Edition. Morgan Kaufmann, 1996.
[147] Simon Peyton Jones. Tackling the awkward squad: monadic input/output,concurrency, exceptions, and foreign-language calls in Haskell. In TonyHoare, Manfred Broy, and Ralf Steinbruggen, editors, Engineering theoriesof software construction, pages 47–96. IOS Press, 2001. Presented at the2000 Marktoberdorf Summer School.
[148] Simon Peyton Jones, editor. Haskell 98 language and libraries: The revisedreport. Cambridge University Press, 2003. Also published as the January2003 Special Issue of the Journal of Functional Programming.
[149] Simon Peyton Jones, Andrew Gordon, and Sigbjorn Finne. ConcurrentHaskell. In Principles of Programming Languages (POPL), 1996.
[150] Shari Lawrence Pfleeger. Software Engineering: The Production of QualitySoftware, Second Edition. Macmillan, 1991.
[151] David Plainfosse and Marc Shapiro. A survey of distributed garbage collec-tion techniques. In the International Workshop on Memory Management,volume 986 of Lecture Notes in Computer Science, pages 211–249, Berlin,September 1995. Springer-Verlag.
[152] R. J. Pooley. An Introduction to Programming in SIMULA. BlackwellScientific Publishers, 1987.
[153] William H. Press, Brian P. Flannery, Saul A. Teukolsky, and William T.Vetterling. Numerical Recipes: The Art of Scientific Computing. CambridgeUniversity Press, 1986.
[154] Roger S. Pressman. Software Engineering, Sixth Edition. Addison-Wesley,2000.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
864 BIBLIOGRAPHY
[155] Mahmoud Rafea, Fredrik Holmgren, Konstantin Popov, Seif Haridi, SteliosLelis, Petros Kavassalis, and Jakka Sairamesh. Application architecture ofthe Internet simulation model: Web Word of Mouth (WoM). In IASTEDInternational Conference on Modelling and Simulation MS2002, May 2002.
[156] Eric Raymond. The cathedral and the bazaar, May 1997.
[157] Juris Reinfelds. Teaching of programming with a programmer’s theoryof programming. In Informatics Curricula, Teaching Methods, and BestPractice (ICTEM 2002, IFIP Working Group 3.2 Working Conference).Kluwer Academic Publishers, 2002.
[158] John H. Reppy. Concurrent Programming in ML. Cambridge UniversityPress, 1999.
[159] James Rumbaugh, Ivar Jacobson, and Grady Booch. The Unified ModelingLanguage reference manual. Addison-Wesley, 1999.
[160] Stuart Russell and Peter Norvig. Artificial Intelligence: A modern ap-proach. Prentice Hall, 1995.
[161] Oliver Sacks. The Man Who Mistook His Wife for a Hat: And OtherClinical Tales. Touchstone Books, 1998.
[162] Jakka Sairamesh, Petros Kavassalis, Manolis Marazakis, Christos Nikolaos,and Seif Haridi. Information cities over the Internet: Taxonomy, principlesand architecture. In Digital Communities 2002, November 2001.
[163] Vijay A. Saraswat. Concurrent Constraint Programming. The MIT Press,1993.
[164] Vijay A. Saraswat, Martin C. Rinard, and Prakash Panangaden. Semanticfoundations of concurrent constraint programming. In Principles of Pro-gramming Languages (POPL), pages 333–352, 1991.
[165] Steve Schneider. Concurrent and Real-time Systems: The CSP Approach.John Wiley & Sons, 2000.
[166] Bruce Schneier. Applied Cryptography. John Wiley & Sons, 1996.
[167] Christian Schulte. Programming constraint inference engines. In Gert Smol-ka, editor, Proceedings of the Third International Conference on Principlesand Practice of Constraint Programming, volume 1330 of Lecture Notesin Computer Science, pages 519–533, Schloß Hagenberg, Austria, October1997. Springer-Verlag.
[168] Christian Schulte. Comparing trailing and copying for constraint program-ming. In International Conference on Logic Programming (ICLP 99), pages275–289. The MIT Press, November 1999.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
BIBLIOGRAPHY 865
[169] Christian Schulte. Programming Constraint Inference Services. PhD thesis,Saarland University, Fachbereich Informatik, Saarbrucken, Germany, 2000.
[170] Christian Schulte. Programming deep concurrent constraint combinators.In Enrico Pontelli and Vıtor Santos Costa, editors, Practical Aspects ofDeclarative Languages, Second International Workshop, PADL 2000, vol-ume 1753 of Lecture Notes in Computer Science, pages 215–229, Boston,MA, USA, January 2000. Springer-Verlag.
[171] Christian Schulte. Oz Explorer – visual constraint programming sup-port. Technical report, Mozart Consortium, December 2001. Availableat http://www.mozart-oz.org/.
[172] Christian Schulte. Programming Constraint Services: High-Level Program-ming of Standard and New Constraint Services, volume 2302 of LectureNotes in Computer Science. Springer-Verlag, 2002.
[173] Christian Schulte and Gert Smolka. Encapsulated search for higher-orderconcurrent constraint programming. In 1994 International Symposium onLogic Programming, pages 505–520. The MIT Press, November 1994.
[174] Christian Schulte and Gert Smolka. Finite domain constraint program-ming in Oz. A tutorial. Technical report, DFKI and Saarland University,December 1999. Available at http://www.mozart-oz.org/.
[175] Ehud Shapiro. A subset of Concurrent Prolog and its interpreter. Tech-nical Report TR-003, Institute for New Generation Computer Technology(ICOT), Cambridge, Mass., January 1983.
[176] Ehud Shapiro, editor. Concurrent Prolog: Collected Papers, volume 1-2.The MIT Press, Cambridge, Mass., 1987.
[177] Ehud Shapiro. The family of concurrent logic programming languages.ACM Computing Surveys, 21(3):413–510, September 1989.
[178] Daniel P. Siewiorek, C. Gordon Bell, and Allen Newell. Computer Struc-tures: Principles and Examples. McGraw-Hill Book Company, 1982.
[179] Gert Smolka. The definition of Kernel Oz. In Andreas Podelski, editor,Constraints: Basics and Trends, volume 910 of Lecture Notes in ComputerScience, pages 251–292. Springer-Verlag, Berlin, 1995.
[180] Gert Smolka. The Oz programming model. In Computer Science Today, vol-ume 1000 of Lecture Notes in Computer Science, pages 324–343. Springer-Verlag, Berlin, 1995.
[181] Guy L. Steele, Jr. Common LISP: The Language. Digital Press, 1984.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
866 BIBLIOGRAPHY
[182] Leon Sterling and Ehud Shapiro. The Art of Prolog–Advanced ProgrammingTechniques. Series in Logic Programming. The MIT Press, 1986.
[183] Marc Stiegler. The E Language in a Walnut. 2000. Draft, available athttp://www.erights.org.
[184] Bjarne Stroustrup. The C++ Programming Language, Third Edition.Addison-Wesley, 1997.
[185] Giancarlo Succi and Michele Marchesi. Extreme Programming Examined.Addison-Wesley, 2001.
[186] Sun Microsystems. The Java Series. Sun Microsystems, Mountain View,Calif., 1996. Available at http://www.javasoft.com.
[187] Clemens Szyperski. Component Software: Beyond Object-Oriented Pro-gramming. Addison-Wesley and ACM Press, 1999.
[188] Andrew Taylor. High-Performance Prolog Implementation. PhD thesis,Basser Department of Computer Science, University of Sydney, June 1991.
[189] Gerard Tel. An Introduction to Distributed Algorithms. Cambridge Univer-sity Press, Cambridge, United Kingdom, 1994.
[190] Evan Tick. The deevolution of concurrent logic programming. J. Log. Prog.,23(2):89–123, May 1995.
[191] Kasunori Ueda. Guarded Horn Clauses. In Eiti Wada, editor, Proceedingsof the 4th Conference on Logic Programming, volume 221 of Lecture Notesin Computer Science, pages 168–179, Tokyo, Japan, July 1985. Springer.
[192] Jeffrey D. Ullman. Elements of ML Programming. Prentice Hall, 1998.
[193] Peter Van Roy. VLSI-BAM Diagnostic Generator, 1989. Prolog programto generate assembly language diagnostics. Aquarius Project, University ofCalifornia, Berkeley.
[194] Peter Van Roy. Can Logic Programming Execute as Fast as ImperativeProgramming? PhD thesis, Computer Science Division, University of Cal-ifornia at Berkeley, December 1990. Technical Report UCB/CSD 90/600.
[195] Peter Van Roy. 1983–1993: The wonder years of sequential Prolog imple-mentation. J. Log. Prog., 19/20:385–441, May/July 1994.
[196] Peter Van Roy, Per Brand, Denys Duchier, Seif Haridi, Martin Henz, andChristian Schulte. Logic programming in the context of multiparadigm pro-gramming: the Oz experience. Theory and Practice of Logic Programming,2003. To appear.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
BIBLIOGRAPHY 867
[197] Peter Van Roy, Per Brand, Seif Haridi, and Raphael Collet. Alightweight reliable object migration protocol. In Henri E. Bal, BoumedieneBelkhouche, and Luca Cardelli, editors, Internet Programming Languages,volume 1686 of Lecture Notes in Computer Science. Springer Verlag, Octo-ber 1999.
[198] Peter Van Roy and Alvin Despain. High-performance logic programmingwith the Aquarius Prolog compiler. IEEE Computer, pages 54–68, January1992.
[199] Peter Van Roy and Seif Haridi. Teaching programming broadly and deeply:the kernel language approach. In Informatics Curricula, Teaching Meth-ods, and Best Practice (ICTEM 2002, IFIP Working Group 3.2 WorkingConference). Kluwer Academic Publishers, 2002.
[200] Peter Van Roy and Seif Haridi. Teaching programming with the kernellanguage approach. In Workshop on Functional and Declarative Program-ming in Education (FDPE02), at Principles, Logics, and Implementationsof High-Level Programming Languages (PLI2002). University of Kiel, Ger-many, October 2002.
[201] Peter Van Roy, Seif Haridi, Per Brand, Gert Smolka, Michael Mehl, andRalf Scheidhauer. Mobile objects in Distributed Oz. ACM Transactions onProgramming Languages and Systems, 19(5):804–851, September 1997.
[202] Arthur H. Veen. Dataflow machine architecture. ACM Computing Surveys,18(4):365–396, December 1986.
[203] Duncan J. Watts. Small Worlds: The Dynamics of Networks between Orderand Randomness. Princeton University Press, 1999.
[204] Gerhard Weikum and Gottfried Vossen. Transactional Information Sys-tems: Theory, Algorithms, and the Practice of Concurrency Control andRecovery. Morgan Kaufmann, 2002.
[205] Gerhard Weiss, editor. Multiagent Systems: A Modern Approach to Dis-tributed Artificial Intelligence. The MIT Press, 1999.
[206] Claes Wikstrom. Distributed programming in Erlang. In the 1st Interna-tional Symposium on Parallel Symbolic Computation (PASCO 94 ), pages412–421, Singapore, September 1994. World Scientific.
[207] Herbert S. Wilf. generatingfunctionology. Academic Press, 1994.
[208] Glynn Winskel. The Formal Semantics of Programming Languages. Foun-dations of Computing Series. The MIT Press, Cambridge, Massachusetts,1993.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
868 BIBLIOGRAPHY
[209] Noel Winstanley. What the hell are Monads?, 1999. Available athttp://www.haskell.org.
[210] David Wood. Use of objects and agents at Symbian, September 2000. Talkgiven at the Newcastle Seminar on the Teaching of Computing Science.
[211] Matthias Zenger and Martin Odersky. Implementing extensible compil-ers. In 1st International Workshop on Multiparadigm Programming withObject-Oriented Languages, pages 61–80. John von Neumann Institute forComputing (NIC), June 2001. Workshop held as part of ECOOP 2001.
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
Index
! (escaped variable marker), 506, 515! (cut) operation (in Prolog), 675, 679,
682$ (nesting marker), 54, 85, 363, 373* (multiplication) operation, 56, 823+ (addition) operation, 56, 823- (subtraction) operation, 56, 823. (field selector) operation, 56, 828. := (dictionary/array assignment) state-
ment, 439, 440, 841. := (dictionary/array exchange) ex-
pression, 841/ (floating division) operation, 56, 824:= (state assignment) statement, 499,
502:= (state exchange) expression, 502= (binding) operation, 45, 47, 48, 101== (equality) comparison, 57=< (less or equal) comparison, 57? (output argument), 59, 843@(state access) operation, 499, 502# (tupling) constructor, 143, 827, 833& (inline character) operator, 822< (strictly less) comparison, 57, 832<= (optional method argument) opera-
tor, 505> (strictly greater) comparison, 57>= (greater or equal) comparison, 57\ (backslash), 823\= (inequality) comparison, 57˜ (minus sign), 822| (list pairing) constructor, 54
Abelson, Harold, xxxiii, 43absolute error, 122abstract machine, 43
relation to semantic rules, 789substitution-based, 128–129
abstract syntax tree, 164, 165
abstraction, xxxiiactive object, 563class, 498collection, 438collector, 192, 326, 434, 488connector, 326control, 125database, 667encapsulated search, 637hierarchy in object-oriented program-
ming, 552lifecycle, 42Linda (tuple space), 594linguistic, 40–41, 126
case (pattern matching), 793class , 554conc (concurrent composition), 283delegation, 520for loop, 190, 451fun (function), 85functor (software component),
227gate (logic gate), 276local vs. global translation, 846monitor, 601parameter passing, 438protected scope (Java), 574while loop, 451
list comprehension, 307lock, 590, 606loop, 184mailbox, 398monitor, 600pipe of stream objects, 567procedural, 180protector, 326queue, 149, 303replicator, 326software component, 223
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
870 INDEX
specialization hierarchy, xxxiitermination detection, 390transaction, 608tuple space, 594
access (cell operation), 18, 422ACCLAIM project, xlaccumulator, 142–144
breadth-first traversal, 159declarative state, 416depth-first traversal, 158for loop, 192limit of declarative model, 315loop abstraction, 262loops, 187parser, 163Prolog, 143relation to difference lists, 144relation to fold operation, 187tree traversal, 195
ACID properties, 609action (in GUI), 693active memory, 75
size, 175, 314ActiveX, 466adder
n-bit, 347full, 273
addressIP, 209URL, 214
adjacency list, 468Adjoin operation, 440, 828AdjoinAt operation, 440, 828adjunction (environment), 63ADT (abstract data type), see typeadversary, 211agent, 357
concurrent component, 370message-passing approach, 584
Alarm operation, 309, 401alarm clock, xxixalgebra, xxxvii, 115algorithm
breadth-first traversal, 159cached state, 739compression, 180
copying dual-space garbage collec-tion, 79
Dekker’s algorithm for mutual ex-clusion, 578
depth-first traversal, 158distributed garbage collection, 740distributed locking, 727distributed unification, 739elevator, 384Flavius Josephus problem, 565Floyd-Warshall, 473garbage collection, 77Hamming problem, 298linear congruential generator, 478mergesort, 140, 169
generic version, 184mobile state, 739Newton’s method for square roots,
122nonalgorithmic programming, 634parallel transitive closure, 473Pascal’s triangle, 12quicksort, 235, 531random number generation, 476termination detection, 390thread scheduling, 245transitive closure, 467tree, 154tree drawing, 161, 278unification, 102word frequency, 201
aliasing, 426, 452allocation, 76always true (in temporal logic), 611Anderson, Ross J., 750, 845Andrews, Gregory, 590andthen operator, 84Append operation, 831apple, 493Apple Corporation, xlapplet, 724application
FlexClock example, 707ping-pong example, 310standalone, 225
Java, 561video display, 321
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 871
applicative order reduction, 336Aquarius Prolog, 143arbitrary precision integer arithmetic, 6,
823arch, xxxiiarithmetic, 56Arity operation, 56, 828arity, 442, 828Armstrong, Joe, 590Arnold, Ken, 543array, 439
extensible, 443usage trade-offs, 442
ASCII (American Standard Code for In-formation Interchange), 462, 721
ask operation, 786, 793assert/1 operation (in Prolog), 669, 675assertion, 448assignment
axiomatic semantics, 449cell operation, 18, 422in-place, 314Java, 559monotonic, 851multiple, 851single, 44, 851to iteration variable, 191
association, 537, 850association list, 491asynchronous failure detection, 745ATM (Asynchronous Transfer Mode), 395atom, 53, 825
defining scope, 514predicate calculus, 645propositional logic, 644
atomic action, 588–625approaches to concurrency, 581reasoning, 588when to use, 584
atomicity, 23, 609AtomToString operation, 826attribute
final (in Java), 550, 558initialization, 503object, 502
availability, 717AXD301 ATM switch, 395
axiom, 646axiomatic semantics, 40, 444–453, 644
Backus, John, 34bagof/3 operation (in Prolog), 638, 683Bal, Henri, 340batching
distributed stream, 725, 730object invocations, 546, 572
Baum, L. Frank, 3Bernstein, Philip A., 609billion dollar budget, 527binary integer, 822binding
basic and nonbasic, 792dynamic, 511static, 512variable-variable, 48
bistable circuit (digital logic), 274blank space (in Oz), 843Blasband, Darius, 654block
file, 297imperative language, 491memory, 76, 77Smalltalk, 549
blocking operation, 243blue cut (in Prolog), 679, 681book
Component Software: Beyond Object-Oriented Programming, 466
Concurrent Programming in Erlang,590
Concurrent Programming in Java,589
Concurrent Programming: Princi-ples and Practice, 590
Object-Oriented Software Construc-tion, 495
Software Fundamentals, 466Structure and Interpretation of Com-
puter Programs, xxxiiiThe Art of Prolog, 679The Mythical Man-Month, 466Transaction Processing: Concepts and
Techniques, 590boolean, 53
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
872 INDEX
Borges, Jorge Luis, 633bottom-up software development, 455bound identifier occurrence, 65bounded buffer, 268
data-driven concurrent version, 268lazy version, 295monitor version, 602
brand, 504Brand, Per, xlbreadth-first traversal, 159break statement, 491break operation, 491bridge building, xxx, xxxiBrinch Hansen, Per, 600Brooks, Jr., Frederick P., 466Browser tool, see Mozart Programming
Systemby-need execution, 286–289, 798
WaitQuiet operation, 800Multilisp, 342Oz 3, 811
ByNeed operation, 287byte (in Java), 560bytestring, 833
calculator, 3calculus
analysis, 173first-order predicate, 645foundational, xxxiλ, xxxi, 43, 98, 336, 351, 795, 807,
813, 848π, xxxi, 43, 55, 807
call/1 operation (in Prolog), 675call by ..., see parameter passingcall graph, 318capability, 211
declarative, 213method label, 516revocable, 433, 488
Cardelli, Luca, 728cascading abort, 613case statement, 68, 793catch clause (in try ), 95causality, 241, 361Ceil operation, 824
cell (explicit state), 417, 422–425, 797,850
cellular phone, xxix, xxxiichannel
asynchronous, 355, 393component interface, 459dataflow variable, 337many-shot, 371one-shot, 371, 376port, 354synchronous, 629
character, 822alphanumeric, 51, 843Java, 560
choice statement, 636, 778chunk, 829
reflection, 524Church-Rosser Theorem, 336Churchill, Winston, 453Clarke, Arthur C., 106, 314class, 421, 493, 495, 497, 501, 552
abstract, 528, 552active object, 564common limitations, 545complete ADT definition, 498concrete, 529, 532, 552delegation, 517diagram, 534, 539encapsulation control, 512event manager example, 570forwarding, 517generic, 531higher-order programming, 532implementation, 554incremental ADT definition, 507inheritance, 508inner, 546inner (in Java), 558introduction, 20member, 502metaclass, 553mixin, 572parameterized, 531patching, 527programming techniques, 524reflection of object state, 523structure view, 525
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 873
substitution property, 525, 527type view, 525
clausecase statement, 84definite, 662Erlang, 396Horn, xxxv, 647, 652, 662, 675
clockcontext-sensitive, 707digital circuit, 275digital logic, 271synchronization, 313
clonearray, 440computation space, 774dictionary, 441object, 523
closed distribution, 737closure, see procedure valuecluster, 717code duplication, 496code generator, 164coherence
between graphical views, 704cache, 463, 739network transparency, 726
collector, 192, 326, 434, 488COM (Component Object Model), 466combinations, 6combinator, 282comment (in Oz), 843common self, 517compaction, 77comparison, 57compilation
separate, 107standalone, 232
ping-pong example, 310unit, 225, 420, 457, 818
compiler, 163, 674extensible, 548Prolog, 676smart-aleck, 314
Compiler Panel tool, see Mozart Pro-gramming System
complete value, 47completeness
Turing, 848complexity
amortized, 149, 177, 440asymptotic, 169banker’s method, 178big-oh notation, 170introduction, 12–13physicist’s method, 178space, 175time, 13, 169worst-case, 169, 175
component, 114, 185, 223abstraction, 462avoiding dependencies, 463diagram, 360encapsulates a design decision, 462functor, 420further reading, 466future role, 464graph, 465implementation, 224interface, 224module, 420software, 224
compositionality, 419, 631class, 507encapsulated search, 638exception handling, 92Solve operation, 638
computation, 63iterative, 120recursive, 126secure, 210
computation model, xxvii, 31active object, 563constraint-based, 639, 653, 764data-driven concurrent, 240declarative concurrent with exceptions,
332declarative concurrent, 239declarative with exceptions, 93declarative, 50demand-driven concurrent with ex-
ceptions, 333demand-driven concurrent, 240, 286descriptive declarative, 117distributed, 718
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
874 INDEX
graph notation, 741extended relational, 673general, 845job-based concurrent, 628lazy concurrent, 240, 286maximally concurrent, 585, 628, 772message-passing concurrent, 354nondeterministic concurrent, 402, 653object-based, 543object-oriented, 496order-determining concurrent, 277relational, 635secure declarative, 205shared-state concurrent, 581stateful concurrent, 584, 786stateful, 421strict functional, 99atomic action, 588closed, 326concurrent constraint, 810concurrent logic programming, 292,
402, 813design principles, xxxiii, 845determinate concurrent constraint pro-
gramming, 343determinate parallel programming,
343deterministic logic programming, 648Erlang, 394Haskell, 328insecure, 326Java, 557, 625nondeterministic logic programming,
650open, 326partial failure, 326, 744Prolog, 674secure, 326semantics, 783using models together, xxxiv, 325
computation space, 666, 759computer engineering, xxxvicomputer science, xxxvicomputing, see informaticsconc statement, 283concurrency, 322
competitive, 259
cooperative, 259dataflow, 17declarative, 237, 247, 806Erlang, 394further reading, 589importance for programming, xxxinteractive interface, 90interleaving, 22introduction, 16Java, 625monitor safety, 601nondeterminism, 21order-determining, 277practical approaches, 581queue, 592rules of thumb, 584teaching, xxxvitransaction, 610
concurrency control, 573, 611, 751concurrent composition, 281, 393condition variable, 607conditional critical section, 605configuration, 787confinement
failure in declarative model, 250partial failure, 715transaction, 610
confluence, 336, 807connector, 326cons cell (list pair), 7, 54, 830consistency (in transaction), 609consistency protocol, 718constraint, 248
tree drawing, 161constructor, 560consumer, 262context, 92context-sensitive
grammar, 36GUI design, 707
continuation, 385procedure, 367record, 366
contract, 418contrapositive law, 644control abstraction
try – finally , 349
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 875
break, 491concurrent composition, 282CSP communication, 629Erlang mailbox, 410iteration, 125loops, 186need for higher-order, 182Smalltalk block, 549
coordination model, 460, 594CORBA (Common Object Request Bro-
ker Architecture), 364, 466coroutine, 279, 459
relation to laziness, 290, 293, 582correctness, 644
introduction, 11–12Cray-1 computer, 178critical region, 590cryptography
unique name generation, 210curriculum (informatics), xxxvicurrying, xxxv, 196–197, 236
Haskell, 329cyclic structures, 104
dangling reference, 76, 183, 463Danvy, Olivier, 236data structure
active, 78class, 501cyclic, 102dictionary, 199difference list, 144difference structure, 144ephemeral, 150external, 79graph, 468higher order, 185infinite, 14list, 54, 132long-lived, 80partial, 47persistent, 303protected, 206, 429queue, 149record, 53recursive, 133size, 176
stack, 198store, 76tree, 153tuple, 53
data type, see typedata-driven execution, see eager execu-
tiondatabase, 667
deductive, 668distributed, 625in-memory, 176Mnesia (in Erlang), 395persistence, 667query, 668relational, 667shared-state concurrency, 584transaction, 608update, 668
dataflow, 61channel, 337declarative model, 18error, 91examples, 252I-structure, 342introduction, 17lazy execution, 290parallel transitive closure, 473rubber band, 255variable, 44, 49, 50
Date, C.J., 668Dawkins, Richard, 418DBMS (Database Management System),
668DCOM (Distributed Component Object
Model), 466deadlock, 613
callback, 365concurrency control, 613detection, 614digital logic simulation, 274lazy execution, 293prevention, 614
deallocation, 76debugging, 522
dangling reference, 77, 183declarative component, 314distributed application, 751
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
876 INDEX
erroneous suspension, 50, 91inspecting object attributes, 507
declarative, 113, 415declarative concurrency, see concurren-
cy, declarativedeclarative program, 248declare statement, 4, 88
syntax convention of book, xliii, 88define clause (in functor), 224Definite Clause Grammar (DCG), 143,
662Delay operation, 309delay gate (digital logic), 274delay operation (in Multilisp), 342delay point, 588delegation, 518–522
otherwise method, 506Dell Corporation, xl, 204, 475demand-driven execution, see lazy exe-
cutionDe Morgan’s law, 644denotational semantics, 40dependency
component, 227dataflow, 341declarative component, 314, 324grammar context, 36inheritance, 421order-determining concurrency, 277removal of sequential, 393sequential model, 419word frequency application, 231
depth-first traversal, 158dereferencing, 47design methodology
concurrent program, 372language, 42, 335, 549, 813, 852large program, 454small program, 221
design patterns, xxxv, 421, 493, 540–543
Composite pattern, 540destructive assignment
interaction with call by name, 490determinism (declarative programming),
113diagnostics, 633
dialog model, 704dictionary, 199, 440
declarative, 199efficiency, 203internal structure, 203list-based implementation, 200relation implementation, 671relation to record, 441relation to stream, 442secure declarative, 210standalone, 228stateful, 201tree-based implementation, 200tuple space implementation, 596usage trade-offs, 442word frequency implementation, 475Word of Mouth simulation, 482
difference list, 144difference structure, 144digital logic, 271
satisfiability problem, 179Dijkstra, Edsger Wybe, 444directed graph, 467disconnected operation, 747discriminant, 181disentailment, 105–106, 785distributed lexical scoping, 728distributed system, 326, 358, 363, 392,
713closed, 737open, 514, 715, 717, 720
Distribution Panel tool, see Mozart Pro-gramming System
div (integer division) operation, 56, 823divide-and-conquer, 140domain model, 703domain of discourse, 645dotted pair, 7, 830Duchier, Denys, xl, 389durability, 609dynamic
binding, 511linking, 225, 289scope, see scope, dynamictyping, 106–108
Dynamic HTML, 692
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 877
eager executiondeclarative model, 99distributed producer/consumer, 725introduction, 13producer/consumer stream, 261relation to synchronization, 339strictness, 336
eager failure detection, 745EBNF (Extended Backus-Naur Form),
34, 662, 663, 685Einstein, Albert, 283Elcock, E. W., 634elephant, xxviielevator, see liftEmacs text editor, 817embedding, 185encapsulated
search, 637state, introduction, 18
encapsulation, 419Encyclopaedia Britannica (11th edition),
493Ende, Michael, 353entailment, 100, 105–106, 785Enterprise Java Beans, 465environment, 46, 62
adjunction, 63calculating with, 63contextual, 67interactive interface, 88restriction, 64
ephemeral data structure, 150, 303equality
structure, 426, 729token, 426, 720, 729
Ericsson (Telefonaktiebolaget LM Eric-sson), 327, 394
Erlang, 394–402error
absolute, 122domain, 97relative, 122type incorrect, 97variable not introduced, 836variable used before binding, 49
error logging, 570Escher, Maurits Cornelis, 689
Euclid, 3event (in GUI), 693event handler, 569event manager
active objects, 569adding functionality with inheritance,
571eventually true (in temporal logic), 611evolutionary software development, 455example programs (how to run), xliiiexception, 91–97, 549, 849
distribution fault, 749error , 97, 803failure , 97, 803system , 97uncaught, 95, 803
Exchange operation, 424exchange operation
on cells, 424on object attributes, 502
exclusive-or operation, 16execution state, 62exercise
(advanced exercise), xxxviii(research project), xxxviii
explicit state, see stateExplorer tool, see Mozart Programming
SystemExplorer tool (in Mozart), 763export clause (in functor), 224expression, 82
andthen operator, 84basic operation, 56basic value, 51ill-formed, 93λ notation, 98, 330nesting marker ($), 85normal order reduction, 336orelse operator, 84procedure value, 66receive (Erlang), 399
external resource, 79extreme programming, 456
factorial function, 4–25, 127–130, 234,626
fail statement, 636
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
878 INDEX
FailedValue operation, 334failure
declarative concurrency, 249detection, 745exception, 97failed value, 334inheritance, 496negation as failure, 675partial, 326software project, 527, 655transaction, 609unification, 103
fairnessstream merger, 406thread scheduling, 243, 245, 256, 339
false , 826fault model, 745fault tolerance
Erlang, 395FCFS (First-Come-First-Served), 375feature (record field name), 826FGCS (Fifth Generation Computer Sys-
tem), Japanese project, 405FIFO (First-In-First-Out), 149, 235, 343,
355, 375, 387, 459, 725, 730Erlang, 394message sending, 364port, 355
file, 213Filter operation, 194, 831finalization, 79, 486
lazy execution, 486finally clause (in try ), 95finite failure, 675finite state machine
event manager, 570firewall, 326first-argument indexing, 669fixpoint, 772Flatten operation, 145, 235, 301Flavius Josephus problem, 565–567floating point
arithmetic, 823number, 822
FloatToInt operation, 824Floor operation, 824flow control, 100, 266
lazy execution, 266thread priority, 269
Floyd, Robert W., 444, 634fold operation, 187
FoldL , 188, 469, 831FoldR , 188stream objects, 263
for statement, 190for loop, 451ForAll operation, 831formal language, 35forwarding, 518foundational calculus, xxxiframework
computation model as, 846France, 419free identifier occurrence, 59, 65, 645free memory, 76freeze/2 operation (in Prolog), 675fresh
name, 206variable, 790
full adder, 273fun statement, 85function, 85
incremental, 302introduction, 4lazy, 800monolithic, 302monotonic, 851partially-applied, 197state transition, 359
functional decomposition, 138, 547functional look, 198functor, 224, 457, 715
interactive use, 818main, 225Oz 3, 811
functor statement, 227future, 342future operation (in Multilisp), 342
Gamma, Erich, 540garbage collection, 75, 77
copying dual-space, 79distributed, 740external references, 485
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 879
generational, 80lease-based, 740, 744real-time, 78root set, 77weighted reference counting, 740
gate statement, 277gate (digital logic), 271Gelernter, David, 594generalization, 575generate-and-test, 641generating function, 173genericity, 183–185
object-oriented programming, 531static and dynamic, 532
global condition, 158glue (in GUI), 698Glynn, Kevin, 327Godel’s Incompleteness Theorem, 646Gosling, James, 543grammar, 34–38
ambiguous, 36, 169context-free, 35context-sensitive, 36definite clause (DCG), 143, 662disambiguation, 36EBNF (Extended Backus-Naur Form),
34, 685left-recursive, 656natural language, 655nonterminal symbol, 34, 165terminal symbol, 34, 165unification, 662
graphbushy, 465component, 465distribution model, 741Haskell expression, 328hierarchical, 465implementation, 468nonlocal, 465Small World, 465
Gray, Jim, 590, 609green cut (in Prolog), 682grue cut (in Prolog), 682guarded method, 605guardian, 486GUI (Graphical User Interface)
AWT (Abstract Window Toolkit) pack-age, 689
component-based programming, 464design, 689Haskell fudgets, 689model-based, 703QTk module, 690read-only view, 704Swing components, xxxv, 689text input/output, 216Visual Studio, 689
Halting Problem, 212, 691Hamming problem, 298, 349Hamming, Richard, 298handler
event, 569exception, 91, 92finalization, 486GUI design, 216, 693, 692–698
HasFeature operation, 828hash table, 442Haskell, 327–331Helm, Richard, 540Herbert, Frank, 755hexadecimal integer, 822Hoare, Charles Antony Richard, 235, 444,
600Horn clause, xxxv, 647, 652, 662, 675HTML (HyperText Markup Language),
117, 689Hudak, Paul, 98, 314Hughes, John, 284
IBM Corporation, 43IDE (Interactive Development Environ-
ment), xliii, 817identifier, 4, 46
bound occurrence, 65escaped, 515free occurrence, 59, 65, 645
IEEE floating point standard, 550, 822if statement, 68, 793ILOG Solver, 676impedance matching, 325
concurrency, 585event manager example, 574
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
880 INDEX
imperative, 415implementation, 418import clause (in functor), 224inactive memory, 76incompleteness, 646inconsistency, 791incremental function, 300independence (declarative programming),
113infinite precision arithmetic, 6infinity
floating point, 824informatics, xxxvi
curriculum, xxxvisuccess of object-oriented program-
ming, 493usefulness of computation models,
xxviiiInformation Cities project, 421information hiding, 493information systems, xxxviinheritance, 21, 421, 493, 495, 508–543
avoiding method conflicts, 516cautionary tale, 526design patterns, 540directed and acyclic, 509event manager, 571factoring, 496generalization, 575implementation, 556implementation-sharing problem, 539Java, 558multiple, 508, 533
rules of thumb, 539simple, 508single, 508, 537software reuse, 496static and dynamic binding, 511structure view, 525syntactic aspect, 496thread priority, 258type view, 525upwards, 575
inherited argument, 163instantiation, 185, 419integer
tilde ˜ as minus sign, 822
interactive systemimportance of worst-case complexi-
ty, 177interface
general concept, 224Java, 558Runnable (in Java), 625
interface builder, 689interleaving semantics, 241, 784Internet, 209, 361, 713, 717, 723
simulation of Web use, 481interoperability, 108interpreter, 43
approach to define semantics, 43generic parser, 662GUI description, 712meta, 667metacircular, 43original Erlang, 396
IntToFloat operation, 824invariant, 137, 390, 420, 444IsAtom operation, 826IsChar operation, 824IsDet operation, 320, 321, 338, 402,
673, 850IsLock operation, 591ISO 8859-1 character code, 822, 825isolation, 609IsProcedure function, 57IsRecord operation, 828I-structure, 342, 473, 814IsTuple operation, 829
Janson, Sverker, xl, 675Java, 556–563, 625–626JavaBeans, 466Jefferson, Thomas, 11Johnson, Ralph, 540journaling, 538
Kahn, Gilles, 343kernel language, see computation modelkernel language approach, xxx, 38–43
choice of formalism, xxxiiikeywords (table of), 841knowledge representation, 850Knuth, Donald Erwin, 173, 477
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 881
Kowalski, Robert, 415KWIC (keyword in context) index, 679
Label operation, 56, 828label (record identification), 20, 53λ calculus, xxxi, 43, 98, 336, 351, 795,
807, 813, 848LAN (local-area network), 361, 723, 745language
AKL, xl, 674, 810Absys, 415, 634Ada, 436, 629Algol, 415, 493
declarative concurrent, 343nondeterministic, 634
Alice, 108C++, 45, 49, 76, 183, 340, 449, 491,
493, 497, 510, 514, 516, 541,546, 551, 557
C-Linda, 594CLOS (Common Lisp Object Sys-
tem), 522CSP (Communicating Sequential Pro-
cesses), 629Clean, 331Cobol, 551, 654
parsing problem, 654Common Lisp, 60, 193Concurrent Haskell, xxxivConcurrent ML, xxxiv, 852Concurrent Prolog, 405C, 76, 182Eiffel, 525, 852Erlang, 77, 99, 327, 394–402, 460,
551, 570, 590, 809, 852E, 211FCP (Flat Concurrent Prolog), 405,
809FP, 335Flat GHC, 405Fortran, 415, 654
parsing problem, 654GHC (Guarded Horn Clauses), 405Haskell, xxviii, xxx, 45, 77, 99, 118,
140, 197, 277, 284, 291, 327–331, 335, 336, 340, 343, 349,461, 551, 689, 809
IC-Prolog, 405Id, 343, 814Java, xxviii, xxx, 43, 45, 49, 77,
183, 340, 434, 449, 466, 491,493, 497, 510, 514, 516, 541,546, 549–551, 556–563, 574, 589,600, 625–626, 689, 809, 852
monitor, 601Leda, xxxiLinda extension, 594, 629, 810Lisp, xxviii, 7, 60, 77, 132, 415, 663,
830ML, see Standard ML, Concurrent
ML, Objective CamlMercury, xxviii, 118, 331, 675, 809Miranda, 284, 349Multilisp, 342, 814Objective Caml, 549Obliq, 728Oz 1, Oz 2, Oz 3, 810–811Oz, xxxiii, xl, 513, 551, 676, 809,
846, 852Parlog, 405Pascal, 163, 182, 434, 809Prolog, xxviii, xxx, xxxv, 7, 32, 49,
77, 118, 143, 145, 277, 292, 335,340, 396, 405, 415, 551, 634,647, 652, 654, 662, 667, 669–673, 673–684, 809, 852
pure, 652SICStus, 193, 676
Scheme, xxviii, xxx, xxxi, xxxiv, 32,45, 60, 99, 291, 551, 809
Simula, 415, 493Smalltalk, xxviii, 45, 77, 340, 493,
497, 513, 514, 516, 522, 546,549, 550, 852
Standard ML, xxviii, xxxiv, 32, 45,99, 118, 140, 197, 291, 331, 335,809
Visual Basic, 465pH (parallel Haskell), 343, 814tcl/tk, 689, 690, 712assembly, 212, 314, 415, 557, 634coordination, 594formal, 35multiparadigm, xxxi
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
882 INDEX
non-strict, 336popular computation models, 809practical, 33secure, 211specification, 119symbolic, 55, 551
language designabstraction lifecycle, 42declarative, 335golden age, 415layered, 852lazy execution, 335object properties, 549trade-offs, 813
Lao-tzu, 283last call optimization, 74latch (digital logic), 275late error detection (at run-time), 509latency, 268
tolerance, 341LaTeX document, 463Latin-1, 462layered language design, 852lazy evaluation, 99
coroutining, 582example, 13explicit, 185Haskell, 328relation to call by need, 438, 490relation to non-strict evaluation, 336schedule, 350strictness analysis, 295, 329, 349
lazy execution, 283bounded buffer, 267flow control, 266Hamming problem, 298higher-order programming, 196incremental, 300introduction, 13monolithic, 302, 348needs finalization, 486relation to synchronization, 340
lazy failure detection, 745Lea, Doug, 589legal program, 33Length operation, 831lex/yacc parsing, 654
lexical analyzer, 34lexical scope, see scope, lexicallexical syntax (of Oz), 843lexically-scoped closure, see procedure
valuelexicographic order (of atoms), 57, 825Ley, Willy, 633library, 232lifecycle
abstraction, 42memory block, 76
lift control system, 374lifting
booleans to streams, 277serializability, 609synchronization, 366
lightweight transaction, 609Linda (tuple space), 594linguistic abstraction, see abstraction,
linguisticlinking, 214, 225, 227, 232, 458, 819
component, 226, 462dynamic, 289failure detection in Erlang, 395
Linux operating system, xl, 204, 475,504
list, 54, 131, 830difference, 144
advantage, 149flattening, 145introduction, 6nested, 138usage trade-offs, 442
list pair, 54, 830literal, 825liveness, 611Llull, Ramon, 633local statement, 58, 64, 790lock, 588, 590–591
get-release, 606implementation, 599introduction, 23Java, 626read, 630simple, 599thread-reentrant, 600transaction, 611
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 883
write, 630lock statement, 23, 591locus of control, 279logic
gate, 271predicate calculus, 645propositional, 644temporal, 611
logic programming, 644, 646process model, 403, 809
logical equivalence, 247, 788configuration, 806
logical formula, 645logical semantics, 40, 644–653logical sentence, 645
assertion, 445invariant, 444
Louis XIV, 413, 418Lynch, Nancy, 361
Mac OS X operating system, xxxviii, xl,258
Macintosh computer, xlMacQueen, David, 343Maher, Michael, 675, 810mailbox, 460
Erlang, 394, 397implementation, 398
maintenance, 461MakeRecord operation, 828MakeTuple operation, 381, 829Manchester Mark I, 38Manna, Zohar, 444many-to-one communication, 358Map operation, 193, 470, 831mathematical induction, 11matrix
graph representation, 468list of lists implementation, 235
Max operation, 196measurement accuracy
constraint programming, 757Member operation, 831memoization, 425, 460
call by need, 438declarative programming, 315explicit state, 27, 703
GUI example, 703unification, 104
memoryaddress in abstract machine, 57consumption, 175content-addressable, 595leak, 76, 77
Prolog, 681lifecycle, 76
memory management, see garbage col-lection
message, 504message-passing concurrency, see object,
active, see object, portmeta-interpreter, 667, 685meta-object protocol, see protocol, meta-
objectmethod
object, 21, 502wrapping, 522
methodology, see software developmentMeyer, Bertrand, 453, 495, 533Microsoft Corporation, 466, 689middle-out software development, 455mind of programmer
capabilities (atoms vs. names), 516difference list, 149language design trade-offs, 813order-determining concurrency, 277state (implicit vs. explicit), 416use of constraints, 279
minus sign (use of tilde ˜ ), 822Mnesia (Erlang database), 395mod(integer modulo) operation, 56, 823model
logic, 645model-based GUI design, 703modularity, xxxv, 315, 417, 462
encapsulated search, 638reengineering, 527relation to concurrency, 243, 319relational model, 673system decomposition, 460
module, 185, 224, 457Array , 439Atom, 826Browser , 228
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
884 INDEX
Char , 823, 824Compiler , 817Connection , 721, 737Dictionary , 440Distribution (supplement), 724Fault , 745, 749File (supplement), 214, 298, 571Finalize , 485Float , 823Int , 823List , 263, 393, 831Module , 227, 421, 459, 736, 818MyList (example), 225Number, 16, 56, 185, 823OS, 377, 618, 701, 708, 736ObjectSupport , 523Open, 571, 735Pickle , 219Property , 95, 258, 260QTk, 216, 690, 735Record , 828Remote , 260, 737Space , 666String , 826Thread , 260, 280Time , 309Tk , 712Tuple , 829Value , 334, 832Base, 226, 233compilation unit, 457dynamic linking, 290
failure, 334dynamic typing, 107importing, 227interface, 459library, 232resource, 735, 752specification, 224System, 226, 233
MOGUL (Mozart Global User Library),225
monad, xxxv, 327, 337monitor, 588, 600–608
condition variable, 607guarded method, 605implementation, 605
Java language, 625Java semantics, 601
monolithic function, 302monotonicity, 851
constraint programming, 772dataflow variable, 341, 578need predicate, 799need property, 288store, 785thread reduction, 243, 785, 786
Moore’s Law, 178Morrison, J. Paul, 261Mozart Consortium, xxxviii, xl, 108Mozart Programming System, 259
Browser tool, 4, 89displaying cyclic structures, 104lists, 830WaitQuiet operation, 800
cheap concurrency, 256Compiler Panel tool, 817Distribution Panel tool, 817Explorer tool, 817garbage collection, 79interactive interface, 3, 88, 817kernel languages, 846library modules, 233limited role of the compiler, 510Open Source license, xxxviiioverview, xxxviiiPanel tool, 817performance, 204, 387separate compilation, 461thread scheduler, 257uncaught exception, 95, 803
multi-agent systems (MAS), xxxvii, 370,584
multimedia, 179multiprocessor
cluster, 717shared-memory, 716
mutable store (for cells), 797Myriorama, 277
name, 206, 720, 795, 825, 849defining scope, 514distributed computing, 717fresh, 206
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 885
generation, 209name server, 411, 718Naur, Peter, 34needed variable, 288, 799negation as failure, 675nesting marker, 54, 85, 363, 373network awareness, 395, 729network transparency, 260, 395, 714neutral element, 188Newoperation, 501, 555NewActive operation, 564NewActiveExc operation, 569, 734NewArray operation, 439NewCell operation, 424NewDictionary operation, 440NewLock operation, 23, 591NewNameoperation, 206, 795, 825NewPort operation, 356NewStat operation, 731
resilient, 748Newton’s method for square roots, 122Newton, Isaac, 283nil , 830noise (electronic), 477non-strict evaluation, 336
Haskell, 328nonblocking operation, 338
receive (in Erlang), 402receive, 338send, 338stack, 585
noncompositional design, 465nondeterminism
choice statement, 633, 635, 778declarative concurrent model, 583don’t know, 325, 634introduction, 21limitation of declarative model, 319logic programming, 650observable, 22, 238, 319, 578, 581,
583, 584bounded buffer, 603Filter operation, 394lack of in Flavius Josephus prob-
lem, 567relation to exceptions, 332
relation to coroutines, 280
thread scheduler, 257nonvar operation (in Prolog), 673, 675normal order reduction, 336notify operation (in monitor), 600notifyAll operation (in monitor), 601NP-complete problems, 179number, 53, 821
O’Keefe, Richard, 113, 416, 681object, 421, 497, 549, 552
declarative, 431, 488, 575introduction, 19strong, 549
object code, 225object graph, 560object, active, 357, 563
defining behavior with a class, 564example, 564
object, port, 358, 421approaches to concurrency, 581Erlang, 570further reading, 590many-to-one communication, 358reactive, 359reasoning, 360sharing one thread, 385when to use, 584
object, stream, 261, 270–271, 419, 421,582
comparison with port object, 358Flavius Josephus problem, 567higher-order iteration, 262producer/consumer, 262transducer, 263
Ockham, William of, 31octal integer, 822Okasaki, Chris, 150, 178, 284, 335OLE (Object Linking and Embedding),
466OMG (Object Management Group), 466open distribution, 715, 717, 720open program, 205Open Source software, xxxviiioperating system, 211operational semantics, 40, 61, 647, 783–
814operator
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
886 INDEX
associativity, 36, 839infix, 54, 84, 187, 796, 828, 830, 832,
838mixfix, 827, 838postfix, 839precedence, 36, 838prefix, 838ternary, 841
OPI (Oz Programming Interface), 817optimistic scheduling, 612optimization, 179
avoid during development, 455combinatoric, 674compiler, 164eager execution, 308early error detection, 510first-argument indexing, 671memoization, 703monitor performance, 606object system, 552relational programming, 634short-circuit protocol, 567standard computer, 314thread priorities, 270
orelse operator, 84otherwise method, 506OTP (Ericsson Open Telecom Platform),
394overloading, 331Oz, Wizard of, 3ozc command, 232, 819
Panel tool, see Mozart Programming Sys-tem
Papert, Seymour, xxvii, 237paradigm, xxvii, xxxi, see computation
modeldeclarative, 32school of thought, xxx
parallelism, 241, 322importance of non-strictness, 337importance of worst-case complexi-
ty, 177parameter passing, 434–438
call by name, 437exercise, 489
call by need, 437
exercise, 490lazy evaluation, 438
call by reference, 59, 434Java, 561
call by value, 435Java, 561
call by value-result, 436call by variable, 435
parity, 16Parnas, David Lorge, xxxvi, 466parser, 34, 163–169
generic, 662gump tool, 41natural language, 654
partial termination, 247, 344, 806partial value, 47Pascal’s triangle, 6Pascal, Blaise, 7pass by ..., see parameter passingpattern matching
case statement, 8, 68function (in Erlang), 396Haskell, 327receive expression (in Erlang), 399reduction rule semantics, 787
pencil, xxxiiPentium III processor, 204, 475performance
cluster computing, 717competitive concurrency, 259constraint programming, 764Cray-1 supercomputer, 178declarative programming, 314dictionary, 204distributed stream, 730how to measure, 170lazy language, 295, 349low-cost PC, 178memoization, 27, 315mobile object, 730monitor, 606Mozart Programming System, 204,
387price of concurrency, 345role of optimization, 179, 270, 308role of parallelism, 241, 322transitive closure, 474
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.
INDEX 887
“Word of Mouth” simulation, 491permanent failure, 745permutations, 4persistence
data structure, 152, 303database, 667Erlang, 395transaction, 609
personal computer, 6, 178, 256, 259, 294,309
pessimistic scheduling, 612Phidani Software, 654π calculus, xxxi, 43, 55, 807pipeline, 263pixel, 562placeholder
dataflow variable, 88future (in Multilisp), 342GUI design, 696, 712
planning, 633Plotkin, Gordon, 783point, 560POLA (Principle of Least Authority),
212polymorphism, 108, 466, 498
Haskell, 330Ponsard, Christophe, 551port (explicit state), 356–357, 725, 850portal, 481potential function, 178predicate calculus, 645preemption, 257preprocessor, 319
DCG (in Prolog), 662design patterns, 542extended DCG (in Prolog), 143fallacy of, 319
presentation model, 703principle
abstraction, 418avoid changing interfaces, 462avoid premature optimization, 179,
455balance planning and refactoring, 455centralized first, distributed later,
751compartmentalize responsibility, 454
creative extension, xxviii, 846decisions at right level, 464declarative concurrency, 247, 286document component interfaces, 454documented violations, 464eager default, lazy declared, 335either simple or wrong, xlencapsulate design decisions, 462enriching control (in logic program-
ming), 653error confinement, 91“everything should be an object”,
548exploit ADT uniformity, 549form mirrors content, 551freely exchange knowledge, 454layered language design, 852least authority, 212least privilege, 212minimize dependencies, 463minimize indirections, 463model independence, 460more is not better or worse, just dif-
ferent, xxxivneed to know, 212pay only on use, 631predictable dependencies, 463run time is all there is, 510separation of concerns, 574stateful component with declarative
behavior, 425syntax stability, 655system decomposition, 213use ADTs everywhere, 549working software keeps working, 60,
463, 728private scope, 513, 514
C++ and Java sense, 514Smalltalk and Oz sense, 513
probabilityExponential distribution, 480Gaussian distribution, 480Normal distribution, 480Uniform distribution, 478unique name generation, 210
proc statement, 66, 795procedure
Copyright c© 2001-3 by P. Van Roy and S. Haridi. All rights reserved.