Balancer: Все сообщения за 2 Августа 2008 года

 
ПнВтСрЧтПтСбВс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Balancer

администратор
★★★★★
Самое забавное, что я видел уже немало описаний тех испытаний от очевидцев. И все они очень сильно расходятся не только в деталях, но и по-крупному.

Наводит на мысли.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Что мне интересно - то и проанализировал :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
В общем, чисто функциональные вызовы сегодня интересуют программиста всё меньше. Вот генерация объектов и вызовы методов - то, что реально актуально. Посему - модифицирую бенч :)

Upd [21.09.09]: поменялась машина, OS, изменились версии. Так что старую таблицу поддерживать невозможно. Начну новую:

ЯзыкВремя, секПодробности
C++ (stack)0,495g++ 4.3.4
Java (server)2,331.6.0_16-b01
C++ (boost)3,42g++ 4.3.4
Java4,991.6.0_16-b01
Fan6,25Fan 1.0.46
Boo14,0Boo 0.9.1.3287 (Mono 2.4.2.3)
C++ (heap)20,9g++ 4.3.4
Ruby 1.92751.9.1p243
Python 2.5487Python 2.5.4
Python 2.6 (psyco.full)586Python 2.6.2, psyco 1.6
Python 2.6611Python 2.6.2


Старая таблица:

ЯзыкВремя, сек.ВерсияОпции компиляцииСреда исполнения
C++ (stack)0,66GCC (Ubuntu 4.2.3-2ubuntu7)g++ -O3 fib.cppnative
Java (server)2,5Sun Java 1.6.0_06javac Fib.javaSun Java 1.6, -server -Xms128m -Xmx128m -XX:NewSize=64m
Scala3,8Scala 2.3.0scalac fib.scalaSun Java 1.6
Java3,9Sun Java 1.6.0_06javac Fib.javaSun Java 1.6
Nemerle8,9Nemerle Compiler (ncc) version 0.9.3 (release)ncc fib.nMono 1.2.6
Nemerle w pat.match. 9,3 Nemerle Compiler (ncc) version 0.9.3 (release)ncc fib.nMono 1.2.6
Boo9,8Boo 0.8.0.2730booc fib.booMono 1.2.6
C# (mono)11,1Mono C# compiler version 1.2.6.0mcs fib.csMono 1.2.6
С++ (heap)16,6GCC (Ubuntu 4.2.3-2ubuntu7)g++ -O3 fib-heap.cppnative
Python+Psyco41-42[1]Python 2.5.2 + Psyco 1.5.1-3-Python 2.5.2
Ruby 1.9310ruby 1.9.0 (2007-12-25 revision 14709) [i486-linux]-ruby 1.9.0
Python313Python 2.5.2-Python 2.5.2
Jython493Jython 2.2.1jythonc fibSun Java 1.6
Ruby 1.8662ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]-ruby 1.8.6
JRuby (интерпретация)970i386-jruby1.0.2-i386-jruby1.0.2
PHP1328PHP 5.2.4-2ubuntu5.2 cli-PHP 5.2.4


Все измерения - на Celeron 1,8ГГц под Ubuntu 8.04.01

Исходники ниже отдельными постингами.

Время работы измеряется по time, выбирается минимальное в серии из 2-3 запусков. Хотелось бы измерить и потребляемую память, но time никак не хочет понимать опцию -format. Кто-то подскажет пример её использования?

Для Си++ и Java результат - усреднение десяти измерений в цикле.

