|> Jakub Gutkowski
kuba@gutek.pl
// lisp
(defun fibonacci (n &optional (a 0) (b 1) (acc ()))
(if (zerop n)
(nreverse acc)
(fibonacci (1- n) b (+ a b) (cons a acc))))
// clojure
(def fib-seq
((fn rfib [a b]
(lazy-seq (cons a (rfib b (+ a b)))))
0 1))
// C#
public int Fib(int n)
{
if (n == 0 || n == 1)
{
return n;
}
else
{
Fib(n - 1) + Fib(n - 2);
}
}
// elixir
defmodule Fib do
def fib(0) do 0 end
def fib(1) do 1 end
def fib(n) do fib(n-1) + fib(n-2) end
end
BEAM
|> Wymyślony dla centralek telefonicznych
|> Sprawdzony w boju
|> Wykorzystywany przez:
|> Amazon (SimpleDB)
|> FB (messages)
|> WhatsApp (FB)
|> Ericsson | T-Mobile | Motorola
|> RabbitMQ
|> CouchDB
|> Riak
|> Odśmiecanie pamięci
|> Podmianę kodu w locie, bez zatrzymywania systemu
|> Obliczenia rozproszone (distributed computing)
|> Przetważanie współbieżne (concurrency)
|> Dużą dostępność, aplikacje działające non stop
|> Fault tolerant
|> W zależności od źródeł: Aktor Model || a la Aktor Model
PS.: Aplikacje dążą do tego by mieć taki mikroservice model jak ma erlang, a dokłądniej, każdy soft co chce mieć microservices implementuje tak jakby erlanga...
WSZYSTKO
Open Telecom Platform
|> Zbiór bibliotek
|> Zbiór narzędzi
|> Zbiór modułów
brew update
brew install elixir
cinst elixir
|> scaffolding
|> a la yeoman
|> a la dotnet (core)
REPL
:debugger.start
|> cokolwiek lub
|> Atom
|> VS Code
|> Sublime
|> Vim
|> Emacs
czyli to co mogło mi być powiedziane i byłoby pozamiatane
photo: Shane Willis
Metaprogramming
które musiałem zrozumieć i wyciągnąć przed nawias, a które spowalniały moją naukę (zakręty)
if(x > 100) do
"old"
else
if(x > 80) do
"quite old"
else
if(x > 60) do
"still young"
else
if(x > 40) do
"young"
else
if(x > 20) do
"almost young"
else
if(x > 10) do
"teenage"
else
"ekhm"
end
end
end
end
end
end
|> język na bazie 30 lat doświadczenia Erlanga
|> wymaga zmiany sposobu myślenia
|> 3 cechy: immutability, meta, pattern matching
|> 3 zasady: no return, rekurencja, przejrzysty kod
|> jest śliczny
|> niski poziom wejścia w język (łatwo się zakochać)