Wstęp do. Erlanga. Mateusz Lenik

Podobne dokumenty
ξ II.UWr Erlang - wprowadzenie Marek Materzok 29 października 2007

Erlang! Politechnika Poznańska. Łukasz Cieśnik, (Politechnika Poznańska) Erlang!

(Apache) CouchDB. Krzysztof Kulewski 2008

Język programowania Erlang

Integracja komunikatora opartego o protokół XMPP z dużym portalem internetowym

CouchDB. Michał Nowikowski

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Język programowania Erlang

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Narzędzia podnoszące jakość procesu wytwarzania i wdrażania

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

OSGi Agata Hejmej

JAX-RS czyli REST w Javie. Adam Kędziora

Czym jest Ruby on Rails?

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Optymalizacja programów Open Source. Profilery wysokiego poziomu część 1. Krzysztof Lichota

Programowanie obiektowe

Wstęp do Programowania potok funkcyjny

Google Android. Opracował Maciej Ciurlik

ActiveXperts SMS Messaging Server

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Acceptance Test Driven Development wspierane przez narzędzie ROBOT Framework. Edyta Tomalik Grzegorz Ziemiecki

Pracownia problemowa 2009/2010 Prowadzący: mgr inż. Michał Pryczek środa, 8:15

Analiza i projektowanie aplikacji Java

Zagadnienia programowania obiektowego

Wstęp do Programowania potok funkcyjny

Paradygmaty programowania

Domain-specific Languages. Języki dziedzinowe. Adam Robaszyński-Janiec

Dokumentacja techniczna API systemu SimPay.pl

Programowanie w internecie nazwa przedmiotu SYLABUS A. Informacje ogólne

Lista zagadnień kierunkowych pomocniczych w przygotowaniu do egzaminu dyplomowego magisterskiego Kierunek: Mechatronika

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Ruby i Ruby on Rails. Mateusz Drożdżyński

VMware vsphere: Automation Fast Track

WPROWADZENIE. Użycie PHP

Wprowadzenie do programowania aplikacji mobilnych

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład XII

Laboratorium Programowania Kart Elektronicznych

INŻYNIERIA OPROGRAMOWANIA

Nazwa pochodzi od imienia znanego logika Haskell a Brooks a Curry ego ( )

Rozproszony system kontroli wersji GIT. Piotr Macuk

Fundusze Europejskie dla rozwoju innowacyjnej gospodarki Dotacje na innowacje Inwestujemy w Waszą przyszłość Bydgoszcz, r.

Nagios czyli jak mieć na oku zasoby sieci. Przygotował: Andrzej Nowrot Leon Sp. z o.o.

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Letnia Akademia SUSE. Implementacja nowych rozwiązań open source wszystko, co musisz wiedzieć!

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Zaawansowane programowanie w języku C++

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

Wywoływanie procedur zdalnych

Fundusze Europejskie dla rozwoju innowacyjnej gospodarki Dotacje na innowacje Inwestujemy w Waszą przyszłość Bydgoszcz, r.

Język UML w modelowaniu systemów informatycznych

Bezpieczeństwo systemów komputerowych

Wybrane działy Informatyki Stosowanej

Serwery. Autorzy: Karol Czosnowski Mateusz Kaźmierczak

Programowanie w C. dr inż. Stanisław Wszelak

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

HermesEX. Dokumentacja serwisowa v

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Programowanie Komponentowe WebAPI

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Program szkolenia: JavaScript Craftsmanship

Wątki i komunikacja między nimi w języku Python

Automatyzacja narzędziami open source nie musi być trudna

Czym jest technologia Bluetooth?

Programowanie w Javie 2. Płock, 26 luty 2014 r.

Wywoływanie procedur zdalnych

WYKŁAD 1 ANGULARJS CZĘŚĆ 1

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie.

Program szkolenia: Tworzenie aplikacji w Ruby on Rails z wykorzystaniem zwinnych metodyk

Redis, skrypty w języku Lua

KARTA SZKOLENIA 1/5. Po ukończeniu szkolenia uczestnik będzie potrafił:

