LINUX.ORG.RU

Скудный бенчмарк интерпретируемых языков на хелловорлдах


0

0

Bash вырвался вперёд. Оно и понятно - процесс /bin/bash уже запущен. Питон "во всей красе", остальное тоже неудивительно. В браузере открыт rubybook. konsole, gedit с обрезанием. Wallpaper идеально подошёл под lipstik (в qt и gtk2)

Ruby
0m0.011s

Python
0m0.034s

Perl
0m0.004s

PHP
0m0.018s

bash
0m0.000s

>>> Просмотр (1024x768, 117 Kb)

★★★★

Проверено: Pi ()

Это ты, по сути, протестировал скорость запуска интерпретатора, да и то не лучшим образом.

LX ★★
()

That's nothing, but simply a joke :)

Selecter ★★★★
() автор топика

А как поменять стиль у верхней панели (таскбар)?

Tuxer
()
Ответ на: комментарий от U-ZvER

Вот мой тест на программе считающей простые числа:

1. Числа до 5000:

C: 0m0.008s
C++: 0m0.026s
python: 0m0.128s
Java: 0m0.139s
perl: 0m0.165s
php: 0m0.574s
bash: 0m9.131s

2. Числа до 30000 (меньше влияет время загрузки):
C: 0m0.170s
C++: 0m0.202s
Java: 0m0.293s
python: 0m2.162s
perl: 0m2.955s
php: 0m9.140s
bash: больше 3 минут (достало ждать)

Каждую программу запускал четыре раза и выбирал лучший результат.
Моя машина: Sempron 2600+ socket 754, 256MB ram. Запущено 2 xorg, 2 kde (на двух экранах/клавах), amarok с музыкой и куча консолей.
А вот тестовая программа:

#! /usr/bin/python -O
def prime(max):
        result=[]
        for i in xrange(2,max):
                for j in result:
                        if i % j == 0: break
                else: result.append(i)
        return result

import sys
max = int(sys.argv[1])
result=prime(max)
print result[-1]

на других языках использовал тот-же (заведомо тормозной) алгоритм, но оптимизировал используя подходящие языковые конструкции.

spinlock_t
()
Ответ на: комментарий от svyatogor

> Что доказывает, что питон делает все скриптовые и полу-скриптовые языки одной левой :)

Да по любому, и главное дело даже не в скорости зачастую, а в комфортности, понятности и куче приятных вещей и возможностей :)

LX ★★
()
Ответ на: комментарий от svyatogor

> Что доказывает, что питон делает все скриптовые и полу-скриптовые языки одной левой :)

А ежели ещё psyco использовать... То и Жабу :)

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от svyatogor

>Что доказывает, что питон делает все скриптовые и полу-скриптовые языки одной левой :)

Мдя, надо ссылочку на этот топик сохранить и посылать сюда всех
кто в очередной раз будет говорить ,что Python тормозит... :)

Renso ★★
()
Ответ на: комментарий от Renso

>А ежели ещё psyco использовать... То и Жабу :)
>>А кстати да, надо попробовать...

Неплохо....

Без psyco:

0m2.400s

C psyco:

0m0.415s

Очень неплохо... :)

Renso ★★
()
Ответ на: комментарий от Renso

Вычислительные задачи все-таки не показательны (для больших систем).

Вы попробуйте потестировать прогу с вызовом функции. В Питоне это одна из самых "дорогих" операций. :(

Интересно было бы сравнить с Руби. -- Darquer

Darquer
()
Ответ на: комментарий от Darquer

Вот вызов функций (время одного вызова в секундах):
C/C++: 1.3e-9
Java: 2.0e-9
Python: 8.8e-7
Perl: 1.4e-6
Python(psyco): 1.7e-6
PHP: 2.4e-6
bash: 2.7e-5

Как видно в java на два порядка быстрее.
Странно что python+psyco в два раза медленнее чем python.
PHP и bash как и во всем другом уверенно заняли последнее место.

В среднем все-же видимо быстрее всех java а дальше python+psyco т.к. вызовы функций все-же не самые частые операции.

spinlock_t
()

а вот руби с YARV (http://www.atdot.net/yarv/) рулит :-) не скажу как оно в продакшине, но тесты и бенчмарки прокатывает лехко. если автор пропинает Матса на предмет включения в HEAD -- рулез будет просто немерянный. тем более что оно в сторону jit-а движется (хотя лично мне бы и байткода хватило).

dmiceman ★★★★★
()
Ответ на: комментарий от spinlock_t

> т.к. вызовы функций все-же не самые частые операции

Зависит от стиля программирования.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от spinlock_t

> вызовы функций все-же не самые частые операции.
В ООЯ - одни из самых частых. Чаще используется, наверное, только арифметика.
Как получены результаты? На самом деле интересно... Я надеюсь, что это не просто
--
#!/bin/env python
def foo(): return
foo()
---
правда ведь? :)

Darquer
()
Ответ на: комментарий от spinlock_t

> В C++ забыл включить -O3.
а java-е -server не забыл ?

ed ★★
()
Ответ на: комментарий от Pi

красоты я что то не наблюдаю, как всегда всё стандартно. У него один скриншот похож на другой, background только лишь меняет.

Makc ★★
()
Ответ на: комментарий от Makc

Может чаще на лоре надо бывать? Неказистый XFCE не призван блестеть в глаза мишурными иконками :)

Selecter ★★★★
() автор топика
Ответ на: комментарий от Makc

>У него один скриншот похож на другой, background только лишь меняет.

хе-хе

что-либо может быть красивым не крича, без кислотных иконок и без... красота и попса - вещи разные

Pi ★★★★★
()
Ответ на: комментарий от mikhail

> А у меня env в /usr/bin.

У меня тоже, сорри, это я стормозил.

>Не легче писать /usr/bin/python?

Легче, но представь, что Питон у кого-то оказался установлен по другому пути. Казус может случиться, не находишь? :)

Darquer
()
Ответ на: комментарий от Darquer

$ cat 0.py

#! /usr/bin/python -O

def test(arg):
        return arg


import sys
max = int(sys.argv[1])
for i in xrange(max):
        test(i)

$ time ./0.py 10000000

число подбирал так что-бы общее время было порядка 10сек.

spinlock_t
()
Ответ на: комментарий от spinlock_t

> $ cat 0.py > ...

Как бы глянуть на вариант того-же "бенчмарка" на Perl-е ? Очень интересно как получилось в 2 раза больше на таком примере .... в худшем случае должно быть чуть меньше чем в гольном Python-е ;)

ericius
()
Ответ на: комментарий от spinlock_t

>#! /usr/bin/perl

Ага, спасибо примерно так и представлял ;). В данном случае все дело в "оптимизировал используя подходящие языковые конструкции". Если поставить действительно подходящую конструкцию (for со списком), все сразу становится на свои места ;)

ericius
()
Ответ на: комментарий от mihalych

> Ага, подходящий код в 1.5 раза быстрей: Да и "сишный" "for" только с явно заданными переменными смотрится гораздее ... ;)

ericius
()
Ответ на: комментарий от Selecter

>Может чаще на лоре надо бывать? Слишком частое посещение лора может негативно сказатся на вашем здоровье.

Makc ★★
()
Ответ на: комментарий от mihalych

Тогда выходит так:
python: 8.8e-7
perl: 1.1e-6 (в 1.3 раза быстрее с обычным for)

Вот простые числа:
#! /usr/bin/perl

$max=$ARGV[0];
@result=();
LOOP: for($i=2; $i<$max; $i++) {
        foreach $j (@result) {
                next LOOP if($i % $j == 0);
        }
        push @result,$i;
}

print $result[$result-1];

только не нужно отменять динамическое увеличение @result, т.к. оно было во всех программах.

spinlock_t
()
Ответ на: комментарий от spinlock_t

