Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

이 페이지는 Erlang를 공부하기 위한 목적으로 만들어 졌다. 앞으로 꾸준히 정리해 나갈 생각이다.

Erlang 소개

Erlang은 범용적으로 사용가능한 concurrent 프로그래밍 언어다. 즉 동시성제어를 필요로 하는 병렬시스템, 분산처리(:12) 시스템의 개발을 위한 언어라고 할 수 있을 것 같다. 또한 strict evaluation, single assignment, dynamic typing 을 지원하는 함수형 언어이기도 하다. 동시성을 만족하기 위해서 Actor:::model(:12) 을 적용했다고 하는데, Actor model은 기회가 되면 한번 공부해봐야 될 것 같다.

함수형 언어

인간의 표면적인 의식의 흐름은 절차지향적이다. 표면적이라고 제한을 둔 이유는 인간의 내면적인 의식의 흐름의 경우 단순히 절차지향적이라고 말하기는 힘들기 때문이다. 우리가 어떤 일을 처리하는 방식이라든지 의사소통을 위한 언어의 경우를 봐도 대체로 절차지향적임을 알 수 있다. A일을 하고 B 일을 하고 다음에 C일을 해야지라는 식으로 순차적으로 일을 처리하는 식이다. 여기에서 일이 좀 복잡해지면 선택을 통한 분기를 하게 된다. 선택을 통한 분기 역시 순차적으로 일을 처리한다고 볼 수 있을 것이다.

이러한 절차지향적인 언어 혹은 사고방식은 구술적이라는 특징을 가진다. 구술적인 정보교환이나 일의 처리가 가지는 가장 큰 장점은 역시 인간적이며, 빠르게 이해할 수 있다 - 즉 직관적이다 -. 라는게 될 것이다. 구술은 하나의 문장에 다양한 의미를 담을 수 있다는 특징도 가지고 있는데, 이는 문학작품을 창작하는데 유리한 특징이다. 구술적인 특징을 가지는 대표적인 도구가 인간의 언어가 될 수 있을 것이다.

반면 몇가지 단점도 가지고 있는데, 여러가지 의미로 해석될 수 있기 때문에 의미가 명확하게 전달되지 않을 경우가 있으며, 결과에 의해서 조건 자체가 변경될 수 있다거나 하는 문제 - 아 다르고 어 다르다-가 생길 수 있다는 점이다. 똑같은 의미를 다양한 방법으로 전달할 수 있다는 것도 문제가 될 수 있다. 사람사이의 오해라는게 이러한 문제들때문에 생기는게 대부분이도 하고 말이다. 사람들 사이의 오해라면, 대게의 경우 언어를 이용해서 심각하지 않은 수준에서 마무리 지을 수 있지만, 자연과학등에서의 자연현상을 기술하고자 할때는 인간언어의 이러한 모호함이 큰 문제가 될 것이다.

이러한 문제를 해결하기 위해서 만들어진 도구가 과학의 언어라고 하는 수학이다. 수학은 인간의 언어가 가지는 문제점들을 해결했다. 명료하고 간결하고, 수학이라는 언어에 사용되는 기호를 완전히 알고만 있다면, 의미가 잘못 전달될 가능 성도 없다. 반면 수학은 인간적이지 않다는 커다란 문제점을 가진다. 수학은 인간적인 사고방식과는 거리가 상당히 있다. 일상생활에서 수학이 사용되는 빈도를 생각해보면 이해될 것이다. 심지어는 과학논문 조차도 수학공식은 고작해야 10% 내외에서 사용될 뿐이다.

절차지향적언어는 즉 인간의 표면적인 의식의 흐름을 따라서 프로그램을 제작할 수 있도록 제작되어진 프로그래밍 언어를 의미한다. C(:12), C++, Java(:12), Perl, Python, Ruby등의 언어등이 절차지향적언어이거나 절차지향적인 특징을 가지고 있다. 절차지향적 언어의 장점은 인간의 언어와 그 흐름이 비슷하다는데 있을 것이다. 인간의식의 흐름과 비슷하기 때문에 어색하지 않고, 쉽게 배울 수 있다는 점 대게의 경우 범용적으로 사용하기에 문제가 없다는 점이다. 단점도 역시 인간언어의 그것과 비슷하다. 명확하지 않으며, 잘못 해석되고, 잘못 작성될 여지가 있으며, 결과에 따라서 혹은 새로운 흐름이 추가됨으로써 조건 자체가 바뀌어 버린다거나 하는 부수효과(side effect) 가 발생할 수 있다는 점이다.

함수형언어절차지향적언어가 가지는 이러한 문제점들을 해결하기 위해서 만들어진 언어다. 함수형 프로그래밍 언어는 계산을 수학적 함수의 조합으로 생각하는 방식을 말한다. 수학공식에서 하나의 기호가 하나의 function이 되는 것으로 생각하면 될 것이다. 함수형언어는 수학의 장점을 가진다. 간결하며, 명료하고 수행결과에 따라서 조건이 바뀌는 식의 side:::effect(:12)도 발생하지 않는다.

함수형 언어는 람다대수를 통해서 이론적 기반이 만들어졌다. 이를 기반으로 해서 최초로 만들어진 함수형 프로그래밍 언어가 IPL이고, 여기에서 발전되어서 Lisp이 만들어졌다.

함수형 언어의 제한

새로운 패러다임이 등장하고 거기에 패러다임이 꽤 쓸만하다고 생각되면, 기존의 패러다임은 용도폐기되어야 한다고 주장하는 경우가 있다. 이는 때때로 새로운 패러다임에 대한 과도한 환호와 기존 패러다임에 대한 혐오로까지 발전하는걸 볼 수 있다. 새로운 언어, 개발툴, 운영체제가 만들어지면 어렵지 않게 볼 수 있는 현상들이다.

하지만 그런일은 발생하지 않는다.

구술문화관점에서 문자문화는 패러다임의 변화였다. 그러나 구술문화가 사라졌는가 ? 지금에 들어와서는 커뮤니케이션(:12)으로써의 구술문화의 가치가 더욱 높아지고 있다. 기존의 패러다임이 폐기되는 경우는 거의 없다. 있다고 하더라도 오랜시간에 걸쳐서 서서히 이루어진다. 혁명은 그리흔한 사건이 아니다.

기존의 절차지향적언어는 폐기될 일은 없을 것이다. 꼭 관성 때문인것 만은 아니다. 어느게 더 낫다거나 실패한 패러다임이 아닌 다른패러다임이기 때문이다. 서로의 역할이 있다는 점이다. 논문에서 수학과 인간의 언어가 함께 쓰이는 것처럼 말이다.

함수형 언어로써의 Erlang

함수형 언어는 side:::effect(:12) - 부수효과 - 를 가지지 않는다. 이것은 함수의 실행이 외부에 영향을 끼치지 않는다는 얘기가 되된다. 때문에 함수형 언어는 thread safe하며, 병렬적인 계산에 적합할 수 있다.

공부방법

일단 erlang tutorial 문서로 입문을 한뒤, 관심있는 부분들을 자세히 보는 방식으로 공부를 해볼 생각이다. 입문 문서는 attachment:getting_started-5.4.pdf 로 할 것이다. 그다음 tuple, concurrent 프로그래밍, Distributed 프로그래밍, Error handling,등등을 살펴보면 되지 싶다. 개념이 잡히면, 웹서버나 채팅서버, RSS(:12)수집기 등을 제작해보는 걸로 어느정도 마무리 되리라 생각된다.

관련문서

  • attachment:getting_started-5.4.pdf : 일단 이걸 입문서 삼아서 공부해볼 생각이다.
제목 저자 변경일