Wywoływanie procedur zdalnych

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Ruby on Rails. Supersilnik WWW. Łukasz Włodarczyk

Deduplikacja danych. Zarządzanie jakością danych podstawowych

Opis przedmiotu zamówienia. Część IV. Dostawa niewyłącznej, nieograniczonej czasowo licencji oprogramowania Microsoft Serwer 2012 R2 DataCenter x64.

Hurtownie danych wykład 5

Komunikacja Człowiek-Komputer

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Laboratorium Programowania Kart Elektronicznych

Programowanie zespołowe

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Skrypty BASH a. Systemy Operacyjne 2. Mateusz Hołenko. 4 października 2012

Python wstęp do programowania dla użytkowników WCSS

Narzędzia i trendy Big Data

Problemy niezawodnego przetwarzania w systemach zorientowanych na usługi

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Architektura mikroserwisów na platformie Spring IO

Firebird Alternatywa dla popularnych darmowych systemów bazodanowych MySQL i Postgres

ipfon Web Services API wersja 1.0.3

Programowanie obiektowe 2 - opis przedmiotu

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Zenoss. Monitorowanie nowoczesnej serwerowni

Dni: 3. Opis: Adresaci szkolenia

Transkrypt:

Wstęp do Erlanga Mateusz Lenik

Erlang

Erlang powstał latach 80 ubiegłego wieku

Erlang powstał latach 80 ubiegłego wieku to funkcyjny język programowania

Erlang powstał latach 80 ubiegłego wieku to funkcyjny język programowania jest Open Source

Erlang dynamicznie typowanie

Erlang dynamicznie typowanie pojedyncze przypisanie

Erlang dynamicznie typowanie pojedyncze przypisanie zachłanna ewaluacja

Erlang dynamicznie typowanie pojedyncze przypisanie zachłanna ewaluacja brak pętli

Erlang pozwala tworzyć rozproszone systemy

Erlang pozwala tworzyć rozproszone systemy o wysokiej dostępności

Erlang pozwala tworzyć rozproszone systemy o wysokiej dostępności i niezawodności

Zastosowania systemy telekomunikacyjne (switche, itp.)

Zastosowania systemy telekomunikacyjne (switche, itp.) bazy danych (CouchDB, Riak)

Zastosowania systemy telekomunikacyjne (switche, itp.) bazy danych (CouchDB, Riak) serwery (Yaws, WebMachine, ejabberd)

WebMachine

WebMachine framework dla aplikacji internetowych

WebMachine framework dla aplikacji internetowych wszystko jest zasobem

WebMachine framework dla aplikacji internetowych wszystko jest zasobem implementacja w Erlangu lub Ruby

WebMachine framework dla aplikacji internetowych wszystko jest zasobem implementacja w Erlangu lub Ruby oparta na maszynie stanowej

WebMachine framework dla aplikacji internetowych wszystko jest zasobem implementacja w Erlangu lub Ruby HTTP done The oparta na maszynie stanowej Right Way

Hello, Erlang! -module(hello). -export([greet/0]). greet() -> io:format("hello, Erlang!~n").

Hello, Erlang! $ erl Eshell V5.9 (abort with ^G) 1> c(hello). {ok,hello} 2> hello:greet(). Hello, Erlang! ok 3>

Hello, Erlang! -module(hello). -export([greet/0]). greet() -> io:format("hello, Erlang!~n").

Hello, Erlang! -module(hello). -export([greet/0]). greet() -> io:format("hello, Erlang!~n").

Hello, Erlang! -module(hello). -export([greet/0]). greet() -> io:format("hello, Erlang!~n").

Hello, Erlang! -module(hello). -export([greet/0]). -import(io, [format/1]). greet() -> io:format("hello, Erlang!~n").

Silnia -module(math). -export([fac/1]). fac(n) when N > 0 -> N*fac(N-1); fac(0) -> 1.

Silnia -module(math). -export([fac/1]). fac(n) when N > 0 -> N*fac(N-1); fac(0) -> 1.

Silnia -module(math). -export([fac/1]). fac(n) when N > 0 -> N*fac(N-1); fac(0) -> 1.

