제일 짧게 프로그래밍할 수 있는 언어는 아이언파이썬이네요

cleansugar의 이미지

프로그래밍 언어 벤치마킹 사이트입니다.
http://shootout.alioth.debian.org/

이 사이트는 언어 벤치마킹 사이트 중 제일 유명한 곳이고 내용은 각종 알고리듬을 언어별로 짜서 비교하는 겁니다.

언어 벤치마킹 x86 싱글코어 버전입니다.

http://shootout.alioth.debian.org/u32/which-language-is-best.php?calc=calculate&xfullcpu=0&xmem=0&xloc=1&nbody=1&fannkuchredux=1&meteor=0&fasta=1&spectralnorm=1&revcomp=1&mandelbrot=1&knucleotide=1&regexdna=1&pidigits=1&chameneosredux=0&threadring=0&binarytrees=1

계속 루비가 1위를 하다가 최근에 파이썬으로 바뀌었습니다.

자바스크립트나 펄도 루비, 파이썬정도 분량입니다.

특히, 타입 선언이 없는 언어들이 분량이 적은 것 같습니다.

쿼드코어판에서는 파이썬3가 제일 짧다고 나옵니다.

http://shootout.alioth.debian.org/u32q/which-language-is-best.php?calc=calculate&xfullcpu=0&xmem=0&xloc=1&nbody=1&fannkuchredux=1&meteor=0&fasta=1&spectralnorm=1&revcomp=1&mandelbrot=1&knucleotide=1&regexdna=1&pidigits=1&chameneosredux=0&threadring=0&binarytrees=1

Time secs는 수행 시간, Memory KB는 사용 메모리, Code B는 gzip으로 압축한 용량을 나타냅니다.

GM이란 말이 이해가 안 갑니다.
http://en.wikipedia.org/wiki/Weighted_geometric_mean

For each benchmark, B is the best measurement; for each language implementation, the best measurement L is then normalized to L/B. GM is the Weighted Geometric Mean of those L/B ratios.

B가 수행 시도중 최대값이고 L은 언어 중 최대값인데 L/B로 정규화된다는 뜻인가요??

무슨 뜻이죠?

0,0,1을 입력하면 프로그램 분량을 벤치마킹할 수 있습니다.

전반적으로 파이썬, 루비, 자바스크립트, 펄, 루아, PHP가 분량이 적다고 나옵니다.

1,0,0을 입력하면 속도 비교가 됩니다.
http://shootout.alioth.debian.org/u32/which-language-is-best.php?calc=calculate&xfullcpu=1&xmem=0&xloc=0&nbody=1&fannkuchredux=1&meteor=0&fasta=1&spectralnorm=1&revcomp=1&mandelbrot=1&knucleotide=1&regexdna=1&pidigits=1&chameneosredux=0&threadring=0&binarytrees=1

C++, C, Java 6 Server, Scala, Ocaml, Free Pascal이 빠르다고 합니다.

Mono C#이 자바 Server보다 느리고, 파이썬보다 캐시 없는 PHP가 두배 이상 느립니다.

Java 6 Server와 Scala는 속도가 비슷합니다.

1,0,1을 입력하면 속도와 분량을 같이 가중치두는 것입니다.
http://shootout.alioth.debian.org/u32/which-language-is-best.php?calc=calculate&xfullcpu=1&xmem=0&xloc=1&nbody=1&fannkuchredux=1&meteor=0&fasta=1&spectralnorm=1&revcomp=1&mandelbrot=1&knucleotide=1&regexdna=1&pidigits=1&chameneosredux=0&threadring=0&binarytrees=1

이 순위는 C, C++, LuaJIT, Scala, Ocaml, Java 6 Server, Free Pascal, Haskell, Clean이 상위입니다.

Scala나 Ocaml같은 함수형 언어가 분량도 적고 속도도 씨정도로 빠르다니 매력적이네요.

실제 프로그래밍에 걸린 시간을 측정하는 벤치마킹도 나왔으면 좋겠습니다.

shint의 이미지

