elixir 5 minute intro

24
Best of Both Worlds Building Spaceships and staying Lean -Doug Goldie Lightning Talks, HackerDojo Mountain View, CA, Nov 2014

Upload: doug-goldie

Post on 08-Jul-2015

185 views

Category:

Software


0 download

DESCRIPTION

Elixir is a new Ruby-like language on the Erlang VM.

TRANSCRIPT

Page 1: Elixir 5 minute intro

Best of Both WorldsBuilding Spaceships and staying Lean

-Doug Goldie

Lightning Talks, HackerDojo

Mountain View, CA, Nov 2014

Page 2: Elixir 5 minute intro
Page 3: Elixir 5 minute intro
Page 4: Elixir 5 minute intro
Page 5: Elixir 5 minute intro
Page 6: Elixir 5 minute intro
Page 7: Elixir 5 minute intro

19 Billion

465 Million

550

10

Page 8: Elixir 5 minute intro

• Concurrency

• Distribution

• Fault Tolerant

• Soft real-time

• Hot code upgrade

• External interfaces

Page 9: Elixir 5 minute intro
Page 10: Elixir 5 minute intro

–Robert Virding, 2014

“Erlang is about building

Systems.”

Page 11: Elixir 5 minute intro

+

Page 12: Elixir 5 minute intro

defmodule Math do

def square(x) do

x * x

end

def sum(a, b) do

a + b + extra

end

defp extra do

5

end

end

Page 13: Elixir 5 minute intro

defmodule Math do

def fact(0), do: 1

def fact(n), do: n * fact(n - 1)

end

Page 14: Elixir 5 minute intro

defmodule Parallel do

def pmap(collection, func) do

collection

|> Enum.map(&(Task.async(fn -> func.(&1) end)))

|> Enum.map(&Task.await/1)

end

end

# We could run this function to get the squares

of the numbers from 1 to 1000.

# result = Parallel.pmap 1..1000, &(&1 * &1)

Page 15: Elixir 5 minute intro
Page 16: Elixir 5 minute intro

–Dave Thomas

“Combine Transformations with Pipelines.”

“Functions are Data Transformers.”

Page 17: Elixir 5 minute intro

people = DB.find_customers

orders = Orders.for_customers(people)

tax = sales_tax(orders, 2013)

filing = prepare_filing(tax)

filing = prepare_filing(sales_tax(

Orders.for_customers(

DB.find_customers

)

)

)

Page 18: Elixir 5 minute intro

filing = DB.find_customers

|> Orders.for_customers

|> sales_tax(2013)

|> prepare_filing

Page 19: Elixir 5 minute intro

Macros• Code that writes code.

• Done at compile time.

• Domain Specific Languages (DSLs)

Page 20: Elixir 5 minute intro

defmodule YourApp.Router do

use Phoenix.Router

scope alias: YourApp do

get "/pages/:page", PageController, :show

get "/files/*path", FileController, :show

resources "/users", UserController do

resources "/comments",CommentController

end

end

end

Page 21: Elixir 5 minute intro

defp do_match("GET", "/page1", conn) do

...

end

defp do_match("POST", "/user", conn) do

...

end

Page 22: Elixir 5 minute intro
Page 23: Elixir 5 minute intro

+

=

Page 24: Elixir 5 minute intro

-Doug Goldie

[email protected]

“Programming is fun again.”