Upload
skroutz-sa
View
214
Download
0
Embed Size (px)
Citation preview
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!
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
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
FeaturesImmutability
Dimitris Zorbas - Athens Ruby Meetup#26
will_change = 42answer = fn -> will_change endwill_change = 1337answer.()# => 42
FeaturesPipelines
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"
FeaturesPattern-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.
FeaturesPattern-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
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.
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.
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
FeaturesAsync 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" endend
Dimitris Zorbas - Athens Ruby Meetup#26
Erlang Interoperability
Features
Dimitris Zorbas - Athens Ruby Meetup#26
Erlang / LFE (Lisp-Flavored-Erlang) / Elixir all run on BEAMOTP is directly available in Elixir
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
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.
Resources
Dimitris Zorbas - Athens Ruby Meetup#26
● http://elixir-lang.org/getting-started/introduction.html● http://elixirplayground.com/● https://elixir-lang.slack.com/