2011년 2월 9일 수요일

Erlang , Haskell hybrid?

http://haskell.org/haskellwiki/Applications_and_libraries/Interfacing_other_languages/Erlang

Erlang Application과 Haskell Application간의 IPC를 위해서 준비하고 있는 모습.

Erlang은 Fault-tolerant, Scability, Stability가 인정되었기 때문에,
Frontend Server로 사용하고,
Haskell은 Logic Solver로 쓰려고 하려는 시도인 듯 하다.

하지만, Erlang을 쓸바에야, 차라리 C++ Frontend를 쓰는 편이 낫다.
왜냐하면, Erlang의 강력한 기능인 Hot code swap을 쓰지 못하고,
Logic Programming의 안정성을 Haskell에서 확보한다는 뜻인데,
결국, Logic Programming의 안정성(특히, 위기상황 대처능력)은 Haskell의 수준에 맞춰지고,
Latency만 올라가는 꼴이 된다. C++이 안정성은 확보 못할지라도, latency를 줄여줄 것이다.

Erlang은 VM의 garbage collection을 per-process단위로 heap을 만들었다.
그것은, 작은 프로세스 단위로, 분산 컴퓨팅이 되길 바라는 의미이다.
그런데, Erlang을 frontend로 쓰는 것은 어불성설인 것 같다.
( http://yarivsblog.blogspot.com/2008/05/erlang-vs-scala.html )

다른 구조로, Erlang의 작은 process들을 여러개 쓰고, 반대로 haskell process가 main controller역할을 한다고 해도, Erlang의 hotspot swap기능을 살릴 수 없다.

기본적으로 hybrid형태는 복잡도를 증가시키기 때문에 바람직한 architecture가 아니라고 생각한다.

하루 빨리 Haskell에 Distributed Computing(Actor Style System), Frontend Server로서의 안정성이 확보되길 바라고, Erlang의 hot code swap/remote shell기능마저 자체적으로 들어가길 바란다.
( http://stackoverflow.com/questions/394645/haskell-for-a-server )
( http://www.haskell.org/pipermail/haskell-cafe/2010-July/080427.html: hot-swap 빨리 구현 되길 ^^
 http://www.flickr.com/photos/48809572@N02/5304662424/lightbox/
http://www.0x61.com/forum/programming-haskell-cafe-f245/hot-swap-with-haskell-t1289472-10.html )


아직까지는 Erlang이 대규모 서비스에는 적합한 듯 하다. 다만, dynamic typing 만 보완되면 좋겠고, syntax도 보완되면 좋겠다;;
( http://jjinux.blogspot.com/2009/02/haskell-or-erlang.html )
( http://stackoverflow.com/questions/532176/erlang-type-system )

현재는, Erlang on server-side, Haskell on client-side가 답이다.
( http://learnyousomeerlang.com/content )
( http://learnyouahaskell.com/chapters )

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^