Elixir intro
-
Upload
anton-mishchuk -
Category
Software
-
view
165 -
download
0
Transcript of Elixir intro
Hello!I am Anton Mishchuk
- Ruby developer at
Matic Insurance
- Elixir fan
- Author and maintainer of
ESpec BDD test framework
Github: antonmi
2
What I’d tell you
▪ No pictures, sorry
▪ No code samples
▪ No live coding
▪ Lots of philosophy
▪ Few words about Erlang and Elixir
3
The plan
▪ Software crisis?
▪ Resurrection of FP
▪ Erlang
▪ Erlang concurrency model
▪ Elixir
▪ Elixir is not Ruby
▪ You should try Elixir
4
Common characteristic of
present software
▪ low quality
▪ very inefficient
▪ difficult to maintain
6
Nathan Myhrvold’s laws
▪ “Software is a gas”
▪ “Software grows until it becomes
limited by Moore’s Law”
▪ “Software growth makes Moore’s
Law possible”
▪ “Software is only limited by
human ambition and expectation”
7
Nathan Myhrvold, formerly CTO at Microsoft
Niklaus Wirth’s Law:
“Software gets slower
faster than hardware
gets faster”
8
Niklaus Wirth, computer scientist,
designer of several PL (incl. Pascal)
New hardware:
▪ Multicore systems
▪ ASIC (Application-specific
integrated circuit)
▪ FPGA (Field-programmable gate
array)
12
“The von Neumann Syndrome”
New software:
Multicore crisis:
To take advantage of the additional
cores most applications have to be
rewritten
13
Functional programming
FP is a programming paradigm
that treats computation as the
evaluation of mathematical
functions.
FP: Data structures manipulated
through functions
OOP: Objects manipulated through
methods
15
FP concepts
▪ High-order functions
▪ Pure functions
▪ Recursions
▪ Lazy evaluations
▪ Currying
▪ Closures
16
History
FP:
▪ Lisp, 1950s
▪ APL, 1960s
▪ Haskell, late 80s
▪ Erlang, 1986
OOP:
▪ Simula, 1960s
▪ Smalltalk, 1970s
▪ Java, Ruby, 1995
17
CPU:
▪ Single-processor machines
▪ 50%/year clock speed growth
▪ From ~10MHz to ~1GHz
RAM:
▪ Relatively expensive and slow
▪ $100/1Mb in 1990. $1/1Mb in 2000
▪ CPU cache
OOP dominating in 90s
18
▪ Functions do things
▪ Data structures just are
Since functions and data structures
are completely different types of
animal it is fundamentally
incorrect to lock them up in the
same cage.
Objection 1:
Data structure and functions
should not be bound together
21
▪ Should “time” to be an instance
of some type?
▪ Should a simple integer number to
be an instance of some type?
Objection 2:
Everything has to be an object
22
▪ lots of types with limited amount
of specific functions
Isn't it better have a smallish
number of ubiquitous data types and
a large number of small functions
that work on them?
Objection 3:
Data type definitions are
spread out all over the place
23
The state is hidden and visible
only through access functions.
State is the root of all evil!
Objection 4:
Objects have private state
24
▪ It was thought to be easy to
learn.
▪ It was thought to make code reuse
easier.
▪ It was hyped.
▪ It created a new software
industry.
Why OO was popular?
(c) Joe Armstrong
26
I see no evidence of 1 and 2.
Reasons 3 and 4 seem to be
the driving force behind the
technology.
27
If a language technology is so bad
that it creates a new industry to
solve problems of its own making then
it must be a good idea for the guys
who want to make money.
28
▪ Elixir compiler is written in
Erlang
▪ Both Elixir and Erlang compiles
into BEAM byte code
Elixir == Erlang
30
▪ Ericsson, 1986
▪ Joe Armstrong, Robert Virding and
Mike Williams
▪ Open-sourced in 1998
▪ Telecom systems (telephone
switches)
▪ The latest version is 19.1
Erlang
31
▪ Modules
▪ Functions
▪ Primitive data types:
atoms, integers, floats, tuples,
lists, maps, strings, binaries,
records, references, pids, ports,
funs.
Erlang components
34
In response to a message actor
receives, can concurrently:
▪ send a finite number of messages
to other actors
▪ create a finite number of new
actors
▪ Set the “state” to be used for
the next message it receives
Actors
38
▪ Controlled by BEAM VM
▪ ~ 1µs to create process
▪ ~ 1kB memory per process
▪ ~ 1µs to pass a message
Erlang actors
39
▪ Tools
▪ Libraries
Design principles:
▪ Workers and Supervisors
▪ GenServer, GenFSM
▪ Event Handler and Manager
▪ Application
Erlang OTP
41
▪ Jose Valim, 2012
▪ Current version 1.3
▪ Hex.pm
▪ >3000 packages, ~20000 down/day
▪ Elixir Conf EU, Elixir Conf US
▪ Elixir Companies
▪ Phoenix web framework
(2M websocket conns)
Elixir
43
What is Elixir?
44
Elixir is Erlang with pretty syntax
and metaprogramming
▪ Consistent stdlib
▪ Pipe operator
▪ Tools (mix, iex, logger)
Elixir is functional
47
▪ Function is a primary Elixir
abstraction.
▪ Data is immutable
▪ Minimal state manipulation
Ruby is OO language
with some FP features
48
▪ Procs, lambdas
▪ No FP optimizations
▪ Data is mutable
Concurrency model
49
In Ruby, one moves through a
monolithic call stack, manipulating
objects. Threads or fibers uses the
same memory heap.
Elixir processes have their own
heaps, and the VM collects process'
garbage independently of each
other.
What is the same?
50
“programmer happiness” philosophy:
▪ Pretty syntax
▪ Good documentation
▪ Tools for easy development
Think about future software
52
▪ Multi-core computers
▪ IoT with up to 30 billion devices
to be online by 2020
You’ll found it exciting
54
▪ It’s easy to get started
▪ Lots of tutorials
▪ Nice documentation
▪ Great community