LINUX.ORG.RU

В успех Ruby начинают верить


0

0

Компания Benchmark Capital заплатила компании Engine Yard 3,5 млн. долларов на развитие Ruby on Rails, при этом заявив, что RoR очень важная технология и данная инвестиция - ключевой инструмент развития проекта. Спонсируется, главным образом, развитие проектов Rubinius и Merb. Кроме того, деньги будут вкладываться в развитие инфраструктуры Engine Yard.

>>> Подробности

anonymous

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

Ответ на: комментарий от AlexLorovitch

>Может на другом компе тестировалось?

time1=Time.now

k = 1

while k < N do

x += dx

sum += ((x*2.1+3.5)/(x*1.5+0.5))*dx

k += 1

end

time2=Time.now

print "S=",sum," T=", time2-time1," Speed=",N/(time2-time1),"\n"

То же самое переписать ~30 раз на других ЯП

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

>> Т.е. как и обещали - в руби 1.9 - сравнялись в скорости с перл/питон

> ...если мерять скорость в AleLoMark'ах.

Ну дак проверьте - задачка простенькая.

Я гонял то же на MozartOZ,Lisp,Erlang и пр.

Цикл должен молотить достаточно долго - секунд 20-50

Желательно работать в текстовом окне для чистоты эксперимента.

Скорость VM таким манером оценить можно.

Алгоритм специально простенький, чтобы проще было сделать на различных языках...

AlexLorovitch
()

Тут упомянули о надежности ruby, а у меня вчерась такая фигня приключилась: есть файл с каким-то количеством чисел типа

-636.13 -677.10 150.45 -37.03 25.81 -0.19 -0.19 46.77 69.68 -117.68 98.52 0.00 222.33 357.13 12.90 3080.30 ...

делаю суммирование этих чисел, получается -308769.6500004. Друзья! Откуда 0.0000004 взялось? Все числа в файле имеют не более 2-х разрядов после запятой (типа деньги). Делаю тоже самое питоном, все правильно считает -308769.65

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

> Ну дак проверьте - задачка простенькая.

Меня не особо интересует сравнительная производительность Руби и Питона, и уж точно не интересует сравнительная производительность в AleLoMarks. Я подожду, пока shootout доберется до Ruby 1.9 - они гораздо корректнее сравнивают...

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

>Я подожду, пока shootout доберется до Ruby 1.9 - они гораздо корректнее сравнивают...

Нет возражений.

Мой тестик - умышленно примитивный, например, ООП там нету совсем, а вызовы методов и манипуляции с объектами дадут иные результаты...

Я хотел оценить шустрость разнообразных VM, и в первую очередь, нужен был максимально переносимый тестик.

Но интересного, таким образом,можно узнать много.

Например, я привел цифры для Mono (30 000 000) так это оно получилось для ихнего С# компилера, а ежели то же самое закрутить под тем же Mono на Дебиане, но на Nemerle, получим 50 000 000, а ежели там же, но на F# - получим 45 000 000.

Т.е. в Mono - компилятор получается чуток похуже, а runtime - нормальный ...

Nemerle и F# - я перетащил в Mono из NET, т.е. они Net-овские

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

>В shootout уже есть сравнение

Посмотрел - кстати мои замеры привели меня примерно к такой же классификации интерпретаторов по скорости...

Только как они выжали на Lisp SBCL такой приличный показатель ?

У меня получалось SBCL раз в 5 послабее чистого С.

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

> Откуда 0.0000004 взялось?

Мало ли откуда... Это на числа смотреть надо конкретно. Например, число 0.1 в формате с плавающей точкой не имеет конечного представления, так что просуммировав его 10 раз можно получить совсем не 1.0. Еще интереснее, когда при этом процедура преобразования числа в строку имеет свое собственное мнение, как и что надо округлять, и выдаст "1.0".

--

SVK

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

> вот и по тестам http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=.. .

Спасибо. Судя по тестам, Питон делает даже Ruby 1.9 почти по всем показателям, причем кое-где - в разы.

http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=...

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

> Откуда 0.0000004 взялось? Все числа в файле имеют не более 2-х разрядов после запятой (типа деньги)

Что такое - тип деньги ? в Руби есть Fixnum,Bignum, Float...

Скорее всего здесь ты работаешь с обычными Float (которые Double).

Для обалденно точных финансовых вычислений (миллиарды с точностью до копейки) придуман тип Bignum - т.е. считать надо тупо копейки, не заботясь о том, что ты зашкалишь за максимальное целое 32-разрядное число - когда зашкалишь, оно само перейдет в Bignum.

AlexLorovitch
()

а кое где и руби делает питон 8)

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

>Для обалденно точных финансовых вычислений (миллиарды с точностью до копейки) придуман тип Bignum - т.е. считать надо тупо копейки

Т.е. умножать все значения на 100 чтобы они стали копейками? Это, конечно, вариант, но по факту получается, что я не могу на все 100% доверять этому языку, а питону - могу.

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

>Спасибо. Судя по тестам, Питон делает даже Ruby 1.9 почти по всем показателям, причем кое-где - в разы.

Для написания скриптов это принципиально ?

Если мне нужна нормальная шустрая программа - пишу ее на С++.

Если мне нужен небольшой скрипт - пишу его на Руби...

Руби, на мой взгляд, интересен именно тем, что человек, пишущий на С,С++ , не испытывает синтаксического дискомфорта.

Замените в Питоне self на @, уберите : и добавьте end в конце блока, сделайте в таком случае опциональным выравнивание (пусть будет warning), добавьте += и мне Питон будет симпатичнее...

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

