ξ KSI @ II.UWr Erlang - wprowadzenie Marek Materzok 29 października 2007

Podobne dokumenty
Wstęp do. Erlanga. Mateusz Lenik

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

Język programowania Erlang

Elementy języka Erlang

Język programowania Erlang

Wykład 0 Informacje Podstawowe

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

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne. Wykład Ćwiczenia

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Systemy Rozproszone Technologia ICE

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne. Wykład Ćwiczenia

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

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Komunikacja Człowiek-Komputer

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne. Wykład Ćwiczenia

Obiektowy Caml. Paweł Boguszewski

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

Informatyka II stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

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

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

PRZEWODNIK PO PRZEDMIOCIE

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

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

INFORMATYKA Pytania ogólne na egzamin dyplomowy

Wstęp do programowania

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

Metaprogramowanie w Ruby

Zagadnienia programowania obiektowego

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

Paradygmaty programowania

Programowanie obiektowe

Automatyzacja procesów biznesowych Andrzej Sobecki. ESB Enterprise service bus

Programowanie MorphX Ax

Rok akademicki: 2015/2016 Kod: IIN s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Serwery. Autorzy: Karol Czosnowski Mateusz Kaźmierczak

Wstęp do programowania

Programowanie i projektowanie obiektowe

Programowanie współbieżne i rozproszone

ξ II.UWr Wprowadzenie do STM

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Projekt SGI. WP 3.1 Wirtualne laboratorium i teleimersja Jacek Cała. (cala@ics.agh.edu.pl) (luke@ics.agh.edu.pl) Łukasz Czekierda

Wprowadzenie. Dariusz Wawrzyniak 1

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

Język BPEL. Bussiness Process Execution Language

Kierunek: Informatyka Poziom studiów: Studia I stopnia Forma studiów: Stacjonarne. audytoryjne. Wykład Ćwiczenia

Laboratorium Programowania Kart Elektronicznych

Wykład 1: Wprowadzenie

Programowanie Komponentowe WebAPI

Laboratorium Programowania Kart Elektronicznych

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

Wykład I. Wprowadzenie do baz danych

Wstęp do programowania

Ekspert MS SQL Server Oferta nr 00/08

Programowanie obiektowe

PROJEKT WSPÓŁFINANSOWANY ZE ŚRODKÓW UNII EUROPEJSKIEJ W RAMACH EUROPEJSKIEGO FUNDUSZU SPOŁECZNEGO OPIS PRZEDMIOTU. studia pierwszego stopnia

System zarządzający grami programistycznymi Meridius

Redis, skrypty w języku Lua

Wprowadzenie do Objective-C

Podstawy programowania. Wprowadzenie

SARW S.C. Witold Rejner, Tomasz Wieczorek ul. Zegrzyńska 28A/ Jabłonna

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Wykład 1 Informacje Podstawowe

Wywoływanie metod zdalnych

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Języki programowania do zastosowań biomedycznych

Przegląd i ewaluacja narzędzi do szybkiego tworzenia interfejsu użytkownika (RAD).

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Programowanie obiektowe zastosowanie języka Java SE

Inżynieria Programowania - Projektowanie architektoniczne

Wykład 1 Informacje Podstawowe

Część I Dostęp do danych oraz moŝliwości programowe (silnik bazy danych)

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Matryca pokrycia efektów kształcenia

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Programowanie rozproszone w języku Java

OpenSocial w nk.pl. Janusz Dziemidowicz. PLNOG października nk.pl

Paradygmaty i języki programowania. Wprowadzenie. dr Robert Kowalczyk, Katedra Analizy Nieliniowej, WMiI UŁ 1

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Kurs rozszerzony języka Python

Większe możliwości dzięki LabVIEW 2009: programowanie równoległe, technologie bezprzewodowe i funkcje matematyczne w systemach czasu rzeczywistego

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Aplikacje Internetowe, Servlety, JSP i JDBC

