Skip to main content Accessibility help
  • Get access
    Check if you have access via personal or institutional login
  • Cited by 1
  • Print publication year: 2009
  • Online publication date: August 2010

5 - Kahn networks at the dawn of functional programming



The evolution of programming languages involves isolating and describing abstractions that allow us to solve problems more elegantly, efficiently, and reliably, and then providing appropriate linguistic support for these abstractions. Ideally, a new abstraction can be described precisely with a mathematical semantics, and the semantics leads to logical techniques for reasoning about programs that use the abstraction. Gilles Kahn's early work on stream processing networks is a beautiful example of this process at work.

Gilles began thinking about parallel graph programs at Stanford, and he developed his ideas in a series of papers starting in 1971: and. Gilles' original motivation was to provide a formal model for reasoning about aspects of operating systems programming, based on early data flow models of computation. But the model he developed turned out to be of much more general interest, both in terms of program architecture and in terms of semantics. During his Edinburgh visit in 1975–76, Gilles and I collaborated on a prototype implementation of the model that allowed further development and experimentation, reported in. By 1976 it was clear that his model, while inspired by early data flow research, was also closely connected to several other developments, including coroutines, Landin's notion of streams, and the then emerging lazy functional languages.

Related content

Powered by UNSILO
[1]H., Abelson, G. J., Sussman, and J., Sussman. Structure and Interpretation of Computer Programs. McGraw-Hill, New York, 1985.
[2]S., Abramsky. A generalized Kahn principle for abstract asynchronous networks. In Mathematical Foundations of Programming Semantics, 5th International Conference, pp. 1–21. Springer-Verlag, 1989.
[3]D. A., Adams. A Computation Model with Data Flow Sequencing. PhD thesis, Computer Science Dept, Stanford University, December 1968. Technical Report CS-117.
[4]A., Appel and D. B., MacQueen. Standard ml of new jersey. In J., Maluszynski and M., Wirsing (eds) Programming Language Implementation and Logic Programming, Proceedings of the 3rd International Symposium, volume 528 Lecture Notes in Computer Science, pp. 1–13. Springer Verlag, 1991.
[5]A. E., Ashcroft. Program proving without tears. In G., Huet and G., Kahn (eds) Symposium on Proving and Improving Programs, pp. 99–111. INRIA Rocquencourt, July 1975.
[6]A. E., Ashcroft and W. W., Wadge. Lucid – a formal system for writing and proving programs. SIAM J. Comput., 5:519–526, 1976.
[7]A. E., Ashcroft and W. W., Wadge. Lucid: Scope Structures and Defined Functions. Technical Report Rep. CS-76-22, Computer Science Dept., University of Waterloo, 1976.
[8]A. E., Ashcroft and W. W., Wadge. Lucid, a nonprocedural language with iteration. Commun. ACM, 20(7):519–526, 1977.
[9]A. E., Ashcroft and W. W., Wadge. Structured Lucid. Technical Report CS-79-21, Computer Science Department, University of Waterloo, 1979.
[10]A. E., Ashcroft and W. W., Wadge. Lucid, the Dataflow Programming Language. Number 22 in APIC Studies in Data Processing. Academic Press, 1985.
[11]J. L., Baer. A survey of some theoretical aspects of multiprocessing. ACM Comput. Surv., 5(1):31–80, 1973.
[12]G., Berry and P.-L., Currien. Sequential algorithms on concrete data structures. Theoret. Comput. Sci., 20:265–322, 1982.
[13]G., Berry and P.-L., Currien. The kernel of the applicative language cds: theory and practice. In Proc. French-US Seminar on the Applications of Algebra to Language Definition and Compilation, pp. 35–87. Cambridge University Press, 1985.
[14]S., Brookes and S., Geva. Continuous functions and parallel algorithms on concrete data structures. In Proc. 7th International Conf. on Mathematical Foundations of Programming Semantics, volume 598 in Lecture Notes in Computer Science, 1991.
[15]S., Brookes. Historical introduction to “concrete domains” by G. Kahn and G. D. Plotkin. Theoret. Comput. Sci., 121(1–2):179–186, 1993.
[16]W. H., Burge. Recursive Programming Techniques. Addison Wesley, 1975.
[17]W. H., Burge. Stream processing functions. IBM J. Res. Develop., pp. 12–25, 1975.
[18]R. M., Burstall. Design considerations for a functional programming language. In Infotech State of the Art Conference: The Software Revolution, Copenhagen, October 1977.
[19]R. M., Burstall, J. S., Collins, and R. J., Popplestone. Programming in POP-2. Edinburgh University Press, 1977.
[20]R. M., Burstall and J., Darlington. A tranformation system for developing recursive programs. J. ACM, 24(1), 1977.
[21]R. M., Burstall, D. B., MacQueen, and D., Sannella. Hope: An experimental applicative language. In Conference Record of the 1980 Lisp Conference, pp. 136–143, August 1980. Stanford.
[22]P., Caspi, D., Pilaud, N., Halbwachs and J. A., Plaice. LUSTRE: a declarative language for real-time programming. In POPL '87: Proceedings of the 14th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages, pp. 178–188, New York, NY, USA, 1987. ACM Press.
[23]P., Caspi and M., Pouzet. Synchronous Kahn networks. In ICFP '96: Proceedings of the first ACM SIGPLAN International Conference on Functional Programming, pp. 226–238, New York, NY, USA, 1996. ACM Press.
[24]A., Cohen, M., Duranton, C., Eisenbeis, C., Pagetti, F., Plateau and M., Pouzet. N-synchronous Kahn networks: a relaxed model of synchrony for real-time systems. In POPL '06: Conference Record of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp. 180–193, New York, NY, USA, 2006. ACM Press.
[25]M. E., Conway. Design of a separable transition-diagram compiler. Commun. ACM, 6(7):396–408, 1963.
[26]B., Courcelle, G., Kahn and J., Vuillemin. Algorithmes d'equivalence et de reduction a des expressions minimales dans une classe d'equations recursives simples. In Proceedings of the 2nd Colloquium on Automata, Languages and Programming, pp. 200–213, London, UK. Springer-Verlag, 1974.
[27]J., Darlington and M., Reeve. Alice a multi-processor reduction machine for the parallel evaluation cf applicative languages. In FPCA '81: Proceedings of the 1981 Conference on Functional Programming Languages and Computer Architecture, pp. 65–76, New York, NY, USA, 1981. ACM Press.
[28]J., Davies. POP-10 User's Manual. Technical Report CS R25, University of Western Ontario Computer Science Dept., 1976.
[29]J. B., Dennis. Programming generality, parallelism, and computer architecture. In Information Processing 68, pp. 484–492. North Holland, 1969.
[30]J. B., Dennis. First version of a data flow procedure language. In Programming Symposium, Proceedings Colloque sur la Programmation, volume 19 of Lecture Notes in Computer Science, pp. 362–376, Springer-Verlag, 1974.
[31]J. B., Dennis, J. B., Fosseen and J. P., Linderman. Data flow schemas. In G., Goos and J., Hartmanis (eds), International Symposium on Theoretical Programming, volume 5, Lecture Notes in Computer Science, pp. 187–216, Springer-Verlag, 1974.
[32]J. B., Dennis. A language design for structured concurrency. In J. H., Williams and D. A., Fisher (eds), Proceedings of the DoD Sponsored Workshop on Design and Implementation of Programming Languages, volume 54, Lecture Notes in Computer Science, pp. 231–242. Springer-Verlag, 1977.
[33]J. B., Dennis. Stream Data Types for Signal Processing. Computation Structures Group Memo 36, MIT LCS, October 1994.
[34]J. B., Dennis and D. P., Misunas. A preliminary architecture for a basic data-flow processor. In ISCA '75: Proceedings of the 2nd Annual Symposium on Computer Architecture, pp. 126–132, New York, NY, USA, 1975. ACM Press.
[35]D. P., Friedman and D. S., Wise. Cons should not evaluate its arguments. In S., Michaelson and R., Milner (eds), Automata, Languages and Programming, pp. 257–284. Edinburgh University Press, 1976.
[36]M. J. C., Gordon, A. J. R. G., Milner, L., Morris, M. C., Newey and C. P., Wadsworth. A metalanguage for interactive proof in LCF. In Fifth ACM Symposium on Principles of Programming Languages, New York, 1978. ACM Press.
[37]J. R., Gurd, C. C., Kirkham and I., Watson. The Manchester prototype dataflow computer. Commun. ACM, 28(1):34–52, 1985.
[38]N., Halbwachs, P., Caspi, P., Raymond and D., Pilaud. The synchronous dataflow programming language LUSTRE. Proceedings of the IEEE, 79(9):1305–1320, Sept. 1991.
[39]E., Harold. Java I/O, 2nd Edition. O'Reilly Media, 2006.
[40]P., Henderson and J. H., Morris. A lazy evaluator. In Third ACM Symposium on Principles of Programming Languages, pp. 123–42, New York, 1976. ACM Press.
[41]C., Hewitt, P., Bishop, R., Steiger, I., Greif, B., Smith, T., Matson and R., Hale. Behavioral semantics of nonrecursive control structures. In Programming Symposium, Proceedings Colloque sur la Programmation, volume 19, Lecture Notes in Computer Science, pp. 385–407. Springer-Verlag, 1974.
[42]G., Kahn and G. D., Plotkin. Domaines concrets. INRIA Rapport 336, INRIA, 1978.
[43]G., Kahn and G. D., Plotkin. Concrete domains. Theoret. Comput. Sci., 121(1–2):187–277, 1993.
[44]G., Kahn. An approach to systems correctness. In SOSP '71: Proceedings of the Third ACM Symposium on Operating Systems Principles, pp. 86–94, New York, NY, USA, 1971. ACM Press.
[45]G., Kahn. A Preliminary Theory for Parallel Programs. Technical Report Rapport Laboria no. 6, IRIA Rocquencourt, January 1973.
[46]G., Kahn. The semantics of a simple language for parallel programming. In Information Processing 74, Proceedings of the IFIP Congress 74, pp. 471–475. ElsevierNorth Holland, 1974.
[47]G., Kahn and D. B., MacQueen. Coroutines and networks of parallel processes. In B., Gilchrist (ed.), Information Processing 77, pp. 993–998. North Holland, 1977.
[48]G., Kahn and G., Plotkin. Concrete Data-types. first draft manuscript, December 1975.
[49]R. M., Karp and R. E., Miller. Properties of a model for parallel computations: Determinacy, termination, queueing. SIAM J. Appl. Maths, 14(6):1390–1411, 1966.
[50]J., Kelly, C., Lochbaum and V., Vyssotsky. A block diagram compiler. Bell System Tech. J., 40(3):669–676, May 1961.
[51]S., Kleene. Introduction to Metamathematics. Van Nostrand, 1952.
[52]G., Kopec. A high-level block-diagram signal processing language. In IEEE International Conference on Acoustics, Speech, and Signal Processing, pp. 684–687, 1979.
[53]P. J., Landin. A correspondence between ALGOL 60 and Church's lambda-notation: Part I. Commun. ACM, 8(2):89–101, 1965.
[54]D. C., Luckham, D. M. R., Park and M. S., Paterson. On formalized computer programs. J. System Sci., 4(3):220–249, 1970.
[55]D. B., MacQueen, P., Wadler and W., Taha. How to add laziness to a strict language without even being odd. In Proceedings of the 1998 ACM Workshop on ML, pp. 24–30, September 1998. Baltimore, MD.
[56]J., McCarthy, P. W., Abrahams, D. J., Edwards, T. P., Hart and M. E., Levin. LISP 1.5 Programmer's Manual. MIT Press, 1962.
[57]J., McCarthy. Towards a mathematical science of computation. In Proceedings of the IFIP Congress 1962, pp. 21–28. North-Holland, 1962.
[58]J., McCarthy. A basis of a mathematical theory of computation. In P., Braffort and D., Hirshberg (eds), Computer Programming and Formal Systems, pp. 33–70. North-Holland, 1963.
[59]M. D., McIlroy. Coroutines. unpublished note, May 1968.
[60]M. D., McIlroy. Squinting at power series. Software Pract. Exper., 20:661–683, 1990.
[61]M. D., McIlroy. Power Series as Lazy Streams. Technical Report BL011276-970313-02TMS, Bell Laboratories, Lucent Technologies, 1997.
[62]M. D., McIlroy. Power series, power serious. J. Funct. Program., 9(3):325–337, May 1999.
[63]R., Milner. Implementation and applications of Scott's logic for computable functions. In Proceedings of ACM Conference on Proving Assertions About Programs, pp. 1–6, New York, NY, USA, 1972. ACM.
[64]R., Milner. Processes: A mathematical model of computing agents. In Proceedings of the Colloquium in Mathematical Logic, pp. 157–173. North-Holland, 1973.
[65]R., Milner and R., Weyrauch. Proving compiler correctness in a mechanized logic. In Machine Intelligence 7. Edinburgh University Press, 1972.
[66]S., Peyton-Jones (ed.) Haskell98, Languages and Libraries, The Revised Report. Cambridge University Press, 2003.
[67]E. D., Reilly. Milestones in Computer Science and Information Technology. Greenwood Press, 2003.
[68]J., Reppy and E., Gansner. The Standard ML Basis Library. Cambridge University Press, 2006.
[69]D. M., Ritchie. A stream input-output system. AT&T Bell Laboratories Tech. J., 63(8):1897–1910, 1984.
[70]D. M., Ritchie and K., Thompson. The UNIX time-sharing system. Commun. ACM, 17(7):365–375, 1974.
[71]J. E., Rodriguez. A Graph Model for Parallel Computations. Technical Report TR-64, MIT Project MAC, September 1969.
[72]D., Scott. Outline of a Mathematical Theory of Computation. Technical Report Technical Monograph PRG-2, Programming Research Group, Oxford University, November 1970.
[73]D., Scott. Continuous Lattices. Technical Report Technical Monograph PRG-7, Programming Research Group, Oxford University, August 1971.
[74]D., Scott. Data types as lattices. SIAM J. Comput., 5:522–587, 1976.
[75]D., Seror. D. C. P. L: A Distributed Control Programming Language. PhD thesis, University of Utah, 1970.
[76]S. F., Smith. A computational induction principle. unpublished note, July 1991.
[77]D. A., Turner. An overview of Miranda. SIGPLAN Notices, 21, 1986.
[78]D. A., Turner. SASL Language Manual. Technical report, St. Andrews University, Department of Computational Science, December 1976.
[79]D. A., Turner. The semantic elegance of applicative languages. In Proceedings of the 1981 Conf. on Functional Programming and Computer Architecture, 1981.
[80]J., Vuillemin. Correct and optimal implementations of recursion in a simple programming language. In STOC '73: Proceedings of the Fifth Annual ACM Symposium on Theory of Computing, pp. 224–239, New York, NY, USA, 1973. ACM Press.
[81]J., Vuillemin. Correct and optimal implementations of recursion in a simple programming language. J. Comput. System Sci., 9(3):332–354, December 1974.
[82]C. P., Wadsworth. Semantics and Pragmatics of the Lambda-calculus. PhD thesis, Oxford University, 1971.
[83]Z., Wan and P., Hudak. Functional Reactive Programming from first principles. In Proceedings of the ACM SIGPLAN'00 Conference on Programming Language Design and Implementation (PLDI'00), 2000.
[84]E., Wiedmer. Exaktes rechnen mit reellen zahlen. Technical Report Bericht no. 20, Eidgenössische Technische Hocchschule, Zurich, July 1976.
[85]G., Winskel. Events in Computation. PhD thesis, Edinburgh University, 1981.