Бенчмарка различных языков программирования 21-Apr-09 │ │ ------------------------------------------- --------- │ │ │ │ Подробности в моём Живом Журнале (сильно устаревшие) │ │http://slobin.livejournal.com/30864.html │ │ Машина: Pentium III 800 MHz память 768 Mb Win XP SP3 │ │ Данные: текстовый файл на 742900 строк (30 мегабайт) │ │ │ │ Да, я знаю, в чём разница между языком и реализацией │ │ │ │ Новости: │ │ │ │ * Python 2.6.2 (интерпретатор и psyco) │ │ │ │ Интерпретаторы │ │ │ │ Язык Версия Строчки Время │ │ ---- ------ ------- ----- │ │ clisp 2.47 23 + 4 1:13 wu │ │bench.cl factor 0.91 11 + 5 3:12 (1) │ │bench~1.fac gawk 3.1.6 9 + 3 35 │ │bench.awk icon 9.3.2 8 + 0 1:43 (2) t │ │bench.icn jscript 5.7 22 + 5 25:40 │ │bench.js lua 5.1.2 20 + 6 32 │ │bench.lua newlisp 10.0.3 6 + 3 1:03 = │ │bench.lsp perl 5.10.0 8 + 1 34 t │ │bench.pl python 2.6.2 10 + 5 18 (3) │ │bench.py ruby 1.8.6 7 + 2 1:17 │ │bench.rb ruby 1.9.1 7 + 2 2:02 │ │bench.rb scm 5e4 19 + 7 8:36 (4) *t │ │bench.scm s-lang 2.0.6 15 + 4 56 │ │bench.sl │ │ (1) кажется, factor на самом деле - jit-компилятор │ │ (2) интерпретатор + байт-код = исполняемый файл │ │ (3) питон быстрее работает с локальными переменными, │ │ поэтому тело скрипта завёрнуто в main │ │ (4) сплит, хеши, сортировка - всё написано на схеме, │ │ поэтому так медленно (slib считается частью scm) │ │ │ │ Интерпретаторы (djgpp) │ │ │ │ Язык Версия Строчки Время │ │ ---- ------ ------- ----- │ │ lua 5.1 20 + 6 26 │ │bench.lua perl 5.6.1 8 + 1 25 t │ │bench.pl │ │ Just In Time Компиляторы │ │ │ │ Язык Версия Строчки Время │ │ ---- ------ ------- ----- │ │ luajit 1.1.3 20 + 6 26 │ │bench.lua psyco 1.6 14 + 5 14 t │ │bench2.py │ │ Виртуальные Машины │ │ │ │ Язык Версия Строчки Время │ │ ---- ------ ------- ----- │ │ java 1.6.0 25 + 3 25 tu │ │bench~1.jav │ │ Компиляторы │ │ │ │ Язык Версия Строчки Время │ │ ---- ------ ------- ----- │ │ gcc 3.4.5 102 + 20 8 ht │ │bench.c g++ 3.4.5 18 + 7 24 *= │ │bench.cc ocaml 3.10.2 10 + 4 24 (5) t │ │bench.ml │ │ Компиляторы (ручная оптимизация) │ │ │ │ Язык Версия Строчки Время │ │ ---- ------ ------- ----- │ │ g++ 3.4.5 34 + 13 18 *= │ │bench2.cc ocaml 3.10.2 22 + 5 21 (5) wt │ │bench2.ml │ │ (5) я подозреваю, что с pcre-ocaml работать будет гораздо │ │ быстрее, но я не сумел собрать её с помощью mingw :-( │ │ │ │ TODO: ocaml+pcre, PLT scheme, python 3.0, Haskell, C#, D │ │ │ │ Буквы и значки в последней колонке: │ │ │ │ w - разбиение на слова делается вручную │ │ h - ассоциативная таблица вручную │ │ s - сортировка вручную (пока не было) │ │ * - чтение по словам, а не по строчкам │ │ = - упорядоченная ассоциативная таблица │ │ t - таблица названа total вместо score │ │ u - юникод принудительно имитирует байты │ │ │ │ Ссылки наружу │ │ ------------- │ │ Наиболее известная бенчмарка │ │http://shootout.alioth.debian.org/ Рейтинг популярности языков │ │http://www.tiobe.com/tpci.htm │ │ Разновообразелый штук │ │ --------------------- │ │ Скрипт, которым сгенерена эта страница │ │dir2html.py Текст этой страницы в другом формате │ │index~1.htm │ │ Скрипт для подсчёта содержательных строчек │ │lines.pl Скрипт для замера времени выполнения │ │timer.cmd │ │ Бинарники тестов (родные и байт-код) │ -- │binary.zip Исходный файл и образец результатов │ -- │data.7z │ │ Скрипт для упаковки всего этого вместе │ │makezip.cmd Всё вместе │ │bench.zip