Skip to main content

Programming language impact on the development of distributed systems

Abstract

Programming languages have long impacted the development of distributed systems. While much middleware and distributed systems code continues to be developed today using mainstream languages such as Java and C++, several forces have recently combined to drive a renewed interest in other programming languages. The result of these forces has been an increase in the use of programming languages such as Erlang, Scala, Haskell, and Clojure that allow programming at a higher level of abstraction affording better modularity, enhanced speed of development, and added power of reasoning about systems being developed. Such languages can also be used to develop embedded domain specific languages that can expressively and succinctly model issues inherent in distributed systems including concurrency, parallelism, and fault tolerance. In this paper, we first present a history of programming languages and distributed systems, and then explore several alternative languages along with modern systems built using them. We focus on language and application features, how problems of distribution are addressed, concurrency issues, code brevity, extensibility, and maintenance concerns. Finally, we speculate about the possible influences today’s alternative programming languages could have on the future of middleware and distributed systems development.

References

  1. 1.

    White JE (1975) RFC 707. http://tools.ietf.org/html/rfc707

  2. 2.

    Nelson BJ (1981) Remote procedure call. PhD Dissertation, Carnegie Mellon Univ, Pittsburgh, PA, USA. AAI8204168

  3. 3.

    Liskov B (1985) The Argus language and system. In: Paul M, Siegert HJ (eds) Distributed systems—methods and tools for specification, Lecture notes in computer science, vol 190. Springer, Berlin, pp 343–430

    Google Scholar 

  4. 4.

    Almes G, Black A, Lazowska E, Noe J (1985) The Eden system: a technical review. IEEE Trans Softw Eng SE-11(1):43–59

    Article  Google Scholar 

  5. 5.

    Black A, Hutchinson N, Jul E, Levy H, Carter L (1987) Distribution and abstract types in Emerald. IEEE Trans Softw Eng SE-13(1):65–76

    Article  Google Scholar 

  6. 6.

    Zahn L, Dineen T, Leach P, Martin E, Mishkin N, Pato J, Wyant G (1990) Network computing architecture. Prentice-Hall, New York

    Google Scholar 

  7. 7.

    Sun Microsystems (1988) RPC: remote procedure call protocol specification. Technical Report RFC-1057, Sun Microsystems, Inc, June

  8. 8.

    Object Management Group (1991) The common object request broker: architecture and specification (CORBA). OMG document number 91-12-1

  9. 9.

    Waldo J, Wyant G, Wollrath A, Kendall S (1994) A note on distributed computing. Technical Report SMLI TR-94-29, Sun Microsystems Laboratories, Inc

  10. 10.

    Cox BJ (1991) Object oriented programming: an evolutionary approach. Addison Wesley, Reading

    Google Scholar 

  11. 11.

    NeXT Computer, Inc (1993) Object-oriented programming and the objective C language. Addison Wesley, Reading

    Google Scholar 

  12. 12.

    Gosling J, McGilton H (1995) The Java language environment—a white paper

  13. 13.

    Java remote method invocation over IIOP. http://en.wikipedia.org/wiki/RMI-IIOP

  14. 14.

    Let it crash. http://c2.com/cgi/wiki?LetItCrash

  15. 15.

    Hewitt C, Bishop P, Steiger R (1973) A universal modular ACTOR formalism for artificial intelligence. In: Proceedings of the 3rd international joint conference on artificial intelligence (IJCAI’73). Morgan Kaufmann, San Francisco, pp 235–245

    Google Scholar 

  16. 16.

    http://www.cs.berkeley.edu/~matei/spark/

  17. 17.

    Finagle, implementing asynchronous clients and servers. http://twitter.github.com/finagle/

  18. 18.

    JBoss Netty, the Java NIO client server framework. http://www.jboss.org/netty

  19. 19.

    Akka—simpler concurrency. http://akka.io

  20. 20.

    Erlang programming language. http://www.erlang.org/

  21. 21.

    A taste of 2.8: continuations. http://www.scala-lang.org/node/2096

  22. 22.

    The Mozart programming system. http://www.mozart-oz.org

  23. 23.

    Agents and asynchronous actions. http://clojure.org/agents

  24. 24.

    Software transactional memory. http://dl.acm.org/citation.cfm?id=224987

  25. 25.

    Erjang. https://github.com/trifork/erjang/wiki

  26. 26.

    Ghosh D (2010) DSLs in action. Manning, Shelter Island

    Google Scholar 

  27. 27.

    Richardson L, Ruby S (2007) Restful web services. O’Reilly, Sebastopol

    Google Scholar 

Download references

Author information

Affiliations

Authors

Corresponding author

Correspondence to Steve Vinoski.

Rights and permissions

Reprints and Permissions

About this article

Cite this article

Ghosh, D., Sheehy, J., Thorup, K.K. et al. Programming language impact on the development of distributed systems. J Internet Serv Appl 3, 23–30 (2012). https://doi.org/10.1007/s13174-011-0042-y

Download citation

Keywords

  • Distributed systems
  • Middleware
  • Erlang
  • Scala
  • RPC
  • Java
  • C++
  • Interoperability
  • Portability
  • Programming languages
  • Functional programming