Доброго времени суток.

Если кому-то интересно узнать о скорости выполнения элементарных операций в Ruby и Jruby, а так же скорость циклов «for», «while», «times» то вам
Кто не знает что такое Ruby, Jruby.
Информация из ru.wikipedia.org
Ruby — динамический, рефлективный, интерпретируемый язык высокого уровня для быстрого и удобного объектно-ориентированного программирования.( ru.wikipedia.org/wiki/Ruby )
JRuby — интерпретатор языка программирования Руби, написанный целиком на Java (оригинальный интерпретатор написан на Си). ( ru.wikipedia.org/wiki/JRuby )
Под «элементарными» операциями я понимаю: «сложение», «вычитание»(хотя в обзор не включил), «умножение», «деление». Не могу сказать, что сделал всё правильно(вероятно есть то, о чем я не знаю), хотелось бы услышать об ошибках. Важно заметить, что нельзя сравнивать «сложение», «умножение», «деление» относительно друг друга, так как разное число итераций.
Тест проходил следующим образом:
1) Имеется 9 файлов-скриптов: [3 цикла] х [3 элементарные операции]. Другими словами: «сложение» в цикле «for», «сложение» в цикле «while», «сложение» в цикле «times», «умножение» в цикле «for» и так далее.
2) Выполняется каждый файл 10 раз – 5 раз для ruby и 5 раз для jruby.
3) Результаты заносятся в таблицу.
4) Делаются выводы.
Конфигурация компьютера:
Ноутбук Asus eeepc 900
Процессор: Intel Celeron 353 ULV на частоте 900MHz
Оперативная память: 1Gb RAM DDR2 PC3200
Debian Squeeze
ruby 1.8.7
jruby 1.4.0
Код(###### — разделитель файлов):
Результаты:



Цикл “times” использовать выгоднее при сложении.

Цикл “while” использовать выгоднее при умножении.

При делении для ruby — “times”, для jruby – “while”

В итоге нельзя сказать, что JRuby или Ruby «быстрее», для вычитания результаты примерно эквиваленты сложению. Наверно эта диаграма вводит в заблуждение — «сложение», «умножение», «деление» на одном графике, но количество повторений в циклах разное, нужно смотреть «сложение» Ruby vs «сложение» JRuby, «умножение» Ruby vs «умножение» JRuby и то же самое с «делением».

Нельзя забывать, что «Из Ruby кода в JRuby можно вызывать классы Java, таким образом можно получить доступ ко всем библиотекам, инфраструктурам и инструментам платформы Java. Также можно получить доступ к Ruby коду из Java. Имеется поддержка большинства встроенных классов, BSF[1].
Стандартное использование JRuby — это его встраивание в Java приложение для поддержки скриптинга и ускорения разработки, что является преимуществом языка Ruby перед статическими языками. Также может использоваться для запуска Rails-приложений на Java-платформах.» — ru.wikipedia.org/wiki/JRuby

Если кому-то интересно узнать о скорости выполнения элементарных операций в Ruby и Jruby, а так же скорость циклов «for», «while», «times» то вам
Кто не знает что такое Ruby, Jruby.
Информация из ru.wikipedia.org
Ruby — динамический, рефлективный, интерпретируемый язык высокого уровня для быстрого и удобного объектно-ориентированного программирования.( ru.wikipedia.org/wiki/Ruby )
JRuby — интерпретатор языка программирования Руби, написанный целиком на Java (оригинальный интерпретатор написан на Си). ( ru.wikipedia.org/wiki/JRuby )
Под «элементарными» операциями я понимаю: «сложение», «вычитание»(хотя в обзор не включил), «умножение», «деление». Не могу сказать, что сделал всё правильно(вероятно есть то, о чем я не знаю), хотелось бы услышать об ошибках. Важно заметить, что нельзя сравнивать «сложение», «умножение», «деление» относительно друг друга, так как разное число итераций.
Тест проходил следующим образом:
1) Имеется 9 файлов-скриптов: [3 цикла] х [3 элементарные операции]. Другими словами: «сложение» в цикле «for», «сложение» в цикле «while», «сложение» в цикле «times», «умножение» в цикле «for» и так далее.
2) Выполняется каждый файл 10 раз – 5 раз для ruby и 5 раз для jruby.
3) Результаты заносятся в таблицу.
4) Делаются выводы.
Конфигурация компьютера:
Ноутбук Asus eeepc 900
Процессор: Intel Celeron 353 ULV на частоте 900MHz
Оперативная память: 1Gb RAM DDR2 PC3200
Debian Squeeze
ruby 1.8.7
jruby 1.4.0
Код(###### — разделитель файлов):
Copy Source | Copy HTML
- ################################################
- x = 1_000_000
- a = Time.new
- 1_000_000.times do
- x -= 3
- end
- b = Time.new
- puts b - a
- ################################################
- x = 1
- a = Time.new
- for i in 1..1_000_000 do
- x += 3
- end
- b = Time.new
- puts b - a
- ################################################
- x = 1
- i = 0
- a = Time.new
- while i < 1_000_000 do
- x += 3
- i += 1
- end
- b = Time.new
- puts b - a
- ################################################
- x = 1
- a = Time.new
- 10_000.times do
- x *= 3
- end
- b = Time.new
- puts b - a
- ################################################
- x = 1
- a = Time.new
- for i in 1..10_000 do
- x *= 3
- end
- b = Time.new
- puts b - a
- ################################################
- x = 1
- i = 0
- a = Time.new
- while i < 10_000 do
- x *= 3
- i += 1
- end
- b = Time.new
- puts b - a
- ################################################
- x = 3**10_000
- a = Time.new
- 10_000.times do
- x /= 3
- end
- b = Time.new
- puts b - a
- ################################################
- x = 3**10_000
- a = Time.new
- for i in 1..10_000 do
- x /= 3
- end
- b = Time.new
- puts b - a
- ################################################
- x = 3**10_000
- i = 0
- a = Time.new
- while i < 10_000 do
- x /= 3
- i += 1
- end
- b = Time.new
- puts b - a
- ################################################
Результаты:



Цикл “times” использовать выгоднее при сложении.

Цикл “while” использовать выгоднее при умножении.

При делении для ruby — “times”, для jruby – “while”

В итоге нельзя сказать, что JRuby или Ruby «быстрее», для вычитания результаты примерно эквиваленты сложению. Наверно эта диаграма вводит в заблуждение — «сложение», «умножение», «деление» на одном графике, но количество повторений в циклах разное, нужно смотреть «сложение» Ruby vs «сложение» JRuby, «умножение» Ruby vs «умножение» JRuby и то же самое с «делением».

Нельзя забывать, что «Из Ruby кода в JRuby можно вызывать классы Java, таким образом можно получить доступ ко всем библиотекам, инфраструктурам и инструментам платформы Java. Также можно получить доступ к Ruby коду из Java. Имеется поддержка большинства встроенных классов, BSF[1].
Стандартное использование JRuby — это его встраивание в Java приложение для поддержки скриптинга и ускорения разработки, что является преимуществом языка Ruby перед статическими языками. Также может использоваться для запуска Rails-приложений на Java-платформах.» — ru.wikipedia.org/wiki/JRuby