skip to main content
Skip header Section
Programming Erlang: Software for a Concurrent WorldJuly 2007
Publisher:
  • Pragmatic Bookshelf
ISBN:978-1-934356-00-5
Published:11 July 2007
Pages:
536
Skip Bibliometrics Section
Bibliometrics
Skip Abstract Section
Abstract

Erlang solves one of the most pressing problems facing developers today: how to write reliable, concurrent, high-performance systems. It's used worldwide by companies who need to produce reliable, efficient, and scalable applications. Invest in learning Erlang now. Moore's Law is the observation that the amount you can do on a single chip doubles every two years. But Moore's Law is taking a detour. Rather than producing faster and faster processors, companies such as Intel and AMD are producing multi-core devices: single chips containing two, four, or more processors. If your programs aren't concurrent, they'll only run on a single processor at a time. Your users will think that your code is slow. Erlang is a programming language designed for building highly parallel, distributed, fault-tolerant systems. It has been used commercially for many years to build massive fault-tolerated systems that run for years with minimal failures. Erlang programs run seamlessly on multi-core computers: this means your Erlang program should run a lot faster on a 4 core processor than on a single core processor, all without you having to change a line of code. Erlang combines ideas from the world of functional programming with techniques for building fault-tolerant systems to make a powerful language for building the massively parallel, networked applications of the future. This book presents Erlang and functional programming in the familiar Pragmatic style. And it's written by Joe Armstrong, one of the creators of Erlang. It includes example code you'll be able to build upon. In addition, the book contains the full source code for two interesting applications: A SHOUTcast server which you can use to stream music to every computer in your house, and a full-text indexing and search engine that can index gigabytes of data. Learn how to write programs that run on dozens or even hundreds of local and remote processors. See how to write robust applications that run even in the face of network and hardware failure, using the Erlang programming language.

