2008. 11. 10. 15:02
erlang...
2008. 11. 10. 15:02 in programming
erlang이란 언어를 잠깐 보면서 느낀 것들...
첫번째로, C++에서의 meta programming이 자꾸 머리속에 그려졌다. c++에서의 흉내 흉내로 볼수 있겠지만, 나 같은 경우, 절차형 언어인 c++스타일에 익숙하고, 함수형 언어에 대한 개념이 부족했기 때문에, 함수형 언어라는 스타일이 익숙하지 않은 것이 사실이며, 실제, 그 용도에 대해서 의문을 가지고 있는 것이 사실이다.
함수형 언어에 어느 정도 익숙해 진다면, 나의 meta programming에 대한 이해도 역시 높아 지지 않을까 기대 해 보게 된다.
factorial 구하는 예제를 통해서, erlang과 meta programming의 비슷한 구조를 살펴 보자.
예1) erlang
# 모듈
-module(tut1).
-export([fac/1]).
fac(1) ->
1;
fac(N) ->
N * fac(N - 1).
#compile
1> c(tut1).
{ok,tut1}
#excute
2> tut1:fac(4).
24
-module(tut1).
-export([fac/1]).
fac(1) ->
1;
fac(N) ->
N * fac(N - 1).
#compile
1> c(tut1).
{ok,tut1}
#excute
2> tut1:fac(4).
24
예2) c++
template<int num>
struct fac
{
enum { result = num * fac<num-1>::result};
};
template<>
struct fac<1>
{
enum {result = 1};
};
void main()
{
cout << fac<4>::result << endl;
}
보시다 시피 아주 비슷한 구조를 가지고 있지 않은가?
erlang이라는 언어는 오늘에서야 처음 봤지만, 지금까지 본 예제들은 대부분 재귀호출과 패턴매칭(c++에서는 템플릿 특수화라고 불리울수 있는...)이 기본 골격이라고 보여진다.
두번째는 C#에서의 linq가 함수형 언어의 패러다임이 도입된 형태라는 것이다. C#이나 linq를 거의 써본적이 없기는 하지만(1주일 정도 해 본거 같다.), 생각해보면 그거 써볼때도, 람다식이니 하는 얘기들을 본거 같은데, 솔직히 함수형 언어에 대한 이해 자체가 없었기 때문에, linq의 기본 개념 조차 생각해 본적이 없었다가, 오늘 erlang를 잠깐 이나마 보고 나니, linq과 비슷한 부분이 많다는 것을 알게 되었다. 역시 아는 만큼 보인다는 말이 실감이 되는거 같다.
이제야 튜토리얼 몇개를 보고, 실행 조차 못해본(50mb 다운받는데 3시간이 넘게 걸린다, 다운 받고 있는 사이에, 튜토리얼 대충 훝어 보고, 이글 쓰고, 하드카피로 인쇄하고, 담배 두대 피고 왔는데도, 아직 한시간 넘게 남았다. T_T )처지에서 더 이상의 얘기를 하는 것은 무리...!!!