2011년 2월 4일 금요일

haskell for an alternative programming languages

주류(main-stream)가 아닌 프로그래밍 언어를 대안 프로그래밍 언어라고 부른다.

나는 C++프로그래머이다.
최근 3년 동안, 여러 언어들을 알아보았다.
Erlang,OCaml,Scala,Python,Java,Ruby,SmallTalk,Ada,Lua
ErLang은 가장 reliable,fault-tolerant한 것으로 잘 알려져 있다. CouchDB등에서 쓰여지고 있다.
OCaml은 Imperative,OOP에 익숙했던 사람도 쉽게 함수형 언어로 넘어갈 수 있게 되어있다.MS도 OCaml을 차용하여, F#을 만들었다. 즉, MS도 인정한 언어이다.
Scala는 JVM내에서의 OCaml과 같은 식이다. 다양한 패러다임들을 수용하고 있다. 프로그래머에게 많은 편안함을 제공한다. Scala는 이름처럼 Scalability를 위해서 많이 수용되고 있다.
Python은 극한의 생산성을 제공하는 듯 하다. 대규모 서비스의 front-end언어로는 적합하지 않아 보인다. 중급 이하에서는 문제가 되지 않아 보인다. 툴 제작에는 아주 훌륭한 언어라고 생각한다.
Java는 대안언어라기 보다는 주류언어지만, 비판을 많이 받아왔다. 하지만 요즘은 나쁘지 않다. 왜냐하면, Java기반의 좋은 framework들이 많이 나왔다. spring,playframework등... 게다가 성능이 이들 중에서는 가장 최적화가 많이 된 상태이다.
Ruby는 Ruby on Rails를 통해 인기를 얻기 시작하여, 커뮤니티가 매우 크다. 천재적인 패러다임들이 가장 먼저 적용되고 있는 언어이다.
smalltalk,ada도 관심을 두고 알아보았고, 나름 매력이 있다. ADA는 literate programming에 가장 가까운 언어인 듯 하다. 구문이 영어와 많이 닮아 있다.
lua는 큰 규모에는 쓰기 어렵다.

불행히도, 이들 언어에 모두 제대로 입문하진 못했다.
모든 언어를 경험해보고 몸소 그 장단점을 깨달아보고 싶다.
모든 언어로 하나 이상의 프로젝트를 해 볼 계획이다.
하지만 간접적으로나마 깨달은 것 중에 가장 중요한 깨달음은 다음과 같았다.
1. 커뮤니티의 크기 : 커뮤니티가 크다는 것은 도메인 문제들을 잘 해결해주고 있다는 증거이고, 헌신하는 팬들과 투자가 많다는 것이다.
2. 프레임워크가 언어를 압도한다. : 루비의 예에서 보듯이, 언어 자체의 한계성보다는 마찬가지로 도메인 문제를 잘 해결해주기 때문에 인기를 얻을 수 있는 것이다.

앞으로 10년을 개발할 프로젝트에 쓰일 언어의 기준은 뭐가 되어야 할까?
패러랠,멀티코어,CPU/GPU 컨버젼스의 시대이다.
아키텍쳐의 변화를 수용하지 못하면, 결국 성능 결쟁에서 밀려날 것이다.
그러려면, 가장 자연적스러운 병렬 프로그래밍이 가능해야 한다!

아직 어느 언어도 그 기준에 맞지 않다.
그래서 새로운 언어를 만들어 보고 싶다.
그러기전에 '최선'의 선택, 또는 '차선'의 선택이 될 수 있는 언어에 익숙해지는 순서가 필요하다고 생각한다.
그 생각에서 가장 적합안 언어로 꽂힌 언어는 haskell이다.
haskell : 순수 함수형 언어이다. 배우기 어려울 뿐, 함수형 언어에 익숙해지면, 생산성이 매우 높아진다고 한다.(나도 아직 경험해 보지 못했고, 그렇게 되길 바란다. ) 최근 커뮤니티가 급성장하고 있다.

programming language shoot-out 을 보면, 성능 비교가 잘 되어 있다.
http://shootout.alioth.debian.org/
아마도 특정 분야에서는 C/C++을 버리지 못할 것 같다.
haskell에 기대를 걸어본다. 커지고 있는 커뮤니티가 더 최적화된 컴파일러를 만들어주리라 기대해 본다.

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