A Drop of Elixir

A short introduction to Elixir

Paweł Duda (@paweldude)

http://slides.com/pawelduda/a-drop-of-elixir#

Erlang

  • Made by Ericsson to improve telephony applications (1986)
  • Runs on BEAM (Bogdan/Björn's Erlang Abstract Machine) VM
  • Open-sourced in 1998

Who even uses it?

http://stackoverflow.com/questions/1636455/where-is-erlang-used-and-why

TL;DR

  • Facebook: chat backend, 100m active users
  • WhatsApp: up to 2m connected users per server
  • Yahoo!: bookmarking service, 5m users and 150m bookmarked URLs

http://stackoverflow.com/questions/1636455/where-is-erlang-used-and-why

Let's talk about Elixir

  • First released in 2012
  • Superset of the battle-tested Erlang
  • Compiled to bytecode for BEAM
  • Functional
  • Immutable data structures
  • Declarative
  • Dynamic
  • Everything is an expression
  • Processes share nothing by default - they exchange messages (actor model)
  • It stands still faster than Ruby sprints (and eats way less resources)
  • Judging by the syntax it is very Ruby-like but the truth is far from that. Code written in Elixir tends to be more verbose and uses many different concepts.

http://techbeacon.com/5-emerging-programming-languages-bright-future

Somewhat off-topic quiz time!

Imperative vs declarative code

Which way to double this array is imperative and which is declarative?

a)

b)

Which way to double this array is imperative and which is declarative?

a) imperative

b) declarative

Regardless of how I get to your house, what really matters is the car I drive. Am I going to drive

an imperative stick shift car

or

a declarative automatic car.

- Tyler McGinnis​ 

https://medium.freecodecamp.com/imperative-vs-declarative-programming-283e96bf8aea

Now that we know what imperative and declarative really means, let's get back to Elixir :)

Syntax and things I like about the language

so far

Anonymous functions

Inspect stuff

Modules + pattern matching

=

Modules + pattern matching

Modules + pattern matching

Let's go back to our TestPatternMatching.two_plus_two/1 and add some documentation

We now have documentation in Markdown

Let's add a test file...

Time to write some actual tests?

Nope, we already wrote them :)

The Markdown documentation has actual, runnable tests!

A good way to solve problems with an outdated documentation :)

 

mindblown.gif

The pipe operator |>

The task:

  • Generate a list of numbers from 1 to 100
  • Multiply each of these numbers by 2
  • Get the sum of all odd numbers after multiplying them 

 

The capture operator makes this even sexier :)

Supervisor

Live demo

Where to start

http://elixir-lang.org/getting-started/introduction.html

Made with Slides.com