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!
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
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.
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
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
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
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
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.