Brief S/W Development with Suresoft Technologies Inc. 2009.12
Outline 1 Language Some Configs Code 2 ErlKi 실무적용사례
Outline 1 Language Some Configs Code 2 ErlKi 실무적용사례
Why? 쉽고강력하다. 현재환경분산처리요구증가 Multicore CPU 대중화품질관련기대치상승 의강점대량의노드에서검증됨병렬처리에적합 (share nothing) 9 nines 사례 (AXD301) Down Time 최소화가능
Why? 쉽고강력하다. 현재환경분산처리요구증가 Multicore CPU 대중화품질관련기대치상승 의강점대량의노드에서검증됨병렬처리에적합 (share nothing) 9 nines 사례 (AXD301) Down Time 최소화가능
Why? 쉽고강력하다. 현재환경분산처리요구증가 Multicore CPU 대중화품질관련기대치상승 의강점대량의노드에서검증됨병렬처리에적합 (share nothing) 9 nines 사례 (AXD301) Down Time 최소화가능
Why? 쉽고강력하다. 현재환경분산처리요구증가 Multicore CPU 대중화품질관련기대치상승 의강점대량의노드에서검증됨병렬처리에적합 (share nothing) 9 nines 사례 (AXD301) Down Time 최소화가능
Why? 쉽고강력하다. 현재환경분산처리요구증가 Multicore CPU 대중화품질관련기대치상승 의강점대량의노드에서검증됨병렬처리에적합 (share nothing) 9 nines 사례 (AXD301) Down Time 최소화가능
Why? 쉽고강력하다. 현재환경분산처리요구증가 Multicore CPU 대중화품질관련기대치상승 의강점대량의노드에서검증됨병렬처리에적합 (share nothing) 9 nines 사례 (AXD301) Down Time 최소화가능
Why? 쉽고강력하다. 현재환경분산처리요구증가 Multicore CPU 대중화품질관련기대치상승 의강점대량의노드에서검증됨병렬처리에적합 (share nothing) 9 nines 사례 (AXD301) Down Time 최소화가능
특징 I 특징적 공유가없다동시성의관점에서만악의근원인공유객체가없다 a. 단지메시지를주고받을뿐이다. a 사실은 거의없다 가정확한표현이다.
특징 II 특징적 패턴매칭패턴이일치하지않으면에러다. ( 일종의 guided programming) 함수선언시 Guard 및 parameter 제어문 if case 등 list comprehension list 에서추출할때
특징 III 특징적 동시성특별한처리없이병렬프로그램으로변신가능하다 (OTP 등사용 ). 경량의프로세스 (green process) 들간에메시지로정보를교환한다. 프로세스생성및관리에드는비용이적다.
Outline 1 Language Some Configs Code 2 ErlKi 실무적용사례
Primitives arity foo/0, foo/1, bar/5 atom a, b, c, A list [a, b], [], abc tuple {a, b}, {Any, Any, Any} variable Str, L, H, T
Assignment 1 single 2 one time 1 3 immutable 4 invariant
Outline 1 Language Some Configs Code 2 ErlKi 실무적용사례
Distel Slime과유사한 Emacs Mode 1 설치 svn co http://distel.googlecode.com/svn/trunk distel cd distel make install 2 설정 (let ((distel-dir "/usr/local/share/distel/elisp")) (unless (member distel-dir load-path) ;; Add distel-dir to the end of load-path (setq load-path (append load-path (list distel-dir))))) (require distel)
Outline 1 Language Some Configs Code 2 ErlKi 실무적용사례
Quick Sort 자주소개되는예 5줄짜리퀵소트 quicksort([]) -> []; quicksort([pivot Rest]) -> quicksort([front Front <- Rest, Front < Pivot]) ++ [Pivot] ++ quicksort([back Back <- Rest, Back >= Pivot]).
패턴매칭 I Guards, Parameters, Control, List Comp. Guards foo(a) when is_list(a) ->... ; foo(a) when is_integer(a) ->... ; foo(_) -> error.
패턴매칭 II Guards, Parameters, Control, List Comp. Guards (lambda style) F = fun(x) when is_list(x) ->... ; (X) when is_integer(x) ->... ; (_) -> error.
패턴매칭 III Guards, Parameters, Control, List Comp. Parameters foo([h T]) -> do_somthing_with(h), foo(t); foo([]) -> done.
패턴매칭 IV Guards, Parameters, Control, List Comp. Control if Foo > 0 -> {pos, Foo}; true -> {neg, -Foo} end, case Foo of {neg, _} ->... ; {pos, _} ->... end.
패턴매칭 V Guards, Parameters, Control, List Comp. List Comprehension [{X * X, X * Y} {X, Y} <- [{1,2}, {3, 4}]] =:= [{1,2},{9,12}].
패턴매칭사용시참고사항 Underscore foo([h T]) ->... %% H 미사용시컴파일타임경고생김. foo([_h T]) ->... %% _H 미사용시경고없음. More Specific First Bad foo(x) ->... ; foo(x) when is_atom(x) ->... % 절대실행안됨 Good - Bad의반대.
Message Passing Concurrent Programming 의기초 function (in module "mp") loop() -> receive quit -> io:format(" quit arrived.\nquit"); Any -> io:format("rcv: ~p\n", [Any]), loop() end. fire! (w/ operator! ) > Pid = spawn(mp, loop, []). > Pid! "a". rcv: "a" "a
ErlKi 실무 적용 사례 Outline 1 Language Some Configs Code 2 ErlKi 실무적용사례
ErlKi 실무 적용 사례 Eunit http://svn.process-one.net/contribs/trunk/eunit/doc/overview-summary.html JUnit 과비슷한단위테스트도구 ( 현재는 OTP Lib에포함 ) 예제 -include_lib("eunit/include/eunit.hrl"). foo_test_() ->?_assert(... =:=... ). bar_test_() -> {setup, fun()->... end, % setup fun(r) ->... end, % cleanup (R은 setup의반환값 ) [?_assert(... ),?_assertnot(... ),?_assertmatch(... )].
ErlKi 실무 적용 사례 Leex http://www.erlang.org/doc/man/leex.html 원래 trap exit 쪽에올라왔던유틸이었으나최근 otp lib 에포함 Lexical analyzer(scanner) 생성기 (ErlKi 소스참조 )
ErlKi 실무 적용 사례 Yecc http://www.erlang.org/doc/man/yecc.html LALR-1 Parser 생성기 (ErlKi 소스참조 )
ErlKi 실무 적용 사례 Yaws http://yaws.hyber.org/ 고성능웹서버 JSP와비슷한문법 (ErlKi 소스및예제참조 ) <erl> {ehtml, {p, [{attr_name, attr_value,... ], [child_nodes]}}. </erl>
ErlKi 실무 적용 사례 Outline 1 Language Some Configs Code 2 ErlKi 실무적용사례
ErlKi 실무 적용 사례 대용량문서처리 Java Legacy system 대체 1 약 1억건의문건처리 2 실제수행속도는자바와비슷하거나더빨랐음 (IO Bound 라큰의미는없을수있음 ) 3 생산성은대략 1.5~2 배정도로추정 ( 실제재작성기간은기존 java 대비 1 /4 정도소요 ) 4 Mnesia DB 사용 disc_copies 는 2G limit 존재, subscribe() 사용하여단계별테이블처리.
ErlKi 실무 적용 사례 Trac 사이트통합 1 사내이슈관리시스템 2 여러개의사이트 (Agilo on Trac) 통합, 사용자별프로젝트별보고서생성 3 sqlite-erlang 수정, 활용
은쉽고강력하고실용적이며따라서, 충분히실무에적용가능하다.
Appendix For Further Reading For Further Reading I Joe Armstrong Programming : Software for a Concurrent World The Pragmatic Programmers, LLC. 2007. David S. Touretzky Common Lisp: A Gentle Introduction to Symbolic Computation The Benjamin/Cummings Publishing Company, Inc. 1990. What s all this fuss about? http://pragprog.com/articles/erlang