Cited By

  1. ACM
    Moradi Moghadam M, Bagherzadeh M, Khatchadourian R and Bagheri H 𝜇Akka: Mutation Testing for Actor Concurrency in Akka using Real-World Bugs Proceedings of the 31st ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (262-274)
  2. ACM
    Bagherzadeh M, Fireman N, Shawesh A and Khatchadourian R (2020). Actor concurrency bugs: a comprehensive study on symptoms, root causes, API usages, and differences, Proceedings of the ACM on Programming Languages, 4:OOPSLA, (1-32), Online publication date: 13-Nov-2020.
  3. ACM
    Kopestenski I and Van Roy P Erlang as an enabling technology for resilient general-purpose applications on edge IoT networks Proceedings of the 18th ACM SIGPLAN International Workshop on Erlang, (1-12)
  4. ACM
    Pina L, Andronidis A, Hicks M and Cadar C MVEDSUA Proceedings of the Twenty-Fourth International Conference on Architectural Support for Programming Languages and Operating Systems, (573-585)
  5. ACM
    Albert E, Correas J, Johnsen E, Pun K and RomĂĄn-DĂ­ez G (2018). Parallel Cost Analysis, ACM Transactions on Computational Logic, 19:4, (1-37), Online publication date: 31-Oct-2018.
  6. ACM
    Desai A, Phanishayee A, Qadeer S and Seshia S (2018). Compositional programming and testing of dynamic distributed systems, Proceedings of the ACM on Programming Languages, 2:OOPSLA, (1-30), Online publication date: 24-Oct-2018.
  7. ACM
    Hedden B and Zhao X A Comprehensive Study on Bugs in Actor Systems Proceedings of the 47th International Conference on Parallel Processing, (1-9)
  8. ACM
    Valkov I, Chechina N and Trinder P Comparing languages for engineering server software Proceedings of the 33rd Annual ACM Symposium on Applied Computing, (218-225)
  9. ACM
    Trinder P, Chechina N, Papaspyrou N, Sagonas K, Thompson S, Adams S, Aronis S, Baker R, Bihari E, Boudeville O, Cesarini F, Stefano M, Eriksson S, fördƑs V, Ghaffari A, Giantsios A, Green R, Hoch C, Klaftenegger D, Li H, Lundin K, Mackenzie K, Roukounaki K, Tsiouris Y and Winblad K (2017). Scaling Reliably, ACM Transactions on Programming Languages and Systems, 39:4, (1-46), Online publication date: 31-Dec-2018.
  10. ACM
    Cassar I, Francalanza A, Aceto L and IngĂłlfsdĂłttir A eAOP: an aspect oriented programming framework for Erlang Proceedings of the 16th ACM SIGPLAN International Workshop on Erlang, (20-30)
  11. ACM
    RosĂ  A, Chen L and Binder W (2016). Actor profiling in virtual execution environments, ACM SIGPLAN Notices, 52:3, (36-46), Online publication date: 12-May-2017.
  12. Gracia-Tinedo R, Sampé J, Zamora E, Sånchez-Artigas M, García-López P, Moatti Y and Rom E Crystal Proceedings of the 15th Usenix Conference on File and Storage Technologies, (243-256)
  13. ACM
    RosĂ  A, Chen L and Binder W Actor profiling in virtual execution environments Proceedings of the 2016 ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences, (36-46)
  14. ACM
    Kuraj I and Jackson D Exploring the role of sequential computation in distributed systems: motivating a programming paradigm shift Proceedings of the 2016 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software, (145-164)
  15. ACM
    Lutac A, Chechina N, Aragon-Camarasa G and Trinder P Towards reliable and scalable robot communication Proceedings of the 15th International Workshop on Erlang, (12-23)
  16. ACM
    Oliveira A, Souza P and Souza S ValiErlang Proceedings of the 1st Brazilian Symposium on Systematic and Automated Software Testing, (1-10)
  17. ACM
    RosĂ  A, Chen L and Binder W Efficient profiling of actor-based applications in parallel and distributed systems Proceedings of the 11th Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems, (1-3)
  18. FördƑs V and TĂłth M (2016). Identifying Code Clones with RefactorErl, Acta Cybernetica, 22:3, (553-571), Online publication date: 1-Jun-2016.
  19. Naugler D (2016). An introduction to Elixir programming, Journal of Computing Sciences in Colleges, 31:5, (4-4), Online publication date: 1-May-2016.
  20. ACM
    Nguyen T and Zhao X Decoupled concurrency Proceedings of the 31st Annual ACM Symposium on Applied Computing, (1358-1360)
  21. Lin J, Yu I, Johnsen E and Lee M ABS-YARN Proceedings of the 19th International Conference on Fundamental Approaches to Software Engineering - Volume 9633, (49-65)
  22. Chechina N, Li H, Ghaffari A, Thompson S and Trinder P (2016). Improving the network scalability of Erlang, Journal of Parallel and Distributed Computing, 90:C, (22-34), Online publication date: 1-Apr-2016.
  23. ACM
    Gebrewahid E, Arslan M, Karlsson A and Ul-Abdin Z Support for data parallelism in the CAL actor language Proceedings of the 3rd Workshop on Programming Models for SIMD/Vector Processing, (1-8)
  24. Muscholl A Automated Synthesis of Distributed Controllers Proceedings, Part II, of the 42nd International Colloquium on Automata, Languages, and Programming - Volume 9135, (11-27)
  25. OlĂĄh G, Nagy G and PorkolĂĄb Z Analyzing Scale-Free Properties in Erlang and Scala Central European Functional Programming School, (380-393)
  26. ACM
    Alvaro P, Rosen J and Hellerstein J Lineage-driven Fault Injection Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data, (331-346)
  27. Naugler D (2015). Elixir, Journal of Computing Sciences in Colleges, 30:5, (28-28), Online publication date: 1-May-2015.
  28. Fernåndez-Díaz Á, Benac-Earle C and Fredlund L (2015). Adding distribution and fault tolerance to Jason, Science of Computer Programming, 98:P2, (205-232), Online publication date: 1-Feb-2015.
  29. Johnsen E, Schlatte R and Tapia Tarifa S Deployment Variability in Delta-Oriented Models Part I of the Proceedings of the 6th International Symposium on Leveraging Applications of Formal Methods, Verification and Validation. Technologies for Mastering Change - Volume 8802, (304-319)
  30. ACM
    Ghaffari A Investigating the scalability limits of distributed Erlang Proceedings of the Thirteenth ACM SIGPLAN workshop on Erlang, (43-49)
  31. ACM
    He J, Wadler P and Trinder P Typecasting actors Proceedings of the Fifth Annual Scala Workshop, (23-33)
  32. ACM
    Voellmy A, Wang J, Hudak P and Yamamoto K (2013). Mio, ACM SIGPLAN Notices, 48:12, (129-140), Online publication date: 31-Jan-2014.
  33. ACM
    Cardoso R, Zatelli M, HĂŒbner J and Bordini R Towards benchmarking actor- and agent-based programming languages Proceedings of the 2013 workshop on Programming based on actors, agents, and decentralized control, (115-126)
  34. ACM
    Zhao X and Jamali N Load balancing non-uniform parallel computations Proceedings of the 2013 workshop on Programming based on actors, agents, and decentralized control, (97-108)
  35. Black A (2013). Object-oriented programming, Information and Computation, 231, (3-20), Online publication date: 1-Oct-2013.
  36. ACM
    Voellmy A, Wang J, Hudak P and Yamamoto K Mio Proceedings of the 2013 ACM SIGPLAN symposium on Haskell, (129-140)
  37. ACM
    Jergler M, Doblander C, Najafi M and Jacobsen H Grand challenge Proceedings of the 7th ACM international conference on Distributed event-based systems, (307-312)
  38. Cardoso R, HĂŒbner J and Bordini R Benchmarking communication in actor- and agent-based languages Proceedings of the First International Conference on Engineering Multi-Agent Systems, (58-77)
  39. Cardoso R, HĂŒbner J and Bordini R Benchmarking communication in actor- and agent-based languages Proceedings of the 2013 international conference on Autonomous agents and multi-agent systems, (1267-1268)
  40. ACM
    Vikas , Giacaman N and Sinnen O Pyjama Proceedings of the 2013 International Workshop on Programming Models and Applications for Multicores and Manycores, (43-52)
  41. Johnsen E, Schlatte R and Tapia Tarifa S Modeling resource-aware virtualized applications for the cloud in real-time ABS Proceedings of the 14th international conference on Formal Engineering Methods: formal methods and software engineering, (71-86)
  42. Johnsen E Separating Cost and Capacity for Load Balancing in ABS Deployment Models Revised Lectures of the 11th International Symposium on Formal Methods for Components and Objects - Volume 7866, (145-167)
  43. ACM
    LĂłpez M, Castro L and Cabrero D Declarative distributed advertisement system for iDTV Proceedings of the 14th symposium on Principles and practice of declarative programming, (185-194)
  44. ACM
    Toscano L, D'Angelo G and Marzolla M Parallel discrete event simulation with Erlang Proceedings of the 1st ACM SIGPLAN workshop on Functional high-performance computing, (83-92)
  45. ACM
    LĂłpez M, Castro L and Cabrero D Failover and takeover contingency mechanisms for network partition and node failure Proceedings of the eleventh ACM SIGPLAN workshop on Erlang workshop, (51-60)
  46. ACM
    Nobakht B, de Boer F, Jaghoori M and Schlatte R Programming and deployment of active objects with application-level scheduling Proceedings of the 27th Annual ACM Symposium on Applied Computing, (1883-1888)
  47. D'Angelo G, Ferretti S and Marzolla M Time warp on the go Proceedings of the 5th International ICST Conference on Simulation Tools and Techniques, (242-248)
  48. ACM
    Basu S, Bultan T and Ouederni M Deciding choreography realizability Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages, (191-202)
  49. ACM
    Basu S, Bultan T and Ouederni M (2012). Deciding choreography realizability, ACM SIGPLAN Notices, 47:1, (191-202), Online publication date: 18-Jan-2012.
  50. ACM
    Gorlick M, Strasser K, Baquero A and Taylor R CREST Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion, (193-194)
  51. Johnsen E, Schlatte R and Tapia Tarifa S A formal model of user-defined resources in resource-restricted deployment scenarios Proceedings of the 2011 international conference on Formal Verification of Object-Oriented Software, (196-213)
  52. ACM
    Bain T, Campbell P and Karlsson J Modeling growth and dynamics of neural networks via message passing in Erlang Proceedings of the 10th ACM SIGPLAN workshop on Erlang, (94-97)
  53. ACM
    Amaral C, Florido M and Jansson P Interfacing dynamically typed languages and the why tool Proceedings of the 10th ACM SIGPLAN workshop on Erlang, (92-93)
  54. ACM
    Aronis S and Sagonas K Typed callbacks for more robust behaviours Proceedings of the 10th ACM SIGPLAN workshop on Erlang, (23-29)
  55. ACM
    Arts T, Hughes J, Norell U, Smallbone N and Svensson H Accelerating race condition detection through procrastination Proceedings of the 10th ACM SIGPLAN workshop on Erlang, (14-22)
  56. Zhao X and Jamali N Supporting Deadline Constrained Distributed Computations on Grids Proceedings of the 2011 IEEE/ACM 12th International Conference on Grid Computing, (165-172)
  57. ACM
    Fourtounis G, Ölveczky P and Papaspyrou N Formally specifying and analyzing a parallel virtual machine for lazy functional languages using Maude Proceedings of the fifth international workshop on High-level parallel programming and applications, (19-26)
  58. Sivieri A, Cugola G and Ghezzi C Computational REST meets Erlang Proceedings of the 49th international conference on Objects, models, components, patterns, (244-259)
  59. Johnsen E, Lanese I and Zavattaro G Fault in the future Proceedings of the 13th international conference on Coordination models and languages, (1-15)
  60. ACM
    Ortiz A Teaching concurrency-oriented programming with Erlang Proceedings of the 42nd ACM technical symposium on Computer science education, (195-200)
  61. Honda K, Mukhamedov A, Brown G, Chen T and Yoshida N Scribbling interactions with a formal foundation Proceedings of the 7th international conference on Distributed computing and internet technology, (55-75)
  62. Siegel S and Gopalakrishnan G Formal analysis of message passing Proceedings of the 12th international conference on Verification, model checking, and abstract interpretation, (2-18)
  63. Johnsen E, HÀhnle R, SchÀfer J, Schlatte R and Steffen M ABS Proceedings of the 9th international conference on Formal Methods for Components and Objects, (142-164)
  64. Johnsen E, Owe O, Schlatte R and Tarifa S Dynamic resource reallocation between deployment components Proceedings of the 12th international conference on Formal engineering methods and software engineering, (646-661)
  65. Biggs G, Ando N and Kotoku T Coordinating software components in a component-based architecture for robotics Proceedings of the Second international conference on Simulation, modeling, and programming for autonomous robots, (168-179)
  66. Walkinshaw N, Bogdanov K, Derrick J and Paris J Increasing functional coverage by inductive testing Proceedings of the 22nd IFIP WG 6.1 international conference on Testing software and systems, (126-141)
  67. Bohlin T, Jonsson B and Soleimanifard S Inferring compact models of communication protocol entities Proceedings of the 4th international conference on Leveraging applications of formal methods, verification, and validation - Volume Part I, (658-672)
  68. Kerdprasop K and Kerdprasop N Parallelization of K-means clustering on multi-core processors Proceedings of the 10th WSEAS international conference on Applied computer science, (472-477)
  69. ACM
    Wiger U Generic load regulation framework for Erlang Proceedings of the 9th ACM SIGPLAN workshop on Erlang, (57-68)
  70. ACM
    Armstrong J (2010). Erlang, Communications of the ACM, 53:9, (68-75), Online publication date: 1-Sep-2010.
  71. Kuuskeri J and Turto T On actors and the REST Proceedings of the 10th international conference on Web engineering, (144-157)
  72. Johnsen E, Owe O, Schlatte R and Tarifa S Validating timed models of deployment components with parametric concurrency Proceedings of the 2010 international conference on Formal verification of object-oriented software, (46-60)
  73. Plociniczak H and Eisenbach S JErlang Proceedings of the 12th international conference on Coordination Models and Languages, (61-75)
  74. Agnarsson S Parallel programming in morpho Proceedings of the 10th international conference on Applied Parallel and Scientific Computing - Volume Part I, (97-107)
  75. Popovic M and Basicevic I (2010). Test case generation for the task tree type of architecture, Information and Software Technology, 52:6, (697-706), Online publication date: 1-Jun-2010.
  76. ACM
    Grogono P and Jafroodi N A fair protocol for non-deterministic message passing Proceedings of the Third C* Conference on Computer Science and Software Engineering, (53-58)
  77. Schintke F, Reinefeld A, Haridi S and SchĂŒtt T Enhanced Paxos Commit for Transactions on DHTs Proceedings of the 2010 10th IEEE/ACM International Conference on Cluster, Cloud and Grid Computing, (448-454)
  78. ACM
    Rivas S, Francisco M and GulĂ­as V Property driven development in Erlang, by example Proceedings of the 5th Workshop on Automation of Software Test, (75-78)
  79. Naugler D (2010). Concurrent programming in Erlang, Journal of Computing Sciences in Colleges, 25:5, (6-7), Online publication date: 1-May-2010.
  80. Sagonas K Using static analysis to detect type errors and concurrency defects in erlang programs Proceedings of the 10th international conference on Functional and Logic Programming, (13-18)
  81. ACM
    Adams J, Ernst D, Murphy T and Ortiz A Multicore education Proceedings of the 41st ACM technical symposium on Computer science education, (194-195)
  82. Clarke D, Johnsen E and Owe O Concurrent objects Ă  la carte Concurrency, Compositionality, and Correctness, (185-206)
  83. Walkinshaw N and Derrick J Incrementally discovering testable specifications from program executions Proceedings of the 8th international conference on Formal methods for components and objects, (272-289)
  84. ACM
    Paladi N and Arts T Model based testing of data constraints Proceedings of the 8th ACM SIGPLAN workshop on ERLANG, (71-82)
  85. ACM
    Cortés H, García M, Hernåndez J, Hernåndez M, Pérez-Cordoba E and Ramos E Development of a distributed system applied to teaching and learning Proceedings of the 8th ACM SIGPLAN workshop on ERLANG, (41-50)
  86. ACM
    GrĂŒner S and Lorentsen T Teaching Erlang using robotics and player/stage Proceedings of the 8th ACM SIGPLAN workshop on ERLANG, (33-40)
  87. ACM
    Lövei L Automated module interface upgrade Proceedings of the 8th ACM SIGPLAN workshop on ERLANG, (11-22)
  88. ACM
    Karmani R, Shali A and Agha G Actor frameworks for the JVM platform Proceedings of the 7th International Conference on Principles and Practice of Programming in Java, (11-20)
  89. ACM
    Wrigstad T, Eugster P, Field J, Nystrom N and Vitek J Software hardening Proceedings for the 1st workshop on Script to Program Evolution, (58-70)
  90. ACM
    Arad C, Dowling J and Haridi S Developing, simulating, and deploying peer-to-peer systems using the Kompics component model Proceedings of the Fourth International ICST Conference on COMmunication System softWAre and middlewaRE, (1-9)
  91. Naugler D (2009). An intermediate introduction to the Erlang programming language, Journal of Computing Sciences in Colleges, 24:5, (4-4), Online publication date: 1-May-2009.
  92. ACM
    CorrĂȘa F Actors in a new "highly parallel" world Proceedings of the Warm Up Workshop for ACM/IEEE ICSE 2010, (21-24)
  93. ACM
    Larson J (2009). Erlang for concurrent programming, Communications of the ACM, 52:3, (48-56), Online publication date: 1-Mar-2009.
  94. ACM
    Lövei L, Hoch C, Köllö H, Nagy T, Nagyné Víg A, Horpåcsi D, Kitlei R and Kiråly R Refactoring module structure Proceedings of the 7th ACM SIGPLAN workshop on ERLANG, (83-89)
  95. ACM
    SchĂŒtt T, Schintke F and Reinefeld A Scalaris Proceedings of the 7th ACM SIGPLAN workshop on ERLANG, (41-48)
  96. ACM
    Boberg J Early fault detection with model-based testing Proceedings of the 7th ACM SIGPLAN workshop on ERLANG, (9-20)
  97. Castro L, GulĂ­as V, Abalde C and ParĂ­s J (2008). Environment-independent methodology for accessing external data sources, WSEAS Transactions on Information Science and Applications, 5:9, (1-10), Online publication date: 1-Sep-2008.
  98. ACM
    Larson J (2008). Erlang for Concurrent Programming, Queue, 6:5, (18-23), Online publication date: 1-Sep-2008.
  99. ACM
    Sillito J Stage Proceedings of the 1st international workshop on Multicore software engineering, (33-40)
  100. Claessen K and Svensson H Finding counter examples in induction proofs Proceedings of the 2nd international conference on Tests and proofs, (48-65)
  101. Park D (2008). Concurrent programming in a nutshell, Journal of Computing Sciences in Colleges, 23:4, (51-57), Online publication date: 1-Apr-2008.
  102. Naugler D (2008). Learning the Erlang programming language, Journal of Computing Sciences in Colleges, 23:4, (5-5), Online publication date: 1-Apr-2008.
  103. Vinoski S (2007). Reliability with Erlang, IEEE Internet Computing, 11:6, (79-81), Online publication date: 1-Nov-2007.
  104. ACM
    Meijer E (2007). Confessions of a used programming language salesman, ACM SIGPLAN Notices, 42:10, (677-694), Online publication date: 21-Oct-2007.
  105. ACM
    Meijer E Confessions of a used programming language salesman Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems, languages and applications, (677-694)
  106. ACM
    Nystrom J Priority messaging made easy Proceedings of the 2007 SIGPLAN workshop on ERLANG Workshop, (65-72)
  107. ACM
    Fredlund L and Svensson H McErlang Proceedings of the 12th ACM SIGPLAN international conference on Functional programming, (125-136)
  108. ACM
    Fredlund L and Svensson H (2007). McErlang, ACM SIGPLAN Notices, 42:9, (125-136), Online publication date: 1-Oct-2007.
  109. Vinoski S (2007). Concurrency with Erlang, IEEE Internet Computing, 11:5, (90-93), Online publication date: 1-Sep-2007.
