Slide 1

Slide 1 text

Let’s Talk About Dimitris Zorbas - Athens Ruby Meetup#26 github.com/zorbash @_zorbash

Slide 2

Slide 2 text

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!

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Really Why Bother? Dimitris Zorbas - Athens Ruby Meetup#26

Slide 6

Slide 6 text

Features Immutability Dimitris Zorbas - Athens Ruby Meetup#26 will_change = 42 answer = fn -> will_change end will_change = 1337 answer.() # => 42

Slide 7

Slide 7 text

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"

Slide 8

Slide 8 text

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.

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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.

Slide 11

Slide 11 text

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.

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Live Fast, Die Young Philosophy Dimitris Zorbas - Athens Ruby Meetup#26

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

Resources Dimitris Zorbas - Athens Ruby Meetup#26 ● http://elixir-lang.org/getting-started/introduction.html ● http://elixirplayground.com/ ● https://elixir-lang.slack.com/

Slide 19

Slide 19 text

you |> ask :questions |> Enum.any?