17
AN INTRODUCTION TO ERLANG AND ELIXIR Wednesday, September 25, 13

An introduction to Erlang and Elixir

Embed Size (px)

Citation preview

Page 1: An introduction to Erlang and Elixir

AN INTRODUCTION TO ERLANG AND ELIXIR

Wednesday, September 25, 13

Page 2: An introduction to Erlang and Elixir

WHAT IS ERLANG

Modular, Declarative Language who’s syntax descends from prolog

Wednesday, September 25, 13

Page 3: An introduction to Erlang and Elixir

WHAT IS ELIXIR

Modular, Declarative language with meta programming facilities whose syntax descends (mostly) from Ruby

Wednesday, September 25, 13

Page 4: An introduction to Erlang and Elixir

ERLANG VM - WHY SO INTERESTING

Built Around Concurrency

Built in scheduler

Async IO

Concurrent Garbage collector

Wednesday, September 25, 13

Page 5: An introduction to Erlang and Elixir

ERLANG VM - WHY SO INTERESTING

Small Number of Serializable Types

Pattern Matching

Processes

Process Linking

Immutable Data

Wednesday, September 25, 13

Page 6: An introduction to Erlang and Elixir

ERLANG VM

Erlang

Elixir

Joxa

LFE

The Concurrent Schemer

Reia

Wednesday, September 25, 13

Page 7: An introduction to Erlang and Elixir

ERLANG VM - TYPES

Numbers

Atoms

Bit Strings and Binaries

Fun

Tuple

List

Wednesday, September 25, 13

Page 8: An introduction to Erlang and Elixir

ERLANG VM - FEATURES

Expressions

Functions

Modules

Process

Wednesday, September 25, 13

Page 9: An introduction to Erlang and Elixir

RECORDS - ERLANG

-module(records).

-record(robot, {name, type=industrial, hobbies, details=[]}).

first_robot() -> #robot{name="Mechatron", type=handmade, details=["Moved by a small man inside"]}.

Wednesday, September 25, 13

Page 10: An introduction to Erlang and Elixir

RECORDS - ELIXIRdefmodule Records do

defrecord Robots, name: nil, type: industrial, hobbies: nil, details: ["Moved by a small man inside"]

def first_robot do Robot.new(name: "Mechatron", type: :handmade, details: ["Moved by a small man inside"]) endend

Wednesday, September 25, 13

Page 11: An introduction to Erlang and Elixir

POLYMORPHISM - ELIXIR

defprotocol Blank do

@doc "Returns true if data is considered blank/empty" def blank?(data)end

# Numbers are never blankdefimpl Blank, for: Number do def blank?(_), do: falseend

# Just empty list is blankdefimpl Blank, for: List do def blank?([]), do: true def blank?(_), do: falseend

# Just the atoms false and nil are blankdefimpl Blank, for: Atom do def blank?(false), do: true def blank?(nil), do: true def blank?(_), do: falseend

Wednesday, September 25, 13

Page 12: An introduction to Erlang and Elixir

METAPROGRAMMING - ELIXIR

defmodule MyMacro do defmacro unless(clause, options) do quote do: if(!unquote(clause), unquote(options)) endend

require MyMacrounless 2 + 2 == 5, do: call_function()

Wednesday, September 25, 13

Page 13: An introduction to Erlang and Elixir

DOWNSIDES - ERLANG

No Metaprogramming

No Polymorphism (mostly)

Obscure Syntax

Records are horrible

Wednesday, September 25, 13

Page 14: An introduction to Erlang and Elixir

DOWNSIDES - ELIXIR

Its young, so changes a fair amount

Truthiness is the devil

Macros are not sufficiently flexible (as what I am used to in lisp)

Awkward syntax

Fair amount of inconsistency

Not really accepted by Erlangers

Wednesday, September 25, 13

Page 15: An introduction to Erlang and Elixir

UPSIDES - ERLANG

Simple, Regular Syntax

Stable - Infrequent Changes

Robust and Extraordinarily well tested

Wednesday, September 25, 13

Page 16: An introduction to Erlang and Elixir

UPSIDES - ELIXIR

Metaprogramming, Metaprogramming, Metaprogramming

Polymorphism

Non stable (ie, improving) syntax

Robust, usable shell

Did I say metaprogramming

Wednesday, September 25, 13