30
yzh44yzh.com Erlang Прагматичный рассказ про прагматичный язык

Erlang: прагматичный рассказ про прагматичный язык

Embed Size (px)

Citation preview

yzh44yzh.com

ErlangПрагматичный рассказ про прагматичный язык

yzh44yzh.com

● Немного истории

● Обзор языка

● Многопоточность● Устойчивость к ошибкам● Распределенность● Горячее обновление

● Live Coding: сервис сокращенных ссылок

● OTP фреймворк

● Сфера применения. Истории успеха.

● Импровизация по другим темам :)

yzh44yzh.com

Немного истории

● Ericsson 70-e годы. Язык и ОС PLEX

● 1985 г – исследование существующих языков

● 1987 г – началась разработка Erlang

● 1995 г – релиз Erlang

● 1996 г – релиз OTP

● 1998 г – Erlang/OTP выпущены в open source

● 2006 г – рост популярности платформы

yzh44yzh.com

Обзор языка.

● Многопоточность

● Устойчивость к ошибкам

● Распределенность

● Горячее обновление

yzh44yzh.com

Обзор языка.

● Erlang Run-Time System (ERTS)

● Sheduler● I/O● Garbage Collector

yzh44yzh.com

Обзор языка. Многопоточность.

● Shared memory with locks? Нет (ну почти нет)

● Software transactional memory? Нет (ну почти нет)

● Futures, Promises и подобное? Нет

● Message Passing – это оно :)

yzh44yzh.com

Обзор языка. Многопоточность.

run() -> Pid = spawn(fun ping/0), Pid ! self(), receive pong -> ok end.

ping() -> receive From -> From ! pong end.

yzh44yzh.com

Обзор языка. Устойчивость к ошибкам.

Try … catch – не нужно

Defensive Programming – не нужно

yzh44yzh.com

Обзор языка. Устойчивость к ошибкам.

Let It Crush

yzh44yzh.com

Обзор языка. Устойчивость к ошибкам.

Делаем только Happy Case :)

yzh44yzh.com

Обзор языка. Устойчивость к ошибкам.

yzh44yzh.com

Обзор языка. Распределенность.

Erlang Node

yzh44yzh.com

Обзор языка. Распределенность.

Message Passing

Location Transparency

yzh44yzh.com

Обзор языка. Распределенность.

Trusted окружение

TCP сокеты

или

yzh44yzh.com

Обзор языка. Горячее обновление.

● Обновить beam

● Использовать инфраструктуру OTP фреймворка

yzh44yzh.com

OTP фреймворк.

Open Telecom Platform

yzh44yzh.com

OTP фреймворк.

Set of principles:● Supervision Trees● Behaviours● Applications● Releases

yzh44yzh.com

OTP фреймворк. Behaviours.

● gen_server● gen_event● gen_fsm● supervisor

yzh44yzh.com

OTP фреймворк. gen_server.

● init/1

● handle_call/3

● handle_cast/2

● handle_info/2

● terminate/2

● code_change/3

yzh44yzh.com

OTP фреймворк. gen_event.

● event

● event manager

● event handlers

yzh44yzh.com

OTP фреймворк. gen_event.

● gen_event:start({local, manager_name}).

● gen_event:add_handler(manager_name, handler_module, []).

● gen_event:notify(manager_name, event).

● gen_event:delete_handler(manager_name, handler_module, []).

yzh44yzh.com

OTP фреймворк. gen_fsm.

Finite State Machine

yzh44yzh.com

OTP фреймворк. supervisor.

Restart Strategy:

● one_for_one

● one_for_all

● rest_for_one

yzh44yzh.com

OTP фреймворк. supervisor.

Child Specification:

● Id = term()

● StartFunc = {M, F, A}

● Restart = permanent | transient | temporary

● Shutdown = brutal_kill | integer() >=0 | infinity

● Type = worker | supervisor

● Modules = [Module]

yzh44yzh.com

OTP фреймворк. application.

Directory Structure:

● src -- contains the Erlang source code.

● ebin -- contains the Erlang object code, the beam files.

● include -- used for include files.

● priv -- used for application specific files.

yzh44yzh.com

OTP фреймворк. application.

application resource file

{application, ch_app, [{description, "Channel allocator"}, {vsn, "1"}, {modules, [ch_app, ch_sup, ch3]}, {registered, [ch3]}, {applications, [kernel, stdlib, sasl]}, {mod, {ch_app,[]}} ]}.

yzh44yzh.com

Сфера применения.

Долгоживущие сервеные приложения, обеспечивающие коммуникацию большого числа пользователей.

● computer telephony

● messaging systems

● retail and commercial banking

● enterprise

● web services

yzh44yzh.com

Истории успеха.

AXD301 ATM Switch

● telephony-class 10–160 Gbps ATM switch

● 1.5 million lines of Erlang code

● has been installed in networks all over the world

● largest “Voice over ATM” backbone in the world

● 99.9999999% availability.

● Erlang code was 4 to 10 times shorter than similar systems written in C/C++, Java, and PLEX

yzh44yzh.com

Истории успеха.

CouchDB

● open source database made by Damien Katz

● schema-less replicated document store, storing objects in JSON format

● and accessed through a RESTful interface.

● first version of CouchDB in C++

● entire C++ code base was replaced with Erlang

● one of the best known Erlang open source applications currently being used in production systems worldwide.

yzh44yzh.com

Импровизация по другим темам :)

● Недостатки языка

● Средства разработки (Emacs, Erlide, ErlGray)

● Книги

● Чем Erlang лучше Scala, чем Scala лучше Erlang?

● Как убедить себя, работодателя, заказчика использовать Erlang?

● Предложите свою тему :)