Convergence in Language Design: A Case of Lightning Striking Four Times in the Same Place

  • Peter Van Roy
Part of the Lecture Notes in Computer Science book series (LNCS, volume 3945)


What will a definitive programming language look like? By definitive language I mean a programming language that gives good solutions at its level of abstraction, allowing computer science researchers to move on and work at higher levels. Given the evolution of computer science as a field with a rising level of abstraction, it is my belief that a small set of definitive languages will eventually exist. But how can we learn something about this set, considering that many basic questions about languages have not yet been settled? In this paper, I give some tentative conclusions about one definitive language. I present four case studies of substantial research projects that tackle important problems in four quite different areas: fault-tolerant programming, secure distributed programming, network-transparent distributed programming, and teaching programming as a unified discipline. All four projects had to think about language design. In this paper, I summarize the reasons why each project designed the language it did. It turns out that all four languages have a common structure. They can be seen as layered, with the following four layers in this order: a strict functional core, then deterministic concurrency, then message-passing concurrency, and finally shared-state concurrency (usually with transactions). This confirms the importance of functional programming and message passing as important defaults; however, global mutable state is also seen as an essential ingredient.


Programming Language Mutable State Language Design Concurrent Programming Functional Language 
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.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Agorics, Inc. (2004),
  2. 2.
    Abelson, H., Sussman, G.J., Sussman, J.: Structure and Interpretation of Computer Programs, 2nd edn. MIT Press, Cambridge (1996)MATHGoogle Scholar
  3. 3.
    Al-Metwally, M.: Design and Implementation of a Fault-Tolerant Transactional Object Store. PhD thesis, Al-Azhar University, Cairo, Egypt (December 2003)Google Scholar
  4. 4.
    Armstrong, J.: Making reliable distributed systems in the presence of software errors. PhD thesis, Royal Institute of Technology (KTH), Kista, Sweden (November 2003)Google Scholar
  5. 5.
    Armstrong, J., Williams, M., Wikström, C., Virding, R.: Concurrent Programming in Erlang. Prentice-Hall, Englewood Cliffs (1996)MATHGoogle Scholar
  6. 6.
    Cardelli, L.: A language with distributed scope. In: Principles of Programming Languages (POPL), San Francisco, CA, pp. 286–297. ACM Press, New York (1995)Google Scholar
  7. 7.
    Dean, J., Ghemawat, S.: MapReduce: Simplified data processing on large clusters. In: 6th Symposium on Operating Systems Design and Implementation (OSDI 2004), December 2004, pp. 137–150 (2004)Google Scholar
  8. 8.
    Ericsson: Open Telecom Platform—User’s Guide, Reference Manual, Installation Guide, OS Specific Parts. In: Telefonaktiebolaget LM Ericsson, Stockholm, Sweden (1996)Google Scholar
  9. 9.
    Felleisen, M.: On the expressive power of programming languages. In: Jones, N.D. (ed.) ESOP 1990. LNCS, vol. 432, pp. 134–151. Springer, Heidelberg (1990)CrossRefGoogle Scholar
  10. 10.
    Hardy, N.: KeyKOS architecture. ACM SIGOPS Operating Systems Review 19, 8–25 (1985)CrossRefGoogle Scholar
  11. 11.
    Haridi, S., Roy, P.V., Brand, P., Mehl, M., Scheidhauer, R., Smolka, G.: Efficient logic variables for distributed computing. ACM Transactions on Programming Languages and Systems 21(3), 569–626 (1999)CrossRefGoogle Scholar
  12. 12.
    Haridi, S., Roy, P.V., Brand, P., Schulte, C.: Programming languages for distributed applications. New Generation Computing 16(3), 223–261 (1998)CrossRefGoogle Scholar
  13. 13.
    Hewitt, C.: Viewing control structures as patterns of passing messages. Journal of Artificial Intelligence 8(3), 323–364 (1977)CrossRefGoogle Scholar
  14. 14.
    Hewitt, C., Bishop, P., Steiger, R.: A universal modular ACTOR formalism for artificial intelligence. In: 3rd International Joint Conference on Artificial Intelligence (IJCAI), August 1973, pp. 235–245 (1973)Google Scholar
  15. 15.
    Holt, R.C., Wortman, D.B., Barnard, D.T., Cordy, J.R.: SP/k: A system for teaching computer programming. Communications of the ACM 20(5), 301–309 (1977)CrossRefGoogle Scholar
  16. 16.
    Janson, S., Montelius, J., Haridi, S.: Ports for Objects in Concurrent Logic Programs. In: Agha, G., Wegner, P., Yonezawa, A. (eds.) Trends in Object-Based Concurrent Computing, pp. 211–231. MIT Press, Cambridge (1993)Google Scholar
  17. 17.
    Lambda the Ultimate discussion. State and modularity (October 2003),
  18. 18.
    Lea, D.: Concurrent Programming in Java, 2nd edn. Addison-Wesley, Reading (2000)MATHGoogle Scholar
  19. 19.
    Miller, M.S., Morningstar, C., Frantz, B.: Capability-based financial instruments. In: Frankel, Y. (ed.) FC 2000. LNCS, vol. 1962, pp. 349–378. Springer, Heidelberg (2001)CrossRefGoogle Scholar
  20. 20.
    Miller, M.S., Shapiro, J.: Concurrency among strangers. In: De Nicola, R., Sangiorgi, D. (eds.) TGC 2005. LNCS, vol. 3705, pp. 195–229. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  21. 21.
    Miller, M.S., Stiegler, M., Close, T., Frantz, B., Yee, K.-P., Morningstar, C., Shapiro, J., Hardy, N., Tribble, E.D., Barnes, D., Bornstien, D., Wilcox-O’Hearn, B., Stanley, T., Reid, K., Darius Bacon, E.: Open source distributed capabilities (2001), Available at
  22. 22.
    Morrison, J.P.: Flow-Based Programming: A New Approach to Application Development. Van Nostrand Reinhold, New York (1994)MATHGoogle Scholar
  23. 23.
    Shapiro, E.: The family of concurrent logic programming languages. ACM Computing Surveys 21(3), 413–510 (1989)CrossRefGoogle Scholar
  24. 24.
    Spiessens, F., Van Roy, P.: The Oz-E project: Design guidelines for a secure multiparadigm programming language. In: Van Roy, P. (ed.) MOZ 2004. LNCS, vol. 3389, pp. 21–40. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  25. 25.
    Stiegler, M.: The SkyNet virus: Why it is unstoppable; How to stop it. Talk available,
  26. 26.
    Van Roy, P., Haridi, S.: Concepts, Techniques, and Models of Computer Programming. MIT Press, Cambridge (2004)Google Scholar
  27. 27.
    Van Roy, P., Haridi, S., Brand, P., Smolka, G., Mehl, M., Scheidhauer, R.: Mobile objects in Distributed Oz. ACM Transactions on Programming Languages and Systems 19(5), 804–851 (1997)CrossRefGoogle Scholar
  28. 28.
    Waldo, J., Wyant, G., Wollrath, A., Kendall, S.C.: A note on distributed computing. In: Second International Workshop on Mobile Object Systems– Towards the Programmable Internet, July 1996, pp. 49–64 (1996); Originally published at Sun Microsystems Laboratories in 1994Google Scholar
  29. 29.
    Wiger, U.: Four-fold increase in productivity and quality – industrial-strengh functional programming in telecom-class products. In: Proceedings of the 2001 Workshop on Formal Design of Safety Critical Embedded Systems (2001)Google Scholar
  30. 30.
    Wikipedia, the free encyclopedia. Entry “virtual economy” (January 2006),

Copyright information

© Springer-Verlag Berlin Heidelberg 2006

Authors and Affiliations

  • Peter Van Roy
    • 1
  1. 1.Université catholique de LouvainLouvain-la-NeuveBelgium

Personalised recommendations