20. You’re already familiar with
immutability you just don’t know it.
• a = 99
• We all know 99 is always 99.
• integers are immutable values, even in Ruby.
• You’d be upset if someone monkey patched 99
to be 3 right?
21. Why is Immutability a good
• Immutability provides a contract that each piece
of information has one source of truth.
• Concurrency is a natural side effect of
22. Does this mean I can never
change a variable once I set it?
• The short answer is no, you can reassign
variables as much as you like.
• Erlang would not be so kind, but Elixir we have
23. So how is it immutable if I
can change things?
• You can change things, elixir will just copy the
values you don’t change, but the original
reference stays intact.
• The original reference can then be used in part
or in whole later in the application.
24. Isn’t this inefﬁcient?
• At ﬁrst glance it would seem that way, but the
opposite is true.
• Won’t all the old reference values balloon elixirs
• Yes this means you could have thousands of
unused variables ﬂoating in memory
26. Concurrency ﬁxes
• Because the data is immutable we can rely on it
always being a certain value
• which means we can make our programs
concurrent and not worry.
• Elixir uses its concurrency to help with garbage
collections. Each process gets it own heap
allocated and that heap is garbage collected or
reclaimed as needed for that individual process.
• Elixir will eat as many cores/computers as you
can throw at it.
• It treats each core as though it were a computer
on the network with near zero latency.
44. Isolated & Concurrent
• Crashes are isolated
• Data is isolated
(GC is per process, no global pauses)
• Load Balances on IO and CPU - Efﬁcient on a
45. Garbage Collection
• No triggering massive garbage collection
• GC per process / end of process life cycle
• Ensuring top 10 percent of requests are not vastly
slower than any other request
46. Request Pipeline
• Just a series of function calls that transform
47. Request Pipeline
• Phoenix makes it easy to add middleware or
plugs to this pipeline. We could easily add
authentication to this.
48. Explicitness Over Magic
• Phoenix Removes a lot of the confusion and
“magic” found in rails and replaces it with
• Models, Controllers and Views are singular
named by convention.