let's talk about elixir - 26th athens ruby meetup

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

Upload: skroutz-sa

Post on 27-Jan-2017

214 views

Category:

Internet


0 download

TRANSCRIPT

Let’s Talk About

Dimitris Zorbas - Athens Ruby Meetup#26github.com/zorbash @_zorbash

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

Really Why Bother?

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

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/

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