Modelowanie i Programowanie Obiektowe

Programista do działu testów PDT/1401/T/TBG

Zasady organizacji projektów informatycznych

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

K_W04 K_W04 K_W04. Opis

Imię, nazwisko i tytuł/stopień KOORDYNATORA (-ÓW) kursu/przedmiotu zatwierdzającego protokoły w systemie USOS Dr Adam Naumowicz

(Apache) CouchDB. Krzysztof Kulewski 2008

Wywoływanie metod zdalnych

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

Przegląd języka Python. Łukasz Anwajler

Transkrypt:

Erlang - wprowadzenie Marek Materzok 29 października 2007

Powody powstania (1979-82) Doświadczenia Bjarne a Däckera z Lispem Projektowanie układów elektronicznych Kompilator dla urządzeń Ericcsona. Interpreter w Lispie 7 do 10 razy krótszy niż w Pascalu, a wystarczająco wydajny Kryzys oprogramowania EriPascal Wzorowany na języku Chill, który był używany w telekomunikacji Składnia Pascalowa, tylko przekazywanie komunikatów

Powody powstania (1984-86) Eksperymenty z językami - CSLab w Ericssonie Różne paradygmaty programowanie imperatywne, funkcjonalne, obiektowe, programowanie w logice Konkluzja wielkoskalowa, drobnoziarnista równoległość i asynchroniczne przekazywanie komunikatów okazały się bardzo pożądane

Pierwsze wersje Erlanga (1986-1990) Eksperymenty Joego Armstronga z Prologiem Język zmieniał się w kierunku programowania funkcjonalnego Powstały język został ochrzczony Erlang Pierwsze zastosowanie programowanie centrali telefonicznych XIII International Switching Symposium ISS 90 Erlang został pokazany światu Otwarcie źródeł 1998

Wybrane zastosowania AXD 301 przełączniki ATM Ericssona Mieszanka języków niski poziom w C, interfejs w Javie i JavaScripcie, sterowanie i zarządzanie w Erlangu ANx-DSL urządzenia DSL dla dostawców Internetu GPRS Serwer XMPP ejabberd

Cechy Dynamicznie typowany Programowanie funkcjonalne, pattern matching Call-by-value, efekty uboczne, brak przypisania Wielkoskalowa wielozadaniowość, brak współdzielenia Łagodny czas rzeczywisty Rozproszenie, dynamiczna rekonfiguracja Odporność na awarie Hot-swapping kodu

Moduły i funkcje -module(fib). -export([fib/1, fibr/1]). fibr(0) -> 0; fibr(1) -> 1; fibr(n) -> fibr(n-1) + fibr(n-2). fib(0) -> 0; fib(x) -> fib(0, 1, X). fib(_, N, 1) -> N; fib(n1, N2, X) -> fib(n2, N1+N2, X-1).

Interpreter interaktywny $ erl Erlang (BEAM) emulator version 5.5.2 Eshell V5.5.2 (abort with ^G) 1> c(fib). {ok,fib} 2> fib:fib(8). 21 3> fib:fibr(8). 21 4>

Krotki, atomy -module(temp). -export([convert/2]). convert({u, V}, U) -> {U, V}; convert({cs, V}, fh) -> {fh, (9/5)*V+32}; convert({fh, V}, cs) -> {cs, (5/9)*(V-32)}. Eshell V5.5.2 (abort with ^G) 1> c(temp). {ok,temp} 1> temp:convert({cs,36.6},fh). {fh,97.8800} 2>

Listy -module(qsort). -export([qsort/1]). qsort([]) -> []; qsort([h T]) -> qsort([x X <- T, X < H]) ++ [H] ++ qsort([x X <- T, X >= H]). Eshell V5.5.2 (abort with ^G) 1> c(qsort). {ok,qsort} 2> qsort:qsort([6,3,2,4]). [2,3,4,6] 3>