Примечания
1. По поводу Python + psyco см. Производительность языков. Объектный Фибоначчи :) [Balancer#24.11.08 07:54]
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
Это сообщение редактировалось 21.09.2009 в 02:00

Balancer

администратор
★★★★★
Исходники.

С++:
code cpp
  1. #include <stdio.h>
  2.  
  3. class Fib
  4. {
  5.   private:
  6.      int _value;
  7.  
  8.   public:
  9.     Fib(int n) { _value = n; }
  10.  
  11.     int value()
  12.     {
  13.         if(_value <= 2)
  14.             return 1;
  15.  
  16.         Fib f1 = Fib(_value - 1);
  17.         Fib f2 = Fib(_value - 2);
  18.  
  19.         return f1.value() + f2.value();
  20.     }
  21. };
  22.  
  23. int main()
  24. {
  25.     for(int i=0; i<10; i++)
  26.     {
  27.         Fib x = Fib(40);
  28.         printf("n=%d\n", x.value());
  29.     }
  30.     return 0;
  31. }
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Java:
code java
  1. class Fib
  2. {
  3.     private final int _value;
  4.  
  5.     Fib(int n) { _value = n; }
  6.  
  7.     public int value()
  8.     {
  9.         if(_value <= 2)
  10.             return 1;
  11.  
  12.         Fib f1 = new Fib(_value - 1);
  13.         Fib f2 = new Fib(_value - 2);
  14.  
  15.         return f1.value() + f2.value();
  16.     }
  17.  
  18.     public static void main(String[] argv)
  19.     {
  20.         for(int i=0; i<10; i++)
  21.         {
  22.             Fib x = new Fib(40);
  23.             System.out.println(x.value());
  24.         }
  25.     }
  26. }
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Boo:
code boo
  1. class Fib:
  2.     _value as uint
  3.  
  4.     def constructor(n as uint):
  5.         _value = n
  6.  
  7.     def value() as uint:
  8.         if(_value <= 2):
  9.             return 1
  10.  
  11.         return Fib(_value - 1).value() + Fib(_value - 2).value()
  12.  
  13. print Fib(40).value()
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Python:
code python
  1. import psyco
  2. psyco.full()
  3.  
  4. class Fib:
  5.     def __init__(self, n):
  6.         self._value = n
  7.  
  8.     def value(self):
  9.         if(self._value <= 2):
  10.             return 1
  11.  
  12.         f1 = Fib(self._value - 1)
  13.         f2 = Fib(self._value - 2)
  14.  
  15.         return f1.value() + f2.value()
  16.  
  17. print Fib(40).value()
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Kernel3> В плюсах объект на стеке, а не в хипе - это так и задумано? А если new сделать, как результат изменится? :)

Ща проверим :) Как вариант с PHP досчитается :D
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
hcube> Как это нету дублированной? У меня именно такая - двухголосый перевод.

Где качал? Я нигде не нашёл :) А то мне вариант с субтитрами не даёт фильмами наслаждаться, вместо того, чтобы действие смотреть, сидишь и тупо читаешь внизу экрана :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Capt(N)> окно «поиск» в левом верхнем углу страницы…

Пока только по заголовкам. Поэтому, кстати, и рекомендуется дробление. Один объект - одна тема. Скажем, в заголовке упомянул проект 661, так его и искать потом по заголовку легко.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Серокой> Рома, Посторонним к тебе лично обращается, спрашивает, ты в курсе про глюки со штрафами? У него они истекли, а писать не пускают!

Со средним пингом в 4 секунды ОЧЕНЬ трудно работать по SSH :) Если соберусь с духом - починю. Нет - только после 14-го, когда в Москву вернусь.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Вариант с хипом будет:
code cpp
  1. #include <stdio.h>
  2.  
  3. class Fib
  4. {
  5.   private:
  6.      int _value;
  7.  
  8.   public:
  9.     Fib(int n) { _value = n; }
  10.  
  11.     int value()
  12.     {
  13.         if(_value <= 2)
  14.             return 1;
  15.  
  16.         Fib *f1 = new Fib(_value - 1);
  17.         Fib *f2 = new Fib(_value - 2);
  18.  
  19.         int n1 = f1->value();
  20.         int n2 = f2->value();
  21.  
  22.         delete(f1);
  23.         delete(f2);
  24.  
  25.         return n1+n2;
  26.     }
  27. };
  28.  
  29. int main()
  30. {
  31.     for(int i=0; i<10; i++)
  32.     {
  33.         Fib *x = new Fib(40);
  34.         printf("n=%d\n", x->value());
  35.         delete(x);
  36.     }
  37.     return 0;
  38. }


Пока не бенчу, т.к. PHP ещё не закончил работу :) Пожалуй, обойдусь одним измерением :D

...

Да, PHP, соответственно:

code php
  1. <?php
  2.  
  3. class Fib
  4. {
  5.     var $value;
  6.     function __construct($n)
  7.     {
  8.         $this->_value = $n;
  9.     }
  10.  
  11.     function value()
  12.     {
  13.         if($this->_value <= 2)
  14.             return 1;
  15.  
  16.         $f1 = new Fib($this->_value - 1);
  17.         $f2 = new Fib($this->_value - 2);
  18.  
  19.         return $f1->value() + $f2


Дальше »»»
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Багу поймал, в code-тэге обратный слеш кушается. Но с этим буду разбираться уже в Москве, когда вернусь.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Добавил PHP и Си++ с heap'ом.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Сейчас спать иду, завтра - гости с утра, так что или завтра вечером, или в понедельник продолжу.

Perl, Nemerle, Scala ожидаются. М.б. ещё что-то добавлю.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru