9. 튜플 정해진 수의 항목을 하나의 개체로 그룹핑 C 의 구조체와 비슷. 익명 구조체 1> Rect = {rect, 10, 45}. {rect, 10, 45} 2> {rect, X, Y} = Rect. {rect, 10, 45} 3> X. 10 4> Y. 45 {rect, 10, 45} {rect, X , Y }
10. 리스트 [ Head | Tail ] 1> L = [1,2,3,4]. [1,2,3,4] 2> [H|T] = L. [1,2,3,4] 3> H. 1 4> T. [2,3,4] 5> [H1|T1] = T. [2,3,4] 6> H1. 2 7> T1. [3,4,] [1 , 2,3,4] [H| T ] [2 , 3,4] [H1| T1 ]
14. The Free Lunch Is Over The Free Lunch? The Free Performance Lunch! 싱글코어CPU 의 발전한계. 멀티코어 CPU Concurrency is the next major revolution in how we write software. -Herb Sutter
15. 병행성 지향 프로그래밍 Concurrency-oriented programming 처음부터 병행성을 고려해서 만든 언어. 공유 메모리가 없음 잠금 매커니즘필요없음 쉽게 병행 프로그래밍 가능
16. 단일 할당 변수 1> X. 1: variable ‘X' is unbound 2> X = 50. 50 3> X = 23. ** exception error: no match of right hand side value 23 변수가 아니라 write-once 변수 즉 한번만 bound 를 할 수 있음
17. 패턴매칭 X = 50. = 은 할당연산자가 아니라 패턴매칭연산자. 오른쪽을 평가해서 그 결과를 왼쪽에 있는 패턴과 매치하라는 뜻.
18. 왜 단일 할당이 프로그램을 더 낫게 만드는가? 변수의 값을 바꿀수 있다? 누가 언제 바꿨는지 깔끔하게 알기힘듬. 복잡한 잠금 매커니즘 필요. 변수의 값을 바꿀수 없다? 불변상태의 메모리는 read 만 가능. 잠금 매커니즘이필요없다. 즉 쉬운 병행 프로그래밍 가능 어떻게? 프로세스 메시지 전달 방식으로.
19. Pure message passing language 순수 메시지 전달 언어 명령어 3개로병행프로그래밍 가능 spawn : 프로세스 생성 ! (send) : 메시지 보내기 receive : 메시지 받기
20. $ erl 1> Pid = spawn(fun area:loop/0). <0.45.0> 2> Pid! {rect, 6, 10}. rect : 60 3> Pid! {circle, 5}. circle : 78.5 4> Pid! {triangle, 2, 4, 5}. what is it? triangle?
34. 여러머신의 네트워크 분산처리 Erlang node 간의 message 전달방식으로 쉬운분산처리 가능 Erlang node 란 이름을 가지고 있는 Erlang runtime system 이름을 가진 Erlang shell
35. 여러머신의 네트워크 분산처리 server 라는 이름의 Erlang node 실행 $erl –sname server (server@serverhost) 1> 쿠키 각 node 는 쿠키를 한개씩 가지고있고 쿠키가 같은노드끼리만 통신가능 $erl –sname client –setcookieabc (client@clienthost) 1>
44. (server@host)1> fault:start(). …5초후… system down !! =ERROR REPORT==== 7-Jan-2009::23:56:29 === Error in process <0.67.0> on node 'server@host' with exit value: {badarith,[{fault,work,0}]} (server@host)2>
46. (server@host)1> fault:start(). …5초후… system down !! =ERROR REPORT==== 7-Jan-2009::23:56:29 === Error in process <0.67.0> on node 'server@host' with exit value: {badarith,[{fault,work,0}]} …5초후… system down !! =ERROR REPORT==== 7-Jan-2009::23:56:34 === Error in process <0.68.0> on node 'server@host' with exit value: {badarith,[{fault,work,0}]}
52. Erlang? 애텀, fun, 튜플, 리스트 병행성 공유메모리가 없음 – 잠금필요없음 spawn, ! , receive 3개 명령어 멀티코어 process 여러 개 spawn 해서 처리하고 취합 분산 Erlang node 와 표준 라이브러리 rpc 무정지 process link