Pattern matching 1> {A,B} = {foo,[1,2]}. {foo,[1,2]} 2> {A,[C D]} = {foo, [1,2]}. {foo,[1,2]} 3> {A,B} = {bar, [1,2]}. =ERROR REPORT==== 27-Oct-2007::13:48:49 === Error in process <0.30.0> with exit value: {{badmatch,{bar,[1,2]}},[{erl_eval,expr,3}]} ** exited: {{badmatch,{bar,[1,2]}},[{erl_eval,expr,3}]} ** 4>

Przekazywanie komunikatów -module(primes). -export([run/0, printer/0, filter/1, talker/2]). run() -> Printer = spawn(primes, printer, []), Filter = spawn(primes, filter, [Printer]), spawn(primes, talker, [Filter, 2]). printer() -> receive N -> io:format("~w~n", [N]), printer() end. talker(target, N) -> Target! N, talker(target, N+1).

Przekazywanie komunikatów, 2 filter(target) -> receive N -> Target! N, Filter = spawn(primes, filter, [Target]), filter(filter, N) end. filter(target, N) -> receive K -> if K rem N /= 0 -> Target! K; true -> nothing end, filter(target, N) end.

Rozproszenie -module(distr). -export([start/0, proc/0]). start() -> Pid = spawn(b@localhost,distr,proc,[]), Pid! {self(), hello world }, receive X -> io:format("p1:~w~n", [X]) end. proc() -> receive {Pid, X} -> io:format(user, "P2:~w~n", [X]), Pid! X end.

Rozproszenie, 2 Eshell V5.5.2 (abort with ^G) (a@localhost)1> c(distr). {ok,distr} (a@localhost)2> distr:start(). P1: hello world ok (a@localhost)3> Eshell V5.5.2 (abort with ^G) (b@localhost)1> P2: hello world

Obsługa wyjątków Eshell V5.5.2 (abort with ^G) 1> catch(1). 1 2> catch(1/0). { EXIT,{badarith,[{erl_eval,eval_op,3}, {erl_eval,expr,5}, {shell,exprs,6}, {shell,eval_loop,3}]}} 3> catch(throw({wyjatek, bardzo_fajny})). {wyjatek,bardzo_fajny} 4>

Monitorowanie procesów -module(trap). -export([start/0, fail/0]). start() -> process_flag(trap_exit, true), spawn_link(trap, fail, []), receive { EXIT, Pid, Reason} -> io:format("failure ~w: ~w~n", [Pid, Reason]) end. fail() -> throw(failure).

Monitorowanie procesów, 2 Eshell V5.5.2 (abort with ^G) 1> c(trap). {ok,trap} 2> trap:start(). =ERROR REPORT==== 27-Oct-2007::15:03:03 === Error in process <0.37.0> with exit value: {{nocatch,failure},[{trap,fail,0}]} failure <0.37.0>: {{nocatch,failure},[{trap,fail,0}]} ok 3>

Wymiana kodu w trakcie pracy -module(codeswap). -export([start/0, server/0, client/1]). start() -> Pid = spawn(codeswap, server, []), spawn(codeswap, client, [Pid]). server() -> receive M -> io:format("received ~w~n", [M]), server() end. client(pid) -> Pid! hello, timer:sleep(1000), codeswap:client(pid).

Wymiana kodu w trakcie pracy, 2 Eshell V5.5.2 (abort with ^G) 1> c(codeswap). {ok,codeswap} 2> codeswap:start(). <0.38.0>received hello received hello received hello 3> c(codeswap). {ok,codeswap} received world received world

Open Telecommunications Platform Framework do tworzenia dużych aplikacji Mnesia rozproszona baza danych Implementacja SNMP Implementacja CORBA Kompilator ASN.1 Obsługa XML

Słowo na koniec Zachęcam do samodzielnych eksperymentów z językiem http://www.erlang.org/