Introduction to Elixir [02.13.2017]
Welcome to the first episode of DailyDrip's new Elixir topic. In this series, we'll walk through learning Elixir from the ground up. Once we've got a firm footing in the language, we'll move on to building a large-scale production web application using the Phoenix Framework. We'll also explore a variety of other topics as we go.
What is Elixir and why are you interested in learning it?
In the words of the Elixir website,
Elixir is a dynamic, functional language
designed for building scalable and maintainable applications.
It leverages the Erlang Virtual Machine, which has been used for building high-traffic, low-latency applications ranging from telephone switches to the WhatsApp backend and Heroku's routing layer.
In general, I find Elixir interesting for three reasons:
- I find the Actor Model of computation very compelling, and Erlang's where it has had the most time to develop.
- Since it's built upon the Erlang VM, you can use it to write extremely reliable, distributed, concurrent systems.
- I find the syntax pleasant, and the tooling outstanding.
I've been using it now for over three years and it has been an amazing experience that I'm eager to share.
Who am I and why am I qualified to take you along as I learn it?
Assuming you're convinced by all of this, let's get started learning.
The only prerequisite for installing Elixir is Erlang, since Elixir runs on the Erlang VM.
Installing Erlang is exceedingly simple. There are instructions and downloads available at the main Erlang site, but I think the easiest way to get started is to download a precompiled package provided by the fine folks at Erlang Solutions.
There are downloads for various operating systems there, if you want to just fetch one and install it. You could also install with your package manager.
On a Mac, you can install it with brew:
brew install erlang
Or on Windows, you can use chocolatey:
choco install erlang
I personally like to be able to easily run different versions of my programming languages, and for this I use the asdf version manager.
You can install
asdf by cloning it into
# Feel free to check for a new version, but v0.2.1 is the latest as of this # writing. git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.2.1
Then load it in your shell:
# For Mac OSX and bash echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bash_profile echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile # For Ubuntu or other linux distros, and bash echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
Once that's done, you can use
asdf to install all kinds of programming
languages. They each have plugins. To install the
asdf-erlang plugin, run the
asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git
Then you can install it with:
# List all of the versions of Erlang available: asdf list-all erlang # As of this writing, 19.2 is the latest release. Install it: asdf install erlang 19.2 # To make it the global default version of Erlang: asdf global erlang 19.2
Verifying your Erlang installation
You can verify that the installation worked by entering an Erlang Shell. At a
console prompt, type
erl and you should be greeted by something that looks
jadams ~ λ erl Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] Eshell V8.2 (abort with ^G) 1>
If you see that, congratulations - you've installed Elixir's entire prerequisite
q(). and press Enter to exit.
You can find an Elixir distribution to install by visiting the Elixir site's install page.
Again, you can install on a Mac trivially:
brew install elixir
Or on Windows, you can use chocolatey:
choco install elixir
If you would rather use
asdf, you can first install the
asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
Then install Elixir with:
# List all of the versions of Elixir available: asdf list-all elixir # As of this writing, 1.4.0 is the latest release. Install it: asdf install elixir 1.4.0 # To make it the global default version of Elixir: asdf global elixir 1.4.0
Firing up iex
To verify that your Elixir install was successful, type
iex. Assuming you did
everything right, you should be greeted with a prompt that looks like this:
jadams ~ λ iex Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] Interactive Elixir (1.4.0) - press Ctrl+C to exit (type h() ENTER for help) iex(1)>
Just press Ctrl+C twice to close the shell out. You can also exit the shell by pressing Ctrl+\ if you want a single keystroke :)
Today, we walked through installing Erlang and Elixir. I've added some links in the resources section to encourage you to get involved in the community. See you soon!
- The Erlang website
- The Erlang Solutions download page
- The Elixir website
- The Elixir downloads page
- The asdf version manager
- IEx documentation
- Quitting IEx
Where can you get more help with Elixir?
- The #elixir-lang IRC channel on FreeNode
- The elixir-lang Slack is extremely active.
- The Elixir Forum
- The Elixir Website is very well done and has lots of nice information.
- The DailyDrip Elixir Topic
- I'm always in the DailyDrip Slack, as are other DailyDrip subscribers that are glad to be helpful.
- Elixir School
What is the Actor Model?
I had a subscriber ask me for a succinct explanation of the Actor Model. Without going into it too deeply, I'd describe it thusly:
An actor is an object that has its own lifecycle and lives concurrently. An actor communicates with another actor by placing a message in his mailbox. The second actor can then read the mailbox in his preferred order, and respond to the messages at his leisure. This is a large part of the Erlang 'shared nothing' model, and one of the core concepts that leads to its fault tolerance and ease of distribution.
If you want more details, there's an excellent video that MSDN's Channel 9 did interviewing Carl Hewitt, Erik Meijer, and Clemens Szyperski on the actor model.