PHP, Perl, Ruby, Python 비교

나는 왜 PHP보다 Python을 좋아하는가? 깔끔한 문법이 일단 매력이지만 그게 다가 아니다.

기능 비교 (( http://en.wikipedia.org/wiki/First-class_function, http://en.wikipedia.org/wiki/List_comprehension, http://en.wikipedia.org/wiki/Mixin ))

일단은 언어의 강력함에서 큰 차이를 보인다. 생산성에 신경쓰는 언어들이라면 당연히 지원해 줄 법한 기능들에 대해 PHP는 너무나도 무심하다.

PHP Perl Ruby Python
Higher-order functions Arguments Yes Yes Yes Yes
Results Yes Yes Yes Yes
Non-local variables Nested functions No (( Nested functions are created at global scope once the outer function is executed. )) 6 Yes Yes
Anonymous functions 5.3 Yes Yes Yes
Closures 5.3 (( Anonymous functions could be created using create_function but could not refer to variable in the outer scope. )) Yes Yes Yes
Partial application No 6 1.9 (( Explicit currying with Proc#curry )) 2.5 (( Explicit partial application with functools.partial ))
List comprehension No No No Yes
Mixin No 6 Yes Yes

Anonymous functions와 Closures를 PHP 5.3에서 지원하기는 하지만 그 기능을 웹애플리케이션을 개발할 때 사용하기엔 PHP 5.3이 너무 최근(2009년)에 나왔다. 내 애플리케이션의 요구사항을 PHP 5.3 이상으로 하는 것은 시기상조다.

성능 비교

아래의 링크를 보면 모든 테스트케이스에서 python이 php보다 훨씬 좋은 성능을 보인다. pypy나 psyco를 사용한다면 상대가 안되는 수준이 될 듯.

프로그래밍 언어들을 한문장으로 소개

Perl

Perl is a language optimized for scanning arbitrary text files, extracting information from those text files, and printing reports based on that information. ((man perl))
펄은 텍스트를 다루는데 최적화된 언어다.

Python

Python is an interpreted, interactive, object-oriented programming language  that  combines  remarkable power with very clear syntax. ((man python))
파이썬은 매우 간결한 문법이 특징.
동의한표. 내가 써 본 언어 중에서 가장 문법이 간결했다. 물론 lisp 계열은 제외하고.

Ruby

Ruby is an interpreted scripting language for quick and easy object-oriented programming. ((man ruby))
루비는 빠르고 쉬운 OOP를 위한 스크립트 언어다.
여기서 빠르다는건 성능이 아니라 생산성을 의미하는 것이겠지. 확실히 파이썬보다 코드를 짧게 작성할 수 있다.

PHP

PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. ((man php))
PHP는 원래 HTML에 끼워넣는 것에 특화된 언어다.
언어가 좀 엉성해 보이고 빈약해서 난 항상 불만이긴 한데, 어찌보면 그런 점도 이런 지향점을 고려하면 타당한 것일 수 있다.

C++

C++ is a general purpose programming language with a bias towards systems programming that
* is a better C
* supports data abstraction
* supports object-oriented programming
* supports generic programming. ((http://www2.research.att.com/~bs/C++.html))
C++은 C보다 좋은 언어라고 한다.
잘못하면 싸움나겠네.

J

J is a modern, high-level, general-purpose, high-performance programming language. ((http://www.jsoftware.com/))
현대적 고수준 다목적 고성능 언어.
그리고 C++ 보다도 어려운 것 같아.

Lisp

Lisp is a programmable programming language. ((책 <On Lisp>의 서문에서. Paul Graham은 “It’s difficult to convey the essence of a programming language in one sentence, but John Foderaro has come close:” 라고 말하며 이 정의를 소개한다.))
정말 멋진 정의다!

Java?

자바는 공신력 있고 설득력 있는 한문장 소개를 찾지 못했다. C++ 보다도 정체성이 불분명한 녀석이다.