태그 : Concurrency

Erlang 을 접해 보고


Programming Erlang: Software for a Concurrent World 를 읽었다.  이 책 한 권 읽고 Erlang을 잘 알게 되었다고 할 수는 없겠지만 어떤 것인지는 느낀 거 같다.

감상을 한마디로 말하자면 "괴물을 한 방에 쓰러뜨릴 수 있는 은빛 탄환은 없다"라는 말일 꺼다.  Erlang에 대한 소개를 간간히 접하면서 나는 Erlang에 동시성(Concurrency) 문제 해결을 위한 비책이 있는 줄로만 알았다. 부수 효과(Side Effect)가 없는 함수형 언어, 언어 차원에서 지원하는 프로세스 관리와 동시성 지원, 공유 상태가 없는 순수 메시지 패싱 방식이라는 등이 그런 것이다.  그러나 마치 마법과도 같은 위의 처방으로 동시성 문제를 획기적으로 해결하고 있다는 말은 사실이 아닌 듯 싶다.  그것보다는 모듈화와 캡슐화, 관심 사항의 분리, 그리고 잘 구현한 라이브러리라는 일반적인 처방을 잘 사용해서 좋은 시스템을 만들었다가 정답인 듯 싶다.

그전부터 Erlang에서 어떻게 부수 효과가 없이 우아하면서도 효율적인 IO를 구현했을지 궁금했다.  그리고 과연 공유 객체 없이 순수 메시지 패싱으로 어떻게 시스템 상태를 처리할지 궁금했다.  그러나 다소 심하게 말하자면 IO에 관련된 부분은 대충 얼버무리고 있다고 할 수 있고, 공유 객체가 사라진 것도 아니었다.  IO는 별로 드러나지 않게 한 것이고 공유 객체는 ETS, DETS 또는 Mnesia라는 통제된 방식으로 사용하는 게 다를 뿐이다.

그렇다고 Erlang이 형편없는 시스템이라는 건 아니다.  다만 역시 좋은 시스템은 소프트웨어 개발의 영원한 원칙 - 모듈화와 캡슐화, 적절한 분리, 라이브러리 구축 - 을 잘 따르고 있다는 걸 다시금 확인했다는 거다.  특정 기술 또는 환경을 사용한다고 해서 문제를 간단히 해결할 수 없다는 것과 더불어.

Erlang을 더 공부하고 익힐 수도 있겠지만 더 공부할 거 같진 않다.  분산 환경을 지원하기 위한 시스템은 멋지지만 언어 자체는 그다지 멋스럽지도 않고 - 만들어진지 좀 돼서 그런지 구식의 느낌도 든다. 그보다 더 오래된 Lisp은 안 그런데 말이다 - 표현력이나 확장성은 좀 제한적이라는 느낌이 든다.  그리고 나에겐 별로 재밌지도 않다.  세상에 공부할 언어는 많고 Erlang 보다 더 재밌는 언어도 많다.

by Corund | 2008/07/28 16:19 | 트랙백(1) | 덧글(0)

◀ 이전 페이지다음 페이지 ▶