목요일, 5월 26, 2005

language power

c/c++

그만큼 최적화된 속도로 어플리케이션을 만들 수 있게 만들어주는 것은 assembly 뿐, assembly code 의 잇점은 고작해야 멋대로 stack unwinding 따위를 할 수 있게 해주고, spagetti code 를 이용하여 context save를 줄일 수 있는 ( c/c++ 의 공격적인 inlining 으로 비슷한 효과를 볼 수 있다) 정도다. c++ 의 경우 memory hungry 한 환경에서는 쓸 수 없다. exception 과 RTTI 따위로 이래저래 쓸데 없이 메모리를 먹는다. (물론 디스에이블하고 쓰는 pedant 들도 있다. )
다른 언어가 c/c++ 만큼 최적화를 할 수 없는 단 한가지 이유는 c/c++ 의 자료형태가 memory 의 alignment 와 cache-miss 를 생각하면서 프로그래밍하기 편하게 되어 있기 때문이다. 소위 high-level language 에서는 그런 자유가 없다.

java

java 는 문법만 보면 pascal 과 비슷할 정도로 pedentic 하고 쓸데 없지만, java 를 웹 플랫폼으로 볼 경우 큰 장점을 제공한다. java 는 html embeding 이 jsp 를 사용해서 편리하게 되고, remote call 을 EJB 로 제공하고, 소위 web 을 통한 system 을 구축할 경우 all-in-one package 다. 게다가 static language 라서 native code genration 시 performance 또한 강력하다.

python

python 의 가장 큰 장점은 productivity 다. peopleware 에서는 툴에 따라 생산성이 달라지지 않는다고 했지만, python 을 쓴 rapid-prototyping 이나, c 의 6~10 배 정도의 computation load 를 참아 줄 수 있는 상황이라면 정말 강력하다. 생산성의 이유는 1. language 의 core 가 가장 잘 관리되고 있다. (IDE 관점에서도 다른 script language 는 따라오기 힘들다. ) 2. 어떤 라이브러리를 찾던 다 있을지어다 이다. 약점? 없을리 없다. threading 이다. 더 자세한 것에 관심이 있다면 GIL 을 구글링 하면 된다.

perl

perl 도 python 과 같은 장점을 가지고 있다고 주장할 perl aficianado 들이 있겠지만, 개인적인 경험으로는 cpan 의 criss-cross reference 되어 있고 perl core 에 따라서 인컴패터블한 라이브러리를 깔려고 시도해 본사람이라면, perl 이 만만치 않은 물건이라는데 동의할 것이다. perl 의 장점은 5.8 에서 부터 지원된 java 의 threading semantic 과도 흡사한 threading 을 통한 industrial strength 와 regular expression engine 이다. perl/expect/bash 는 awk/sed/sh 을 현재로썬 대체해버린 어드민들의 친구이기도 하다.

lisp

lisp 이라고 하면 lisp dialect 의 총칭이고, 현재 살아남은 놈들이라면, ansi common lisp/scheme/emacs lisp 정도다. 이 패밀리의 특징이라면. 1. interpreter 든 compiler 든 만들기 위해서 문법 파싱이 필요 없다. 2. church 의 computation model 인 lambda calculus 와 잘 대응한다. (특히 scheme) 사실 두가지 이유로 랭귀지의 문법이 아닌 시멘틱스를 연구하는 입장에서는 툴로 많이 쓴다. 그 외에 정말 powerful 한 feature 라면 syntax 자체를 변형하여 사용할 수 있는 강력한 마크로 기능이다. 이에 대해서는 Paul Graham 의 yahoo 에 팔아먹은 회사 이야기가 좋은 레퍼런스다.

0 Comments:

댓글 쓰기

<< Home