Contributors
  • Telefonaktiebolaget LM Ericsson

Recommendations

Radu State

I don't know how many programmers have heard of the Erlang programming language. I conducted a small survey in my office, and the received answers varied from "never heard of it" to something like "exotic proprietary language used by telcos"; in all honesty, this was not a big surprise. It's hard to explain why so few people know about it, since the Erlang programming language offers so much in terms of elegance in programming, and support for multithreaded and multicore computer programming. Most probably the answer lies in the missing commercial advertisement and lobbying. This book offers one of the best introductions to this programming language, and manages to introduce three very different aspects: functional programming, fault-tolerant applications, and multicore computer programming. These three features represent the strengths of the Erlang programming language, but require also the most transition effort from developers who are used to standard and imperative programming languages. Armstong structures his book accordingly, and addresses Erlang programming from these three viewpoints. The first eight chapters of the book describe the elements of the programming language: syntax and runtime environments. The next part (chapters 9 to 14) goes into more advanced topics, like distributed client-server programming, using files, and network sockets. The code examples are very realistic, and even a fully functional SHOUTcast server is developed in chapter 14. Chapter 10 is a must-read: the reader learns to appreciate the power of the programming language for distributed and cluster-oriented applications. The third part of the book (chapters 15 to 18) covers some extremely powerful libraries used to build commercial-grade and industrial-scale applications. These libraries include support for large data storage requirements and application-level fault tolerance. The many details encountered in real development are discussed in chapter 18. Finally, the fourth part of the book (chapters 19 and 20) addresses the aspects of multicore computer programming with Erlang. This is a truly interesting and rewarding read for those interested in Erlang. Readers interested in learning and leveraging a powerful programming language, which is currently used by a number of people, will surely like it. I am convinced that future evolutions of this language will one day become mainstream development environments, and as such I recommend the book to all those interested in grasping the essentials of a potential next-generation programming language. This book also makes for great reading for an audience just looking for an alternative to the current state of the art; this book should rank highly on their reading lists. Online Computing Reviews Service

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.