Lua는 정말 해보고 싶어요.
actionscript는 순위권에 보이지도 않네요..... 이럴수가;;;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

cleansugar의 이미지

액션스크립트는 측정 대상에 들어가있지 않습니다.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

RedPain의 이미지

가장 "짧게" 프로그래밍할 수 있는 언어는 golfscript죠. http://www.golfscript.com/golfscript/

cleansugar의 이미지

포쓰처럼 스택 언어네요. 정말 짧군요.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

하승수의 이미지

가중 기하 평균이라고 해야되나요?

각 벤치마크에서 최적치(제일 빠르다든가, 제일 작다든가)를 L
해당 벤치마크에서 특정 언어의 결과치를 B라고 하면

L/B는 각 벤치마크에 대해 그 언어의 정규화된 값이라고 할 수 있습니다.
비율이므로, 이들의 평균을 구할 때는 산술 평균( 다더해서 나누기) 가 아니라 기하 평균을 구합니다.(제곱들을 더해 루트씌우기)

이게 바로 여기서 말하는 Weighted Geometric Mean 입니다.

cleansugar의 이미지

Which programming language is best? The Weighted Geometric Mean
Read "How not to lie with statistics: the correct way to summarize benchmark results" (pdf).

For each benchmark, B is the best measurement; for each language implementation, the best measurement L is then normalized to L/B

GM is the Weighted Geometric Mean of those L/B ratios.

missing : Language implementations with more than a couple of Timeouts (at the largest workload) distort the ranking - so they have been excluded. They can still be compared directly against another language implementation.

다른 결과 지문과 표를 잘 읽어보니까 each benchmarks는 각각의 알고리듬을 얘기하는 겁니다.

each language implementations는 각각의 다른 종류의 언어를 뜻합니다.

언어1(c++) x1.0, GM1.14: 알고리듬a(regex-dna) a1초, 알고리듬b(reverse-complement) b2초, 알고리듬c(n-body) c3초
언어2(c) x1.2, GM1.42: 알고리듬a a2초, 알고리듬b b2초, 알고리듬c c2초
언어3(java) x1.7, GM1.93: 알고리듬a a3초, 알고리듬b b3초, 알고리듬c c3초

이렇게 되어 있을 때 GM이 어떻게 나온 건지 아시는 분 계신가요?

c++가 1이라고 할 때 c가 1.2배인 것은 이해가 가는데 GM이 1.14인 것은 구체적으로 어떻게 나온 건지 모르겠습니다.

스프레드시트로 계산을 해봤습니다.

L/B를 일단 구해야 되는데요, L은 알고리듬a 결과가 제일 빠르게 나온 언어x의 값을 얘기하는 것 같습니다.

B는 구하고싶은 언어1의 알고리듬a 결과입니다.

즉 어떤 언어의 알고리듬a 결과를 제일 빨리 나온 언어x값으로 나눈다는 뜻입니다.

나온 알고리듬a부터 알고리듬c까지를 전부 곱해서 3제곱근을 구하면 기하평균이 GM보다 약간 큰 값이 나왔습니다.

가중치를 어떻게 곱하는 건지 모르겠습니다.

가중치를 곱할 때 어떤 걸 가중치로 썼다는 걸까요?

알고리듬 중요성별로 가중치를 두었다는 뜻 같은데요.

그러니까 정리하면 GM이란 정확히말해 가중기하평균을 얘기하는 거고 그건 어떤 알고리듬들을 제일 빨리 수행한 언어들 대비 몇 배 느린가를 평균낸 겁니다. 만약 각 알고리듬을 모두 제일 빨리 수행하는 가상의 언어가 있다면 그것에 비해 몇 배 느린가를 뜻하는 거죠.

X는 GM이 제일 빠른 언어가 있을 때 다른 언어들의 비율입니다.

관련 소스는 여기에 있습니다. 템플릿이 사용되어 구조가 이해가 안가네요.
https://alioth.debian.org/scm/viewvc.php/shootout/website/lib/?root=shootout

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

cleansugar의 이미지

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com