-module(math). Silnia -export([fac/1, fac_tail/1]).... fac_tail(n) -> fac_tail(n, 1). fac_tail(0, Acc) -> Acc; fac_tail(n, Acc) when N > 0 -> fac_tail(n-1, N*Acc).

Odwracanie list -module(list). -export([rev/1]). rev([]) -> []; rev([first Rest]) -> rev(rest) ++ [First].

Odwracanie list -module(list). -export([rev/1]).... rev_tail(l) -> rev_tail(l, []). rev_tail([], Acc) -> Acc; rev_tail([first Rest], Acc) -> rev_tail(rest, [First Acc]).

Actor Model lekkie procesy wysyłające wiadomości każdy proces ma skrzynkę odbiorczą każdy proces może wysłać wiadomość

echo() -> receive {Pid, ping} -> Pid! pong, echo(); die -> ok end.

$ erl Eshell V5.9 (abort with ^G) 1> c(echos). {ok,echos} 2> Pid = spawn(echos, echo, []). <54.0> 3> Pid! {self(), ping}. {<32.0>, ping} 4> flush(). Shell got pong ok 5>

echo() -> receive {Pid, ping} -> Pid! pong, echo(); die -> ok end.

echo() -> receive {Pid, ping} -> Pid! pong, echo(); die -> ok end.

Let it fail

Let it fail monitor kontroluje stan procesu

Let it fail monitor kontroluje stan procesu monitor restartuje procesy

Let it fail monitor kontroluje stan procesu monitor restartuje procesy błąd w jednym procesie nie zakłóca pracy reszty systemu

Hot Code Loading

Hot Code Loading przeładowanie kodu bez restartu systemu

Hot Code Loading przeładowanie kodu bez restartu systemu jednocześnie mogą działać dwie wersje kodu

Hot Code Loading przeładowanie kodu bez restartu systemu jednocześnie mogą działać dwie wersje kodu ułatwia wprowadzanie poprawek systemu

echo() -> receive {Pid, ping} -> Pid! pong, echo(); die -> ok; reload ->?MODULE:echo() end.

$ erl Eshell V5.9 (abort with ^G) 1> c(echos). {ok,echos} 2> Pid = spawn(echos, echo, []). <54.0> 3> Pid! {self(), "hello"}. {<32.0>, "hello"} 4> flush(). ok 5>

echo() -> receive {Pid, ping} -> Pid! pong, echo(); {Pid, Msg} -> Pid! Msg, echo(); die -> ok; reload ->?MODULE:echo() end.

5> c(echos). {ok, echos} 6> Pid! reload. reload 7> Pid! {self(), "hello"}. {<32.0>, "hello"} 8> flush(). Shell got "hello" Shell got "hello" ok 9>

Kilka słów o OTP

Open Telecom Platform zbiór narzędzi i około 50 bibliotek

Open Telecom Platform zbiór narzędzi i około 50 bibliotek rodzaj standardowej biblioteki

Open Telecom Platform zbiór narzędzi i około 50 bibliotek rodzaj standardowej biblioteki jest dostarczany razem z Erlangiem

Open Telecom Platform zbiór narzędzi i około 50 bibliotek rodzaj standardowej biblioteki jest dostarczany razem z Erlangiem przyspiesza tworzenie aplikacji

Co dostajemy z OTP

Co dostajemy z OTP odpowiednik make

Co dostajemy z OTP odpowiednik make debugger

Co dostajemy z OTP odpowiednik make debugger profiler

Co dostajemy z OTP odpowiednik make debugger profiler silnik bazodanowy

Co dostajemy z OTP odpowiednik make REPL debugger profiler silnik bazodanowy

Co dostajemy z OTP odpowiednik make debugger REPL -behaviours profiler silnik bazodanowy

Co dostajemy z OTP odpowiednik make debugger profiler REPL -behaviours interpreter skryptów silnik bazodanowy

Co dostajemy z OTP odpowiednik make debugger profiler silnik bazodanowy REPL -behaviours interpreter skryptów i wiele innych

Materiały erlang.org learnyousomeerlang.com

Dziękuję za uwagę Pytania?