В коментариях к моей статье были высказанны просьбы протестировать производительность приведенного там примера на других языках. Что я и пытался сделать.
Как видно из заголовка, в тесте участвовали практически все популярные сегодня динамические языки, а также новая версия Ruby.
Давайте взглянем на результаты.
Пару слов о тесте. Для тестирования была использованна функция факторизации числа. Алгоритм самый примитивный — перебор делителей. В каждом языке был создан класс(кроме Perl'a) с одним методом.
Затем он 1000 раз вызывался в цикле, с аргументом равным 999999.
Система на которой производилось испытание — Debian Lenny. Все интерпретаоры установленны пакетами из официального репозитария. Процессор — Pentium D 2.8.
В тесте также участвовал интерпретатор Ruby из эксперементальной ветки 1.9(так же поставленный из репозитария).
Еще замечание, возможно некоторые скрипты я реализовал неоптимально, учитывая возможности языков. Я старался реализовать алгоритм идентично во всех языках. Если есть замечания и дополнения — пожалуйста в коментарии.
Для теста был написан такой скрипт:
Теперь посмотрим на результат выполнения этого скрипта:
Подведем итог. Python примерно соизмерим по скорости с Perl. Ruby 1.8 естественно проигрывает. PHP почти быстрее всех.
И тут такая неожиданность, эксперементальная ветка Ruby 1.9 оказывается быстрее всех. Я не случайно включил в тестирование Ruby 1.9. При его разработке упор ставился на скорость. Но я, чесно говоря, очень удивлен, не ожидал что настолько хорошо получится.
Так что поклонники Ruby, нам есть куда стремиться. Ждем Ruby 2.0!:)
Скрипты использованные в тесте:
factor.rb, factor.py, factor.pl, factor.php
Upd: В коментариях разгорелся спор об объективности результатов. Да, я не спорю, тест синтетический, к тому же провести комплексный анализ производительности цели не было.
Результатами можно считать следующее:
1. Скорость выполнения на этих языках соизмерима(по крайней мере очень значительных скачков на этой задаче нет).
2. Ruby(этот бенчмарк по мотивам статьи о Ruby) успешно развивается в плане производительности.
Upd2: Хабраюзер deerua для наглядности сделал диаграму, на которой отображены результаты тестов:

Upd3: Хабраюзер AlDev не остался в стороне, и сделал другую версию диаграмы:

Как видно из заголовка, в тесте участвовали практически все популярные сегодня динамические языки, а также новая версия Ruby.
Давайте взглянем на результаты.
Пару слов о тесте. Для тестирования была использованна функция факторизации числа. Алгоритм самый примитивный — перебор делителей. В каждом языке был создан класс(кроме Perl'a) с одним методом.
Затем он 1000 раз вызывался в цикле, с аргументом равным 999999.
Система на которой производилось испытание — Debian Lenny. Все интерпретаоры установленны пакетами из официального репозитария. Процессор — Pentium D 2.8.
В тесте также участвовал интерпретатор Ruby из эксперементальной ветки 1.9(так же поставленный из репозитария).
Еще замечание, возможно некоторые скрипты я реализовал неоптимально, учитывая возможности языков. Я старался реализовать алгоритм идентично во всех языках. Если есть замечания и дополнения — пожалуйста в коментарии.
Для теста был написан такой скрипт:
#!/bin/bash uname -a #информация о системе cat /proc/cpuinfo | grep "model name" #информация о процессоре #сами тесты, с предворительным выводом версии интерпретатора ruby -v time ruby factor.rb ruby1.9 -v time ruby1.9 factor.rb php -v time php factor.php python -V time python factor.py perl -v time perl factor.pl
Теперь посмотрим на результат выполнения этого скрипта:
Linux debian 2.6.26-1-686 #1 SMP Mon Dec 15 18:15:07 UTC 2008 i686 GNU/Linux model name : Intel(R) Pentium(R) D CPU 2.80GHz model name : Intel(R) Pentium(R) D CPU 2.80GHz ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] real 0m1.099s user 0m1.076s sys 0m0.000s ruby 1.9.0 (2008-06-20 revision 17482) [i486-linux] real 0m0.287s user 0m0.252s sys 0m0.008s PHP 5.2.6-0.1~lenny1 with Suhosin-Patch 0.9.6.2 (cli) (built: Nov 29 2008 21:35:12) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies real 0m0.348s user 0m0.324s sys 0m0.008s Python 2.5.2 real 0m0.537s user 0m0.536s sys 0m0.000s This is perl, v5.10.0 built for i486-linux-gnu-thread-multi Copyright 1987-2007, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. real 0m0.569s user 0m0.552s sys 0m0.004s
Подведем итог. Python примерно соизмерим по скорости с Perl. Ruby 1.8 естественно проигрывает. PHP почти быстрее всех.
И тут такая неожиданность, эксперементальная ветка Ruby 1.9 оказывается быстрее всех. Я не случайно включил в тестирование Ruby 1.9. При его разработке упор ставился на скорость. Но я, чесно говоря, очень удивлен, не ожидал что настолько хорошо получится.
Так что поклонники Ruby, нам есть куда стремиться. Ждем Ruby 2.0!:)
Скрипты использованные в тесте:
factor.rb, factor.py, factor.pl, factor.php
Upd: В коментариях разгорелся спор об объективности результатов. Да, я не спорю, тест синтетический, к тому же провести комплексный анализ производительности цели не было.
Результатами можно считать следующее:
1. Скорость выполнения на этих языках соизмерима(по крайней мере очень значительных скачков на этой задаче нет).
2. Ruby(этот бенчмарк по мотивам статьи о Ruby) успешно развивается в плане производительности.
Upd2: Хабраюзер deerua для наглядности сделал диаграму, на которой отображены результаты тестов:

Upd3: Хабраюзер AlDev не остался в стороне, и сделал другую версию диаграмы:
