FACILE: A symmetric integration of concurrent and functional programming

  • Alessandro Giacalone
  • Prateek Mishra
  • Sanjiva Prasad
Part of the Lecture Notes in Computer Science book series (LNCS, volume 352)


FACILE is a language which symmetrically integrates concurrent and functional programming. It is a typed and statically scoped language. The language supports both function and process abstractions. Recursive functions may be defined and used within processes, and processes can be dynamically created during expression evaluation. Inter-process communication is by hand-shaking on typed channels. Typed channels, functions and process scripts are first-class values.

In this paper, we present the “core” syntax of FACILE. We then describe an abstract machine C-FAM which executes concurrent processes evaluating functional style expressions. The operational definition of FACILE is presented by giving compilation rules from FACILE to C-FAM instructions, and execution rules for the abstract machine. An overview of the FACILE environment is also discussed.


Functional Programming Concurrent Programming Abstract Machine Functional Language Abstract Data Type 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. [ADA83]
    ADA Reference Manual. 1983. In Ellis Horowitz, “Programming Languages: A Grand Tour”.Google Scholar
  2. [AR87]
    Egidio Astesiano and Gianna Regio. SMoLCS-Driven Concurrent Calculi. In LNCS 249: TAPSOFT '87, pages 169–201, Springer-Verlag, Berlin, 1987.Google Scholar
  3. [AS85]
    S. Abramsky and R. Sykes. Secd-m: a Virtual Machine for Applicative Programming. In Jean-Pierre Jouannaud, editor, LNCS 201: Functional Programming Languages and Computer Architecture, pages 81–98, Springer-Verlag, Berlin, September 1985.Google Scholar
  4. [Bac78]
    John Backus. Can Programming Be Liberated from the von Neumann Style ? A Functional Style and Its Algebra of Programs. Communications of the ACM, 21(8):613–641, August 1978.CrossRefGoogle Scholar
  5. [BHR84]
    S.D. Brookes, C.A.R. Hoare, and A.W. Roscoe. A Theory of Communicating Sequential Processes. Journal of the ACM, 31(3):560–599, July 1984.CrossRefGoogle Scholar
  6. [BO80]
    D. Bjorner and O.N. Oest, editors. LNCS 98: Towards a Formal Description of ADA. Lecture Notes in Computer Science, Springer-Verlag, Berlin, 1980.Google Scholar
  7. [Car83]
    Luca Cardelli. The Functional Abstract Machine. Technical Report Technical Report TR-107, Bell Labs, 1983.Google Scholar
  8. [Car85]
    Luca Cardelli. An Implementation Model of Rendezvous Communication. In LNCS 197: Proceedings of the Seminar on Concurrency, pages 449–457, Springer-Verlag, Berlin, 1985.Google Scholar
  9. [Car86a]
    Luca Cardelli. Amber. In Cousineau, Curien, and Robinet, editors, LNCS 242: Combinators and Functional Programming Languages, pages 21–47, Springer-Verlag, 1986.Google Scholar
  10. [Car86b]
    Luca Cardelli. The Amber Machine. In Cousineau, Curien, and Robinet, editors, LNCS 242: Combinators and Functional Programming Languages, pages 48–70, Springer-Verlag, 1986.Google Scholar
  11. [CCM85]
    G. Cousineau, P. L. Curien, and M. Mauny. The Categorical Abstract Machine. In Proceedings of the IFIP Conference on Functional Programming Languages and Computer Architecture, IFIP, September 1985.Google Scholar
  12. [CHI85]
    CHILL Language Definition: CCITT Recommendation Z. 200. volume 5 number 1 edition, January 1985.Google Scholar
  13. [Gia87]
    Alessandro Giacalone. A Concurrent Abstract Machine and an Interactive Environment for Simulating Concurrent Systems. Technical Report TR 87/13, Dept. of Computer Science, SUNY at Stony Brook, December 1987.Google Scholar
  14. [GS88]
    Alessandro Giacalone and Scott A. Smolka. Integrated Environments for Formally Well-Founded Design and Simulation of Concurrent Systems: A Non-Procedural Approach. IEEE Transactions on Software Engineering, June 1988.Google Scholar
  15. [Hen80]
    Peter Henderson. Functional Programming: Application and Implementation. Prentice Hall International, London, 1980.Google Scholar
  16. [Hen82]
    Peter Henderson. Purely Functional Operating Systems. In Darlington, Henderson, and Turner, editors, Functional Programming and its applications, pages 177–192, Cambridge University Press, 1982.Google Scholar
  17. [Hen88]
    Matthew Hennessy. Algebraic Theory of Processes. MIT Press, 1988.Google Scholar
  18. [Hoa85]
    C.A.R. Hoare. Communicating Sequential Processes. Series in Computer Science, Prentice-Hall, 1985.Google Scholar
  19. [INM84]
    occam Programming Manual. 1984. Prentice-Hall International Series in Computer Science, C.A.R. Hoare (Series Editor).Google Scholar
  20. [Kah74]
    Gilles Kahn. The Semantics of a Simple Language for Parallel Programming. In Proceedings of the IFIP Conference, pages 471–475, IFIP, 1974.Google Scholar
  21. [Kel78]
    Robert Keller. Denotational Semantics for Parallel Programs with Indeterminate Operators. In E.J. Neuhold, editor, Formal Descriptions of Programming Concepts, pages 337–366, North-Holland Publishing Company, 1978.Google Scholar
  22. [KM76]
    Gilles Kahn and David MacQueen. Coroutines and Networks of Parallel Processes. IRIA Report 202, IRIA, November 1976.Google Scholar
  23. [KS82]
    J. R. Kennaway and M. R. Sleep. Expressions as Processes. In Conference Record of the 1982 ACM Symposium on LISP and Functional Programming, pages 21–28, ACM, August 1982.Google Scholar
  24. [Lan64]
    P.J. Landin. The Mechanical Evaluation of Expressions. Computer Journal, 6(4):308–320, 1964.Google Scholar
  25. [Mil80]
    Robin Milner. A Calculus of Communicating Systems. Volume 92 of Lecture Notes in Computer Science, Springer-Verlag, 1980.Google Scholar
  26. [Mil84]
    Robin Milner. A proposal for Standard ML. Internal Report CSR-157-83, University of Edinburgh, 1984.Google Scholar
  27. [Nie88]
    Flemming Nielson. The Typed λ-Calculus with First-Class Processes. June 1988. Extended Abstract.Google Scholar
  28. [Plo81]
    G.D. Plotkin. A Structural Approach to Operational Semantics. Technical Report DAIMI FN-19, Aarhus University, September 1981.Google Scholar
  29. [Plo82]
    G.D. Plotkin. An Operational Semantics for CSP. Technical Report CSR-114-82, University of Edinburgh, May 1982.Google Scholar
  30. [Rep88]
    J.H. Reppy. Synchronous Operations as First-class Values. In Proceedings of the SIGPLAN Conference on Programming Language Design and Implementation, pages 250–259, ACM SIGPLAN, June 1988.Google Scholar
  31. [SS87]
    Scott A. Smolka and Robert E. Strom. A CCS semantics for NIL. IBM Journal of Research and Development, 31(5):556–570, September 1987.Google Scholar
  32. [Wil85]
    William Clinger et al. The Revised Revised Report on Scheme, or An UnCommon Lisp. AI Memo 848, MIT, Aug 1985.Google Scholar
  33. [Wir82]
    Niklaus Wirth. Programming in MODULA-2. Texts and Monographs in Computer Science, Springer-Verlag, second, corrected edition, 1982.Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 1989

Authors and Affiliations

  • Alessandro Giacalone
    • 1
  • Prateek Mishra
    • 1
  • Sanjiva Prasad
    • 1
  1. 1.Department of Computer ScienceThe State University of New York at Stony BrookStony Brook

Personalised recommendations