>> Спасибо. Судя по тестам, Питон делает даже Ruby 1.9 почти по всем показателям, причем кое-где - в разы.

> Для написания скриптов это принципиально ?

Обычно нет (поэтому меня производительность интересует мало). Но Питон и Руби используются и, скажем, для Веба, а там выигрыш в 20% - это уже деньги.

> Руби, на мой взгляд, интересен именно тем, что человек, пишущий на С,С++ , не испытывает синтаксического дискомфорта.

Я не испытываю особого дискомфорта... а что self, что @ - один черт, поскольку в Си++ вообще ничего из этого писать не нужно.

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

> я не могу на все 100% доверять этому языку, а питону - могу.

При вычислениях доверять нельзя никому - нужно понимать что ты вычисляешь, с какими числами работаешь ...

Вычисления с вещественными числами всегда приближенные.

Вероятнее всего Питон просто отбрасывает лишнее при выводе ...

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

> Но Питон и Руби используются и, скажем, для Веба, а там выигрыш в 20%

Сомневаюсь, что в Вебах активно крутятся вычисления, аналогичные, тем что в тестах.

Там ты скорее всего активно вызываешь разнообразные встроенные в язык функции, а они как правило лежат в SO-шках и написаны на С.

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

> Там ты скорее всего активно вызываешь разнообразные встроенные в язык функции, а они как правило лежат в SO-шках и написаны на С.

Если бы это было так, всякие там PHP-акселераторы никому не были бы нужны. От производительности VM всё же что-то зависит.

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

>Спасибо. Судя по тестам, Питон делает даже Ruby 1.9 почти по всем показателям, причем кое-где - в разы.

Меня терзают смутные сомнения...

Глянул в тексты тестов, где Питон гораздо круче (2 теста - раз в 4-5) - так там в теле цикла вывод на экран всажен - а ежели его убрать ?

Мы же не скорость вывода на экран измеряем ...

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

> Спасибо. Судя по тестам, ...

Что-то я совсем забыл язык Питон ...

Смотрим в текст теста mandelbrot на Питон

http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=mandelbrot&am...

Или я отупел с годами - или там внутри цикла проблемы с отступами в части

______if ...

else :

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

for i in xr_iter:
    z = z * z + c
    if abs(z) >= limit:
        break
else:
    byte_acc += 1 << bit_num

Вот так выглядит

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

> else выполнится только в том случае, если цикл кончится сам, а не посредством break.

Нетривиально и как-то неочевидно из синтаксиса ...

Я много программ видел в жизни на разных языках - как-то обычно понятнее они выглядят двже на Лиспе.

Такой Питон - понятен только тем, кто сильно его любит...

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

>else выполнится только в том случае, если цикл кончится сам, а не посредством break.

Из синтаксиса получается как бы наоборот - Делаем Цикл ... Иначе (т.е. ежели с циклом облом) Делаем нечто ...

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

> Из синтаксиса получается как бы наоборот - Делаем Цикл ... Иначе (т.е. ежели с циклом облом) Делаем нечто ...


Да, я тоже думаю, что это логичнее, однако ... 


--. for i in xrange(100):
...     if i == 50:
...             break
...     print i, 
... else:
...     print 435345354

выведет ряд до 49.

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

> Да, я тоже думаю, что это логичнее, однако ...

ну это как посмотреть. например если что-то надо выполнить, в случае завершенного цикла, то else тут логичнее, потому как не придется городить условие проверки после цикла

потому как если надо выполнить в случае обломанного цикла, то код этот можно вставить тут:

--. for i in xrange(100): ... if i == 50: ... prnint 'break тут' ... break ... if <другое условие>: ... print 'другой braek' ... break ... print i, ... else: ... print 435345354

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

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

сорри 

> Да, я тоже думаю, что это логичнее, однако ... 

ну это как посмотреть. например если что-то надо выполнить, в случае завершенного цикла, то else тут логичнее, 
потому как не придется городить условие проверки после цикла

потому как если надо выполнить в случае обломанного цикла, 
то код этот можно вставить тут:


--. for i in xrange(100):
...     if i == 50:
...             prnint 'break тут'
...             break
...     if <другое условие>: 
...             print 'другой braek'
...             break 
...     print i, 
... else:
...     print 435345354

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

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

> Да, я тоже думаю, что это логичнее, однако ...

А в каких еще популярных ЯП есть похожая конструкция ?

Я на каком языке не пишу - все С/C++ получается ...

И меня это устраивает ...

И еще полезное правило - пиши программу так просто, чтобы понял ее сам спустя 5 лет и пьяный...

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

ну так никтож не заставляет пользовать этот else :)

я и пьяный и через 5 лет пойму что этот else значит.

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

>я и пьяный и через 5 лет пойму что этот else значит.

Ну вот - а я и трезвый не понял.

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

Полагаю что во всех других ЯП - цикл - это цикл, break это просто выход из цикла.

Я бы эту конструкцию как-то осознал ежели бы там было что-то типа

else_nobreak:

Иначе не видно связи с break - видна связь с for

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

>Это, конечно, вариант, но по факту получается, что я не могу на все 100% доверять этому языку, а питону - могу.

Как раз математике где нет специального инструмента для точной математики ты бы поостерегся доверять.

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

С# - это Джава-переросток. Такой перекормленный уродец, отдаленно похожий на Джаву.

Но на конкретный мой вопрос Вы так и не ответили и решили пофлудить. :(

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