Erlang is a programming language that was designed to create reliable, evolvable and low latency systems. It facilitates the job of engineers building fault tolerant and maintainable systems. That is why, in contrast to most programming languages, fault tolerance, concurrency, distribution and tracing were built into the core language from the beginning.
Why Erlang?
- The Zen of Erlang - Fred Hebert
- Where Erlang Blooms - Fred Hebert
- When would you choose Erlang? - Brian L. Troutwine
- Erlang is not a Concurrent Functional Programming Language - Kresten Krab
- Erlangs parallelism is not parallelism! - Jesper L. Andersen
- Reliability Features of Erlang - LambdaLounge Krakow 2013
- What can I only do in Erlang? - Craig Everett
- A response to "Erlang - overhyped or underestimated" - Jesper L. Andersen
Introduction
- Learn X in Y minutes Where X=erlang
- Erlang Tic Tac Toe - 99s
- An Open Letter to the Erlang Beginner (or Onlooker) - Fred Hebert
- The Joy of Erlang; Or, How To Ride A Toruk - Evan Miller
- On Erlang's Syntax - Fred Hebert
- Erlang syntax again - Robert Virding
- Parallelism /= Concurrency - Simon Marlow
- Making reliable distributed systems in the presence of software errors - Joe Armstrong
Learning Erlang
- Learn you some Erlang - Fred Hebert
- Functional Programming with Erlang - Simon Thompson
- Curso Erlang en Español - Rodrigo Dominguez
- Erlang Master Class 1: Functional Programming
- Erlang Master Class 2: Concurrent Programming
- Erlang Master Class 3: OTP Behaviours and Releases
- Some Erlang Magic for Beginners - Brujo Benavides
- My favorite Erlang program - Joe Armstrong
- Build an FTP Server with Ranch in 30 Minutes - 99s
- Canillita: Your First Erlang Server - Brujo Benavides
- Extending OTP - Robert Virding
Advanced Erlang
- Erlang Patterns
- 10 Essential Erlang Tools for Erlang Developers - Brujo Benavides
- On Erlang, State and Crashes - Jesper L. Andersen
- Error Kernels, What are they? - Jesper L. Andersen
- Every-day Erlang: Handling Crashes in Erlang - Marcelo Gornstein
- Let it crash the right way - MazenHarake
- 9 Erlang pitfalls you should know about - MazenHarake
- The Erlang shell. Your secret weapon - Jesper L. Andersen
- REPL? A bit more (and less) than that - Fred Hebert
- Code Janitor: nobody's dream, everyone's job (and how Erlang can help) - Fred Hebert
- Garrett Smith - Writing Beautiful Code
- Beyond OTP - Loïc Hoguin
- Writing Quality Code in Erlang - Garrett Smith
- Can you hear the drums, Erlando? - Matthew Sackman
- Inaka's Erlang Coding Guidelines
- Programming Rules and Conventions
- Erlang and code style - Jesper L. Andersen
Erlang design choices and BEAM Internals
- It's About the Guarantees - Fred Hebert
- Stacking Theory for Systems Design - Jesper L. Andersen
- Sequence and Order in Erlang - Dennis Byrne
- The Road we didn't go down - Joe Armstrong - Discussion about RPC
- The BEAM Dispatcher - Happi Blogging
- The Erlang Tagging Scheme - Happi Blogging
- How Erlang does scheduling - Jesper L. Andersen
- Understanding the Erlang Scheduler
- Erlang Scheduler Details and Why It Matters - Hamidreza Soleimani
- Hitchhiker's Tour of the BEAM - Robert Virding
- Tackling Dirty Jobs with Erlang's Schedulers - Steve Vinoski
- Live Podcast on VM - Mostly Erlang
- The Beam Book
- OTP internal documentation
- Interview with Jesper Louis Andersen about Erlang
- Erlang Garbage Collection Details and Why It Matters - Hamidreza Soleimani
- Erlang 19.0 Garbage Collector - Lukas Larsson
- BEAM VM Wisdoms - Collection of easy to read articles - Dmytro Lytovchenko
Useful tools and libraries
- sync: On-the-fly recompiling and reloading in Erlang
- erlang.mk: Build tool for Erlang that just works
- rebar3: Build tool
- rebar: Old rebar build tool
- mixer: Mix in functions from other modules
- relx: Sane, simple release creation for Erlang
- lager: A logging framework for Erlang/OTP
- elvis: The king of code style
- erlando: Set of syntax extensions for Erlang
- sheriff: Check values against their type as defined through typespecs
- gproc: Extended process registry for Erlang
- cuttlefish: sysctl-like syntax config for your apps
- clique: Opinionated framework for building command line interfaces
- riak core: Distributed systems framework
- riak_core tutorial
- Building on top of riak core - Mark Allen
- Little Riak Core Book - Mariano Guerra
Testing
Debugging, tracing and logging
Profiling
- cprof: A simple Call Count Profiling Tool
- eprof: A Time Profiling Tool for Erlang
- fprof: The File Trace Profiler
- eep: Erlang Easy Profiling
- Percept 2 - an enhanced version of the Percept profiling tool from the Erlang/OTP distribution
- Profiling Erlang programs using Percept2
- Profiling with Percept2 - Huiqing Li
- Multicore Profiling for Erlang Programs Using Percept2
- Multi-level Visualization of Concurrent and Distributed Computation in Erlang
Performance
- Stuff Goes Bad. Erlang in anger - Fred Hebert
- Scaling Erlang - Brujo Benavides
- Worker Pool - Brujo Benavides
- Planning for Overload - Ferd Hebert
- Lessons Learned while Working on Large-Scale Server Software - Ferd Hebert
- Queues Don't Fix Overload - Ferd Hebert
- dispcount: task dispatcher based on ETS counters
- pobox: External buffer processes to protect against mailbox overflow
- On Scalability, Capacity, and Sensitivity - Jesper L. Andersen
- fuse: Circuit Breaker
- safetyvalve: Safety valve for your erlang node
- epocxy: Erlang patterns of Concurrency
- Everyday Erlang: Quick and effective caching using ETS - Marcelo Gornstein
- Erlang Factory 2014 - That's 'Billion' with a 'B': Scaling to the Next Level at WhatsApp
- Realtime performance at scale - Fredrik Linder
- Scalable is Awesome, Literally! - Garrett Smith
- Keeping a System Running Forever - Ferd Hebert
- System Limits - Erlang
- Erlang String Handling - How to be efficient at handling string data in Erlang - Jesper L. Andersen
- How WhatsApp Grew To Nearly 500 Million Users, 11,000 Cores, And 70 Million Messages A Second - High Scalability
- Tales of a Former Disassembly Addict
- A Deeper Look at Tails Recursion in Erlang - Programming in the 21st Century
- Why Garbage Collection Paranoia is Still (sometimes) Justified - Programming in the 21st Century
- Erlang, Binaries, and Garbage Collection (Sigh)
- Scaling Erlang - Inaka Networks
- Social Platforms in Erlang - Lessons Learned
- Eliminating Single Process Bottlenecks with ETS Concurrency Patterns - Jay Nelson
- Erlang Web Server Benchmarking - Steve Vinoski
Erlang wants to talk to the outside world!
- Getting Erlang to talk to the outside world - Joe Armstrong
- erl_nif
- Writing an Erlang port using OTP principles - Erlang Central
- How to implement a driver
- Ports and Port Drivers
- Ports
- Port drivers
- From Erlang to Java and Back Again: Part 1 - Brujo Benavides
- Haskell - Interfacing Erlang
- erlport - Connect Erlang to Ruby and Python
- JavaErlang - Facilitate the communication between Java and Erlang nodes
- erlang_js - A linked-in driver for Erlang to Mozilla's Spidermonkey Javascript runtime
- cl - OpenCL binding for Erlang
- sh - Erlang Shell Executor