Upload
gokhan-boranalp
View
1.016
Download
2
Embed Size (px)
DESCRIPTION
Erlang 101 giriş semineri istanbul hackerspace
Citation preview
Erlang 101Istanbul Hacker Space
https://istanbulhs.org/
25 Kasim 2012Gokhan Boranalp
● Nereden nereye. ○ Tarihçe ve şimdiki durum.
● Dil● Önemli Noktalar● Kullananlar● Made with Erlang● Sorular
Tarihçe
● SHARED MEMORY WITH LOCKS● SOFTWARE TRANSACTIONAL MEMORY
(STM)● FUTURES, PROMISES, AND SIMILAR● MESSAGE PASSING
Process Modelleri
Karakteristik Özellikler
■ Message Passing■ Dynamic typed■ Actor model ■ Share Nothing■ Immutable Objects
Dil
1> io:format("Naber dunya~n").Naber dunyaok2> io:format("Naber, ~s!~n", [kanka]).Naber, kanka!ok
- ~s = %s printf C- ~n = \n
Dil
Atoms
- true, false, test_me, kunthar@local, 'EXIT'
Integers
- 10, -200, 12345678909999999999999999999
- 16#FFffFFff=4294967295
- 16#FF= 255
- $A = 65 (ASCII kod A)
Floats
3.14
-0.123
299792458.0
6.022137e23
6.6720e-11
Dil
Tuples- {1, 2, 3} {bir, iki, uc, dort} {buradan, "IHS", "sizi selamlar"} {complex, {nested, "structure", {here}}}
Lists[][1, 2, 3] [bir, iki, uc] [[1,2,3],[4,5,6]] [{yarin, "biraz oku"}, {sonra, "yuruyus yap"}, {enson, "otur da yaz"}]
Dil
String (list of ASCII codes) "merhaba" = [$m, $e, $r, $h, $a, $b, $a] = [109,101,114,104,97,98,97]
Binaries<<0, 1, 2, ..., 255>><<109,101,114,104,97,98,97>> = <<"merhaba">>
Binaries with Bit Syntax<<1:1,32787:15>> = 2#1111111111111111
Diger Data TipleriFuns (lambda expression or closure)Function-as-data-object
Dil
Pids (Process Identifiers)self().<0.31.0>
Ports #Port<0.472>.
References5> make_ref().#Ref<0.0.0.42>
Noktalama
○ (.) when hariç herşeyi sonlandir○ (;) koşulu sonlandır○ (,) ifadeyi (expressions) sonlandır
List Comprehensions
{2n : n in L}in Erlang: ○ brackets ({}) become square brackets ([]), ○ the colon (:) becomes two pipes (||) ○ and the word 'in' becomes the arrow (<-).
1> [2*N || N <- [1,2,3,4]].[2,4,6,8]
List Operations
List Operations
Anonymous Functions
Functions
Erlang Önemli Noktalar
● Declarative● Concurrency● Soft real-time● Robustness● Distribution● Hot code loading● External Interfaces● Portability
○ Functional programming language
○ High abstraction level○ Pattern matching○ Readable programs
Erlang Önemli Noktalar
● Declarative● Concurrency● Soft real-time● Robustness● Distribution● Hot code loading● External Interfaces● Portability
○ Solid concurrency model○ Scales to handle complex
concurrency○ Simple abstractions
Örnekler
spawn ile yeni bir process yaratmak
Pid = spawn(ex3,activity,[Joe,75,1024]) activity(Joe,75,1024)
Asenkron mesajlar
hard core concurrency
Erlang Önemli Noktalar
● Declarative● Concurrency● Soft real-time● Robustness● Distribution● Hot code loading● External Interfaces● Portability
○ Lightweight processes ○ Fast message passing○ Response times in the order of
milliseconds efficient garbage collection
Oynat Uğurcuğum
process creation times
message passing times
Erlang Önemli Noktalar
● Declarative● Concurrency● Soft real-time● Robustness● Distribution● Hot code loading● External Interfaces● Portability
○ Simple and consistent error recovery
○ Supervision hierarchies
Örnekler
process'ler birbirine bağlı çalışabilir!
proses hata kontrolü
- Proses sonlandığında, bağlı tüm proseslere exit sinyali gönderilir.
hata kontrolü (2)
- Exit sinyalleri "tuzaklanarak" (trap) messages şeklinde alınabilir.
Supervisors & Workers
Error handling
● No global variables -- fewer side-effects ● No direct memory access -- no pointer errors ● No malloc/free bugs ● Solid concurrency model -- reduces synchronization
problems, reduces the state space (simpler programs) ● Fault isolation -- memory-protected lightweight
processes ● Built-in error recovery support -- more consistency
Concurrency & Fault Tolerance were designed into the language from the start!
Debugging and Profiling Support
● Symbolic crash reports○ Usually sufficient info to locate bugs within minutes
● Built-in trace support○ Function calls (ability to filter on module name,
function and args) ○ Messages (+ sequence trace) ○ Process events (context switch, spawn, link, exit) ○ Garbage collections ○ Optionally with timestamps (can be used for profiling,
benchmarks)○ Trace to process, file, or port (network socket) ○ Also available on live systems
Erlang Önemli Noktalar
● Declarative● Concurrency● Soft real-time● Robustness● Distribution● Hot code loading● External Interfaces● Portability
○ Explicit or transparent distribution
○ Network-aware runtime system
Örnekler
Transparent Distribution
- başka bir bilgisayara prosesler arası mesaj gönderimi, aynı bilgisayarda mesaj gönderimi kadar kolaydır.
Simple RPC
Erlang Önemli Noktalar
● Declarative● Concurrency● Soft real-time● Robustness● Distribution● Hot code loading● External Interfaces● Portability
○ Easily change code in a running system
○ Enables non-stop operation○ Simplifies testing
Erlang Önemli Noktalar
● Declarative● Concurrency● Soft real-time● Robustness● Distribution● Hot code loading● External Interfaces● Portability
○ Ports to the outside world○ behave as Erlang processes
- Erlang Port Drivers
Erlang Önemli Noktalar
● Declarative● Concurrency● Soft real-time● Robustness● Distribution● Hot code loading● External Interfaces● Portability
○ Any UNIX○ Windows○ VxWorks etc.
Systems Overview
Erlang/OTP (Open Telecom Platform)
● Middleware for Erlang development ● Designed for fault tolerance and portability● Behaviors: A formalization of design patterns● Components
○ Error handling, reporting and logging○ Mnesia, distributed real-time database management
system CORBA, IDL Compiler, Java & C Interface Support ○ HTTP Server + Client, FTP Client ○ SNMP Agent + ASN.1 Compiler ○ H.248 ○ XML○ ...
OTP Behaviors
● "A formalization of design patterns"○ A framework + generic code to solve a common problem
○ Built-in support for debugging and software upgrade
○ Makes it easier to reason about the behavior of a program
● Examples of OTP behaviors application defines how an application is implemented
supervisor used to write fault-tolerant supervision trees
gen_server for writing client-server applications
gen_event for writing event handlers
gen_fsm for finite state machine programming
Büyük Projelerde Erlang
● Easy to build a first runnable application
● Easy to debug
● Easy to maintain
● Very strong support for fault tolerance
● Suitable for large systems/projects
● Great for prototyping
● Impressive performance/scalability in real applications Outstanding tool for test automation
● High programmer satisfaction
Kullananlar
● Amazon Web Servisleri - SQS ve SimpleDB● Facebook, chat● Twitter● Mochimedia● del.icio.us / Yahoo● T-Mobile● Telia● Bluetail/Alteon/Nortel● Github
Made with Erlang
○ Apache CouchDB – document-based DB with REST○ Disco – Map/Reduce framework for Erlang ○ Fuzed – Generic clustering framework (Powerset) ○ Mochiweb – Fast lightweight web server framework
(like Java Servlets for Erlang) ○ DHT – Distributed Key/Value Stores – 90% of all
implementations in Erlang – Dynomite, Scalaris, etc.○ Yaws web server○ Cowboy○ Nitrogen○ RabbitMQ○ Riak
Good fit for
● Irregular concurrency ○ Task-level parallelism ○ Fine-grained parallelism
● Network servers ● Distributed systems ● Middleware:
○ Parallel databases ○ Message Queue servers
● Soft Real-Time / Embedded applications ● Monitoring, control and testing tools
Kaynaklarhttp://en.wikipedia.org/wiki/Abstraction_%28computer_science%29http://is.gd/xHWvZ3
http://www.erlang.org
http://learnyousomeerlang.com/