Хуткасьць розных рэалізацый Ruby
l10n_be
У Sid прыйшла glibc 2.17, а значыць можна патэставаць бінарныя зборкі topaz. Найперш цікавіла хуткасьць, бо ягоны аўтар абяцаў парваць усіх як Тузік шапку. У спаборніцтве бралі ўдзел MRI 1.9.3p194 (двойка яшчэ не дайшла да Debian), Rubinius 2.0.0dev (нейкі стары, каміт db7ebee4), JRuby 1.7.3, MRI 1.8.7p357. JRuby запушчалася з invokedynamic (у табліцы пазначаная зорачкай) і безь яго. Для тэставаньня былі абраныя дзьве задачы з Праекту Ойлера: 83 (альґарытм Дэйкстры) і 107 (рашэньне «ў лоб» і мэтадам Крускала).

Вынікі (самы хуткі з 5 запускаў), у мілісэкундах, прыведзеныя ў табліцы:

Задача MRI 1.9.3 MRI 1.8.7 Topaz Rubinius JRuby1 JRuby2
83 540 1098 1676 1435 2377 2800
1073 10 18 326 38 251 432
1074 322 792 56965 1289 1511 1818
1076 0,22 0,94 9,4 0,92 39 259


Тлумачэньне зносак:

  1. jruby --server xx.rb

  2. jruby --server -Xcompile.invokedynamic=true xx.rb

  3. Выкарыстаны альґарытм Крускала, граф з 40 вузлоў.

  4. Рашэньне «ў лоб».

  5. Мала таго, што topaz у гэтым тэсьце быў самым тармазным, ён яшчэ й выдаваў няправільны вынік разьліку.

  6. Папярэдняя задача, але толькі з 7 вузламі. Тут topaz, прынамсі, здолеў выдаць правільны вынік.



Падсумаваньне: сьцеражыцеся падробак, сапраўдны Рубін толькі ў Матца :) Topaz не падтрымлівае мноства сынтаксычных канструкцый, у ягонай базавай бібліятэцы адсутнічаюць многія функцыі, зусім не хуткі, і часам выдае няправільныя вынікі разьліку. Rubinius, колькі я на яго гляджу, хуткі толькі на словах, таму я яго й не абнаўляў ужо даўно. JRuby таксама не апраўдала надзей, і, што цікава, з invokedynamic працуе павольней, чым без (вэрсія JDK — IcedTea 7u21-2.3.9-4, калі што). Усё гэта непатрэбства запушчалася на adm64.

?

Log in