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

Upd [21.09.09]:
поменялась машина, OS, изменились версии. Так что старую таблицу поддерживать невозможно. Начну новую:Язык | Время, сек | Подробности |
---|
C++ (stack) | 0,495 | g++ 4.3.4 |
Java (server) | 2,33 | 1.6.0_16-b01 |
C++ (boost) | 3,42 | g++ 4.3.4 |
Java | 4,99 | 1.6.0_16-b01 |
Fan | 6,25 | Fan 1.0.46 |
Boo | 14,0 | Boo 0.9.1.3287 (Mono 2.4.2.3) |
C++ (heap) | 20,9 | g++ 4.3.4 |
Ruby 1.9 | 275 | 1.9.1p243 |
Python 2.5 | 487 | Python 2.5.4 |
Python 2.6 (psyco.full) | 586 | Python 2.6.2, psyco 1.6 |
Python 2.6 | 611 | Python 2.6.2 |
Старая таблица:
Язык | Время, сек. | Версия | Опции компиляции | Среда исполнения |
---|
C++ (stack) | 0,66 | GCC (Ubuntu 4.2.3-2ubuntu7) | g++ -O3 fib.cpp | native |
Java (server) | 2,5 | Sun Java 1.6.0_06 | javac Fib.java | Sun Java 1.6, -server -Xms128m -Xmx128m -XX:NewSize=64m |
Scala | 3,8 | Scala 2.3.0 | scalac fib.scala | Sun Java 1.6 |
Java | 3,9 | Sun Java 1.6.0_06 | javac Fib.java | Sun Java 1.6 |
Nemerle | 8,9 | Nemerle Compiler (ncc) version 0.9.3 (release) | ncc fib.n | Mono 1.2.6 |
Nemerle w pat.match. | 9,3 | Nemerle Compiler (ncc) version 0.9.3 (release) | ncc fib.n | Mono 1.2.6 |
Boo | 9,8 | Boo 0.8.0.2730 | booc fib.boo | Mono 1.2.6 |
C# (mono) | 11,1 | Mono C# compiler version 1.2.6.0 | mcs fib.cs | Mono 1.2.6 |
С++ (heap) | 16,6 | GCC (Ubuntu 4.2.3-2ubuntu7) | g++ -O3 fib-heap.cpp | native |
Python+Psyco | 41-42[1] | Python 2.5.2 + Psyco 1.5.1-3 | - | Python 2.5.2 |
Ruby 1.9 | 310 | ruby 1.9.0 (2007-12-25 revision 14709) [i486-linux] | - | ruby 1.9.0 |
Python | 313 | Python 2.5.2 | - | Python 2.5.2 |
Jython | 493 | Jython 2.2.1 | jythonc fib | Sun Java 1.6 |
Ruby 1.8 | 662 | ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux] | - | ruby 1.8.6 |
JRuby (интерпретация) | 970 | i386-jruby1.0.2 | - | i386-jruby1.0.2 |
PHP | 1328 | PHP 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]