4. erlang 이란 ?
erlang 의 발음은 얼랭
erlang 을 만든 사람은 Joe Amstrong
Ericsson 사에서 스위칭 소프트웨어에서 사용하기 위해 개
발
80 년대에는 전화국 스위칭 시스템에 무정지 작동 시스템으
로 돌아감
1998 년 오픈소스 전환됨
OTP(Open Telecom Platform) 이란 기본적인 통신관련 견고
한 프레임워크 제공함
5. erlang 의 특징
Pure Functional Program Language
모든 값들은 상수이다 .
= 이란 부등식이다 .
분산환경을 기반으로 언어가 설계되어 있다 .
ETS
erlang 에서 기본적으로 제공하는 key-value 테이블 제공
DETS
erlang 에서 ETS 을 분산적으로 처리하는 것
6. erlang 에 사용된 대표적
인 오픈소스
Riak
RabbitMQ
MochiWeb
CouchDB
7. erlang type
atom
소문자로 된 문자열
enum 과 비슷하지만 숫서나 이런게 없이 그냥 문자열 그 자체
a, true, hello...
변수 ( 상수 )
대문자로 시작하는 문자열
A = 1, This = 3, L = [1,2,3], Tuple={1,2,3}, Str =”String”
튜플
c 의 구조체와 비슷하지만 익명이 다른
P = {10,45}.
Person = {person, {name, joe}, {height, 1.82}}.
List
일반적인 fp 랭귀지의 리스트와 통일함 .
java 에서 사용한 리스트랑은 다름 .
L = [1,2,3]
ㅇㅇ
9. 패턴매칭
얼랭은 모든 변수가 상수이기 때문에 패턴매칭이 매우 중요함 .
= 이란 대입이 아닌 부등식에서 출발함 .
[A,B,C] = “abc”.
A == 97.
Person = {person , {name, jaejin}}.
{_,{_,Name}} = Person.
Name == jaejin.
[Head|Tail] = [1,2,3,4].
Head == 1, Tail == [2,3,4]
10. 가드
가드 예제
f(X,Y) when is_integer(X), X>Y -> X+Y;
f(X,Y) -> X.
True 가드
if
Guard-> Expressions;
Guard-> Expressions;
...
end
11. case 와 if 식
case 식
case Expression of
Pattern1 [when Guard1] -> Expr_seq1;
..
end
if 식
if
Guard1 -> Expr_seq;
...
end
12. 예외
try..catch 로 자바와 비슷함
try Expression of
Pattern1 -> Expression1;
...
catch
ExceptionType : ExPattern1 -> ExPression;
after
AfterExpressions
end
13. 구두점
,
and 표현됨 .
한 함수에서 여러줄을 처리할때는 사용 .
;
함수를 여러절로 나눌때 사용
수학에서 표현하는 방식과 동일
.
식이나 함수 등이 끝나는걸 표시
14. 함수
사용자 함수 만드는 방법
fibo(0) -> 1;
fibo(1)->1;
fib(N)->fibo(N) + fibo(N).
arity
그 함수가 가지는 인수의 수
위의 fibo 함수의 arity 는 1
표시 방법은 fibo/1
자바에서 오버로우딩이 여기에서 기본적으로 사용함
sum(L) -> sum(L,0).
sum([],N) -> N;
sum([H|T], N) -> sum(T, H+N).
익명의 함수
Z = fun(X) -> 2*x end.
lists:foldl(fun(X,Sum)->X+Sum end, [1,2,3,4]).
17. 병행성
Pid = spwan(Fun)
Fun 을 평하가흔 병행 프로세스 생성
Pid ! Message
식별자가 Pid 인 프로세스 메시지 보내기
receive ... end
프로세스로 전송된 메시지를 받는다 .
얼랭에선 일반적인 스레드 방식으로 병행성을 처리 하지 않는다 .
얼랭에선 client - server 로 메시지를 주고 받아서 병행성을 처리 한다 .
프로세스 등록 및 전달방법
register(hello, spwan(fun area_server:loop/0)).
hello ! {hello, “hello”}
18. 간단한 분산처리
동일한 호스트에서 하나는 클라이언트 , 다른 하나는 서버 .
swap 예제 README.md 에 예제 있음 .
실행방법
erl -sname 노드이름
동일 LAN 상에서 서로 다른 머신에 있는 클라이언트 서버
erl -name 노드이름 -setcookie 쿠키명
erl -sname 노드이름 @host -setcookie 쿠키명’
host 명은 DNS 가 아닌 동일 LAN 상이라서 /etc/hosts 에 등록해야
함
서로다른 서버에서 쿠기명을 동일하게 해야함