SlideShare utilise les cookies pour améliorer les fonctionnalités et les performances, et également pour vous montrer des publicités pertinentes. Si vous continuez à naviguer sur ce site, vous acceptez l’utilisation de cookies. Consultez nos Conditions d’utilisation et notre Politique de confidentialité.
SlideShare utilise les cookies pour améliorer les fonctionnalités et les performances, et également pour vous montrer des publicités pertinentes. Si vous continuez à naviguer sur ce site, vous acceptez l’utilisation de cookies. Consultez notre Politique de confidentialité et nos Conditions d’utilisation pour en savoir plus.
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?
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
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
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.
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
• 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.
Productive |> Reliable |> Fast
• Created by Chris McCord
• Release 1.0 August 28th 2015
• It’s not rails for Elixir
• It has been inﬂuence heavily by rails as well as
many other frameworks.
• Focus on API and web sockets
• Web request response time is often measured in
micro seconds and not milliseconds.
• Recently benchmarked 2 million+ web socket
• With 2 - 3 second broadcast times to all 2 million
• Mix is essentially bundler and rake combined
• Additionally mix is your test runner.
• It’s included with Elixir
Rails like Generators
• mix phoenix.gen.html Post posts title body:text
• mix phoenix.gen.json User users name:string
• mix phoenix.gen.model User users name:string
• Async processing with out the need for
DelayedJob or Resque/sidekiq
• We can write code that looks like this.
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
• 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
• Just a series of function calls that transform
• Phoenix makes it easy to add middleware or
plugs to this pipeline. We could easily add
authentication to this.
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.