LOOP:
for $_ (2 .. $ARGV[0]) {
        for $j (@result) {
                next LOOP unless $_ % $j;
        }
        push @result, $_;
}

print $result[-1], "\n";



% time python2.3 primes.py 100000
40.60s user 0.01s system 97% cpu 41.530 total

% time perl5.8.3 primes.pl 100000
36.32s user 0.01s system 97% cpu 37.161 total

% time perl5.00503 primes.pl 100000
28.55s user 0.01s system 97% cpu 29.215 total

CPU: Pentium III, 800MHz

mihalych ★★★
()
Ответ на: комментарий от mihalych

В догонку:

1) "for $_" можно заменить на просто "for"

2) в твоей программе ошибка в последней строке, @$result - 1

3) с "python -O" ещё медленней выходит

4) программка на perl с вызовом testf() на моей машине в 1.5 раза быстрее аналогичной на python

mihalych ★★★
()
Ответ на: комментарий от ubber

> Все уже украдено до нас.

Я верю лишь тому, что сам могу запустить. Ты проверял на python2.3, perl5.00503, perl5.8.3? Могу счёт открыть, если у самого юникса нет.

mihalych ★★★
()
Ответ на: комментарий от mihalych

> Я верю лишь тому, что сам могу запустить.

Так в чем проблема? Запусти сам.

> Ты проверял на python2.3

Да.

> perl5.00503,

Нет.

> perl5.8.3?

5.8.4

ubber
()
Ответ на: комментарий от ubber

> > Я верю лишь тому, что сам могу запустить.

> Так в чем проблема? Запусти сам.

% time perl5.8.3 primes-sieve.pl 1200 Count: 1028 38.45s user 0.01s system 97% cpu 39.346 total

% time python2.3 primes-sieve.py 1200 Count: 1028 34.54s user 0.01s system 97% cpu 35.290 total

% time perl5.00503 primes-sieve.pl 1200 Count: 1028 30.11s user 0.01s system 96% cpu 31.126 total

% time perl5.6.0 primes-sieve.pl 1200 Count: 1028 28.02s user 0.01s system 96% cpu 28.904 total

И это до того, как я начал оптимизировать его primes-sieve.pl, дабы выиграть ещё процентов двадцать, или просто откомпилить 5.8.x без поддержки unicode, threads и других крутых (но ненужных тут) фич. :-)

mihalych ★★★
()
Ответ на: комментарий от mihalych

>И это до того, как я начал оптимизировать его primes-sieve.pl Угу, и что показательно - там чуши накуролесили не только с Perl-ом, но в отличие от, вариант на Python-е особо оптимизировать уже не удастся ;)

ericius
()
Ответ на: комментарий от ericius

Вот мой результат:
perl (мой алгоритм): 0m3.061s
perl (by mihalych): 0m2.615s
python: 0m2.267s
python(psyco): 0m0.324s

$ perl -v
This is perl, v5.8.5 built for i686-linux

$ python -V
Python 2.3.4

$ emerge info | grep CFLAGS
CFLAGS="-march=athlon-xp -pipe -O3 -finline-functions -fomit-frame-pointer"

Итог: перл приближается к питону, но до питон+psyco ему никогда не доползти.
Вообще странно что от способа записи цикла настолько зависит скорость.

spinlock_t
()
Ответ на: комментарий от spinlock_t

>Итог: перл приближается к питону

Не убедил ;)).

perl (твой алгоритм): 0m2.492s
perl (by mihalych): 0m2.145s
python: 0m2.635s

$ perl -v
This is perl, v5.8.6 built for i686-linux-ld

$ python -V
Python 2.4

Итог: За последние 6 лет в течении которых я на него регулярно поглядываю, питон неплохо продвигается, но до перла ему еще далеко ;)).

PS: А psyco - удовольствие пока (да и вообще) сомнительное ...
PPS:
>Вообще странно что от способа записи цикла настолько зависит скорость.

Это "шутка юмора" такая - "способа записи цикла" ?


ericius
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.