프로그래밍 언어의 비교
| 프로그래밍 언어의 비교 |
|---|
|
|
프로그래밍 언어는 기계(또는 컴퓨터)를 제어하기 위해서 사용된다. 프로그래밍 언어도 자연어와 같이 의미를 정의하기 위해서 구문적, 의미적인 규칙을 사용한다.
현재 수천 개의 프로그램 언어[1]가 있고, 매년 새로운 것들이 생겨나고 있다. 대부분의 언어는 많은 사람들이 사용하는 일반적인 언어로 발전하지 못했다. 많은 전문 프로그래머들은 수십 가지의 다른 언어를 사용하고 있다.
전반적인 비교
아래의 표는 주요 프로그래밍 언어를 비교하고 있다. 자세한 정보는 각 언어별 문서를 참조.
| 언어 | 실행 모델 | 영향 받음 | 방법론 | 타입 시스템 | 등장시기 |
|---|---|---|---|---|---|
| 에이다 | 컴파일러 | 알골 (Ada 83), 파스칼, C++ (Ada 95), 스몰토크 (Ada 95), 자바 (Ada 2005) | 동시성, 분산, 제네릭, 명령형, 객체지향 | static, strong, safe, nominative | 1983 |
| 알골 | 컴파일러 | 명령형 | static, strong, safe | 1958 | |
| 알골 60 | 컴파일러 | 알골 58 | 명령형 | static and dynamic typing, strong, safe | 1960 |
| 알골 68 | 인터프리터 / 컴파일러 / JIT 컴파일러 | 알골 60 | 동시성, 명령형 | static and dynamic typing, strong, safe, structural | 1968 |
| APL | 대부분 인터프리터, 약간 컴파일러 | 배열지향 | 1964 | ||
| B | 인터프리터, 컴파일러 | BCPL, Bon | 명령형 | 1969 | |
| 베이직 | 인터프리터, 컴파일러 | 1963 | |||
| C | 컴파일러 | 알골 68, B | 명령형, flow-driven | static, weak, unsafe | 1973 |
| C++ | 컴파일러 | C, 시뮬라, 알골 68 | 명령형, 객체지향, 제네릭, 다중 플랫폼 | static, strong, unsafe, nominative | 1985 |
| C# | JIT 컴파일러 | 델파이, 자바, C++, 파이썬 | 명령형, 객체지향, 제네릭 | static, strong, both safe and unsafe | 2000 |
| 코볼 | 컴파일러 | FLOW-MATIC, COMTRAN | 명령형, 객체지향 | weak/strong | 1959 |
| 콜드퓨전 | JIT 컴파일러 | HTML | 절차적, 함수형, 객체지향 | dynamic (덕 타이핑), weak | 1995 |
| 커먼 리스프 | 컴파일러 | 리스프, 스몰토크 | 명령형, 함수형, 객체지향 | dynamic, strong, safe | 1984 |
| D | 컴파일러 | C, C++, 자바, C# | 명령형, 객체지향, 제네릭 | static, strong, unsafe, contracts | 2000 |
| Eiffel | 컴파일러 | 에이다, 시뮬라 | 명령형, 객체지향, 제네릭 | static, strong, safe, nominative, contracts | 1985 |
| 얼랭 | 컴파일러 / 인터프리터 / JIT 컴파일러 | 프롤로그, Ericsson Pascal, CSP | 함수형, 동시성, 분산, 다중 플랫폼 | dynamic, weak | 1987 |
| F# | JIT 컴파일러 | C#, 오브젝티브 Caml | 함수형, 객체지향, 명령형, 제네릭 | static, strong, safe, nominative, 타입 유추 | 2005 |
| Forth | 인터프리터 / 컴파일러 | RPN, 어셈블리어 | 명령형, 스택지향 | typeless | 1977 |
| 포트란 | 컴파일러 | APL (포트란 90), 알골 68 (포트란 90), C (포트란 2003) | 명령형, 절차적, 객체지향 | static, strong, safe, nominative | 1957 |
| 하스켈 | 인터프리터 / 컴파일러 | 미란다, ML, λ-calculus | 함수형, 제네릭, lazy evaluation | static, strong, 타입 유추 | 1990 |
| 아이오 | 인터프리터 | 스몰토크, 셀프, 루아, NewtonScript, Act1 | 명령형, 객체지향 | dynamic | 2002 |
| 자바 | 인터프리터 / JIT 컴파일러 | C++, 오브젝티브-C, C#[2] | 명령형, 객체지향, 다중 플랫폼, 제네릭 | static, strong | 1994 |
| 자바스크립트 | 인터프리터, JIT 컴파일 | C, 셀프, awk, Perl | 명령형, 객체지향, 함수형 | dynamic | 1995 |
| Joy | 인터프리터 | RPN, Forth, 포스트스크립트 | 함수형, 스택지향 | typeless | 2005 |
| 리스프 | 인터프리터, 컴파일러 | λ-calculus | 함수형 | dynamic, strong | 1958 |
| 루아 | 인터프리터, JIT 컴파일러 | 파이썬, 아이콘, 리스프, 스킴 | 절차적, 명령형, 반영 | dynamic, strong, safe | 1993 |
| Mathematica | 인터프리터 | 리스프, APL | 함수형, 절차적 | dynamic, strong | 1986 |
| 오브젝티브-C | 컴파일러 | C, 스몰토크 | 명령형, 객체지향 | static/dynamic hybrid, strong | 1986 |
| 오브젝티브 Caml | 인터프리터 / 컴파일러 | ML, 리스프 | 객체지향, 함수형, 명령형, 제네릭 | static, safe, structural, 타입 유추 | 1996 |
| 오브젝트 파스칼 (델파이) | 컴파일러 | 파스칼 | 명령형, 객체지향, 다중 플랫폼 | static, strong, safe (but unsafe allowed), nominative | 1985 |
| 오즈 | 컴파일러 / 인터프리터 | 프롤로그 | 논리형, 함수형, 명령형, 객체지향, 동시 | 1991 | |
| 파스칼 | 컴파일러 | 알골 60 | 명령형 | static, strong, safe | 1970 |
| Perl | 인터프리터 | C, 셸, awk, sed, 리스프 | 함수형, 객체지향, 절차적 | dynamic | 1987 |
| PHP | 인터프리터 | Perl, C, C++, 자바 | 명령형, 객체지향 | dynamic, weak | 1995 |
| 프롤로그 | 컴파일러 (WAM) | 논리형-oriented | dynamic, strong | 1972 | |
| 파이썬 | 인터프리터 / JIT 컴파일러 | ABC, 알골 68, C, Perl, 모듈라-3 | 명령형, 객체지향, 함수형, 애스펙트지향 | dynamic (덕 타이핑), strong | 1991 |
| 루비 | 인터프리터 | 스몰토크, Perl, 파이썬, 리스프 | 명령형, 객체지향, 함수형, 애스펙트지향 | dynamic (덕 타이핑), strong | 1995 |
| 스칼라 | 인터프리터 / 컴파일러 | 자바 | 객체지향, 함수형, 제네릭 | static, strong, 일부 타입 유추 | 2003 |
| 스킴 | 인터프리터 / 컴파일러 | 리스프, 알골 60 | 함수형 | latent | 1975 |
| 본 셸 | 인터프리터 | 알골 68 | 명령형 | weak | 1977 |
| 스몰토크 | JIT 컴파일러 | Sketchpad, 시뮬라, 리스프 | 객체지향, 함수형, 동시, 이벤트 처리, 명령형, 선언형 | dynamic, strong, safe, 덕 타이핑 | 1971 |
| Tcl | 인터프리터 / JIT 컴파일러 | C, 리스프, 셸, awk, sed | 함수형, 객체지향, 명령형, 절차적, 이벤트 처리 | dynamic | 1988 |
| 비주얼 베이직 | 컴파일러 | 퀵베이직 | 컴포넌트 지향, 이벤트 처리 | static/dynamic hybrid, weak/strong hybrid, safe, nominative | 1991 |
| 비주얼 베이직 닷넷 | JIT 컴파일러 | 비주얼 베이직 | 객체지향, 이벤트 처리 | static, strong | 2001 |
| 비주얼 프롤로그 | 컴파일러 | 프롤로그, C++, C#, 하스켈, SML | 논리형, 객체지향, 함수형, 이벤트 처리, 명령형, 선언형 | static, strong, safe, nominative/structural | 1985 |
표현력
| 언어 | 문(文)의 비중[3] | 줄의 비중[4] |
|---|---|---|
| C | 1 | 1 |
| C++ | 2.5 | 1 |
| 포트란 | 2.5 | .8 |
| 자바 | 2.5 | 1.5 |
| MS 비주얼 베이직 | 4.5 | ? |
| 펄 | 6 | 6 |
| 스몰토크 | 6 | 6.25 |
| 파이썬 | 6 | 6.5 |
프로그래밍 언어에 관한 문헌에는 언어들의 상대적인 표현력에 관한 수많은 주장이 들어있지만, 정형화된 구조를 가지거나 합당한 결과를 도출하지 않는 것이 대부분이다.[5] 이 도표는 2개의 다른 출처로부터 온 2가지 표현력 측정을 제공한다. 추가적으로, GZip bytes로 표현력 측정은 The Computer Language Benchmarks Game의 비교 툴을 이용할 수 있다.
벤치마크
벤치마크는 컴포넌트나 시스템에 실제와 유사하게 만든 특정 패턴의 부하를 발생시킨다. 컴퓨터 프로그램은 벤치마크 자료를 컴파일하는데 사용된다. 이 경우 대부분 컴파일 최적화 옵션은 사용하지 않는다. 가장 정확성이 높은 벤치마크는 사용자의 특정 상황에 맞춘 벤치마크일 것이다. 다른 사람의 벤치마크 자료는 도움이 되지만, 많은 어려움을 극복해야 올바른 해석이 가능하다. 여기(영어)에 잘못 해석한 벤치마크 비교에 대한 자료가 있다. The Computer Language Benchmarks Game 사이트에는 사용자 참여로 이루어진 많은 마이크로 벤치마크가 있으며, 프로그래밍 언어간 비교에 다양한 도표와 표를 제공한다.
같이 보기
각주
- ↑ As of May 2006 Diarmuid Pigott's Encyclopedia of Computer Languages 보관됨 2011-02-20 - 웨이백 머신 hosted at Murdoch University, 오스트레일리아 lists 8512 computer languages.
- ↑ In Java 5.0, several features (the enhanced for loop, autoboxing, varargs, annotations and enums) were introduced, after proving themselves useful in the similar (and competing) language C#. [1][2][3] 보관됨 2012-07-27 - archive.today
- ↑ Data from Code Complete. The Statements ratio column "shows typical ratios of source statements in several high-level languages to the equivalent code in C. A higher ratio means that each line of code in the language listed accomplishes more than does each line of code in C.
- ↑ The ratio of line count tests won by each language to the number won by C when using the Compare to feature at http://shootout.alioth.debian.org/debian/c.php 보관됨 2007-07-04 - 웨이백 머신. Last updated May, 2006. C gcc was used for C, C++ g++ was used for C++, Fortran G95 was used for Fortran, Java JDK Server was used for Java, and Smalltalk GST was used for Smalltalk.
- ↑ From On the Expressive Power of Programming Languages, Matthias Felleisen, ESOP '90 3rd European Symposium on Programming.
외부 링크
- (영어) 99-bottles-of-beer.net — one program in over a thousand variations and multiple languages.
- (영어) The speed, size and dependability of programming languages — charts and narrative based on The Computer Language Benchmarks Game data.
- (영어) Which programs are fast? The Computer Language Benchmarks Game website language comparisons
- (영어) Comparison of syntaxes with sample codes.
- (영어) Syntax Across Languages
- (영어) Rosetta Code — a programming language comparison wiki
- (영어) A large scale study of programming languages and code quality in github A 2014 study of 19 programming languages doi:10.1145/2635868.2635922
- 웹아카이브 틀 웨이백 링크
- 웹아카이브 틀 archiveis 링크
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 프로그래밍 언어의 비교
- 프로그래밍 언어