Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Let's talk about Elixir

Let's talk about Elixir

Introductory talk about Elixir, showcasing the core features and aims of the language.

Dimitrios Zorbas

May 11, 2016
Tweet

More Decks by Dimitrios Zorbas

Other Decks in Programming

Transcript

  1. is a functional, concurrent language designed for building scalable and

    maintainable applications. Dimitris Zorbas - Athens Ruby Meetup#26 The power of Erlang meets the joy of Ruby!
  2. Why Bother? ➔ Created by a rubyist aimed to rubyists

    ➔ Learn a new language every year ➔ Even Matz likes it! Dimitris Zorbas - Athens Ruby Meetup#26
  3. Really Why Bother? Seems to solve the core issues of

    Ruby (performance / scalability / maintainability), adopting a functional programming model, with a sweet Ruby-like syntax and cherries on top. Dimitris Zorbas - Athens Ruby Meetup#26
  4. Features Immutability Dimitris Zorbas - Athens Ruby Meetup#26 will_change =

    42 answer = fn -> will_change end will_change = 1337 answer.() # => 42
  5. Features Pipelines Dimitris Zorbas - Athens Ruby Meetup#26 [42, nil,

    1337, nil, 4] |> Enum.filter(&(&1)) |> Enum.map(&(&1 * 2)) |> Enum.sort |> Enum.join(", ") # => "84, 2674, 8"
  6. Features Pattern-Matching Dimitris Zorbas - Athens Ruby Meetup#26 Pattern matching

    is one of the cornerstones of an equational style of definition; more often than not it leads to a cleaner and more readily understandable definition than a style based on conditional equations. It also simplifies the process of reasoning formally about functions.
  7. Features Pattern-Matching Dimitris Zorbas - Athens Ruby Meetup#26 defmodule Speaker

    do def talk(:bob), do: "Hi, uncle Bob!" def talk(42), do: "Oh! the answer to life the universe and everything" def talk(n) when is_number(n), do: "You're an ordinary number" def talk(_), do: "I don't really know what to tell you" end
  8. Concurrency: Actor Model Features Dimitris Zorbas - Athens Ruby Meetup#26

    Processes (actors) are the center of computation and have mailboxes. They communicate by sending asynchronous messages to each other.
  9. Concurrency: Actor Model Features Dimitris Zorbas - Athens Ruby Meetup#26

    OOP to me means only messaging, local retention and protection and hiding of state-process and extreme late-binding of all things.
  10. Dimitris Zorbas - Athens Ruby Meetup#26 defmodule Speaker do import

    IO, only: [puts: 1] def new, do: spawn &start/0 def start do receive do {:answer, name} -> puts talk(name) _ -> puts "I don't know how to handle that" after 2000 -> puts "[#{inspect(self)}] Tell me something to do" end start end def talk(:bob), do: "Hi, uncle Bob!" def talk(42), do: "Oh! the answer to life the universe and everything" def talk(n) when is_number(n), do: "You're an ordinary number" def talk(_), do: "I don't really know what to tell you" end
  11. Features Async Tests defmodule SpeakerTest do use ExUnit.Case, async: true

    # Examples run concurrently test "talking to bob" do assert Speaker.talk(:bob) == "Hi, uncle Bob!" End test "talking to a stranger" do assert Speaker.talk(:voldemort) == "I don't really know what to tell you" end end Dimitris Zorbas - Athens Ruby Meetup#26
  12. Erlang Interoperability Features Dimitris Zorbas - Athens Ruby Meetup#26 Erlang

    / LFE (Lisp-Flavored-Erlang) / Elixir all run on BEAM OTP is directly available in Elixir
  13. Live Fast, Die Young Philosophy Dimitris Zorbas - Athens Ruby

    Meetup#26 • Failures are embraced and managed. Let it crash! • Failure is isolated in process level. No exceptions. • Failing fast is revealing. The system stays up. • Write Offensive Code
  14. Live Fast, Die Young Philosophy Dimitris Zorbas - Athens Ruby

    Meetup#26 The world is concurrent. Things in the world don't share data. Things communicate with messages. Things fail.