LINUX.ORG.RU

Вышел Ruby 1.8.7

 ,


0

0

Вышло очередное обновление ветки 1.8 языка программирования Ruby.

Данное обновление содержит большое количество исправлений, а так же заимствований из ветки 1.9. Но при этом сохраняет высокий уровень стабильности и обратной совместимости с предыдущими релизами 1.8.*

Список изменений: http://svn.ruby-lang.org/repos/ruby/t...

Скачать можно отсюда: ftp://ftp.ruby-lang.org/pub/ruby/1.8

Re: Вышел Ruby 1.8.7

Ждем rubinius.

anonymous ()

Re: Вышел Ruby 1.8.7

it is SLOWEST LANGUAGE EVER ! Proofs are everywhere !

anonymous ()

Ждём Ruby 2.0.

Ждём Ruby 2.0, туда Matz хотел много интересного добавить.

Camel ★★★★★ ()

Re: Вышел Ruby 1.8.7

> Список изменений

ну, судя по changelog, увеличения быстродействия ждать не стоит. жаль, ждём 2.0

eveel ★★ ()

Re: Вышел Ruby 1.8.7

Небольшой бенчмарк:

# ruby 1.9.0 (2007-12-25 revision 14709) [i486-linux]

% time ruby1.9 fib.rb
9227465
ruby1.9 fib.rb  7.09s user 0.01s system 99% cpu 7.106 total


# ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]

% time ruby1.8 fib.rb
9227465
ruby1.8 fib.rb  25.37s user 3.47s system 99% cpu 28.900 total


# Python 2.5.2

% time python fib.py
9227465
python fib.py  8.84s user 0.02s system 99% cpu 8.886 total


# perl, v5.8.8 built for i486-linux-gnu-thread-multi

% time perl fib.pl 
9227465
perl fib.pl  31.63s user 0.04s system 99% cpu 31.808 total


Так что, над рубином работают, и не такой уж он и тормозной, даже сейчас.

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

 % cat fib.*

# Perl

sub fib {
    my($n) = @_;
    if ($n < 2) {
	return $n;
    }
    else {
	return fib($n - 2) + fib($n - 1);
    }
}

print fib(35), "\n";


# Python

# calculate Fibonacci(35)
# for benchmark
def fib(n):
  if n < 2:
    return n
  else:
    return fib(n - 2) + fib(n - 1)

print fib(35)


# Ruby

# calculate Fibonacci(35)
# for benchmark
def fib(n)
  if n < 2
    n
  else
    fib(n - 2) + fib(n - 1)
  end
end

print(fib(35), "\n");

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

200+ раз медленее Сей это совсем не медленный - мантра. Самовнушать раз в пол часа в психотерапевтических целях.

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

> 200+ раз медленее Сей это совсем не медленный - мантра. Самовнушать раз в пол часа в психотерапевтических целях.

Вы, простите, идиот? Причем тут C? Я сделал небольшое сравнение инструментов, применяемых в сходных задачах, которое ничего не доказывает, но и не позволяет говорить, что руби стоит на месте и тормозной по сравнению с другими подобными инструментами.

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

i486 ? cлака что ли ?

А вот почему есть в проверке R-1.9.0 и нету к примеру
в проверке Py-2.6 или Py-3.0 или Perl 6 ?

Чем отличаеться R-1.9 от других альф ?

--
mx

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

>Причем тут C?

при том, что к примеру ту же жабу применяют в тех же областях (вебня), и она только в 2 раза медленее Сей, и значит в 100 раз быстрее рубина.

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

Те вывод такой :

Существующий Руби равен по скорости существующему Перлу
и тормознее существующего Питона в 3 раза.

И когда выйдет ( если ) руби 1-9 то он будет практически равен по
скорости существующего Питона.

--
mx

anonymous ()

Re: Вышел Ruby 1.8.7

(В очередной раз буду первым)

Лишь PHP воистину глобальный и надежный.

CtrlAltBs ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

> i486 ? cлака что ли ?

бубунта

> А вот почему есть в проверке R-1.9.0 и нету к примеру в проверке Py-2.6 или Py-3.0 или Perl 6 ?

py-3.0 нет в репозитарии и перла 6 вроде тоже, влюбом случае перл мне не интересен, я его ради чистоты эксперимента включил.

> Чем отличаеться R-1.9 от других альф ?

От каких других?

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

> Те вывод такой :

Нет, вывод не такой, вывод: руби активно развивается, использовать его можно уже сейчас, в недалеком будущем он не будет уступать аналогичным инструментам.

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

> при том, что к примеру ту же жабу применяют в тех же областях (вебня), и она только в 2 раза медленее Сей, и значит в 100 раз быстрее рубина.

Ну, еще есть такое понятие как память...

К тому же, для jvm тоже есть ruby.

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

Хм не знал в Убунте оптимизация 486 ... однако.

> Нет, вывод не такой, вывод: руби активно развивается,
> использовать его можно уже сейчас, в недалеком будущем он не будет
> уступать аналогичным инструментам.

Те сейчас он уступает Питону в 3 раза. И в недалеком будущем догонит сегодняшний Питон, который хз где будет на тот момент ;)
( так как сравнение с py3 не было )

--
mx

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

> Ну, еще есть такое понятие как память...
А ну да ;) Я вот чтоб хоть как то оправдать наличие на домашней машине
х86_64 дистрибута запихал туды 4 гигабайта ;)

> К тому же, для jvm тоже есть ruby.
Для Пистона тоже есть. Кстати для Пистона есть трансляция кода
( с небольшими ограничениями ) в Си а для Руби есть ?

--
mx

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

но даже когда выйдет 1-9, проблем с низкой утилитарностью Руби не решатся я думаю.

-- mx

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

но даже когда выйдет 1-9, проблем с низкой утилитарностью Руби не решатся я думаю.

ЗЫ Попалился :D

--
mx

anonymous ()

Re: Вышел Ruby 1.8.7

ruby не нужен ...

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

>А вот почему есть в проверке R-1.9.0 и нету к примеру...

Вот, наслаждайтесь:

python2.5.2 fib.py 8,64s user 0,02s system 99% cpu 8,710 total ruby1.9.0 fib.rb 9,03s user 0,02s system 99% cpu 9,064 total python3.0a5 fib.py 10,22s user 0,01s system 99% cpu 10,237 total ruby1.8.7 fib.rb 16,99s user 0,02s system 99% cpu 17,012 total ruby1.8.6 fib.rb 22,12s user 1,72s system 99% cpu 23,842 total

Все собрано под x86_64. Ось - Ubuntu 8.04, проц - Athlon 64 X2 4800+

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

Сорри за форматирование, еще разок:

>А вот почему есть в проверке R-1.9.0 и нету к примеру...

Вот, наслаждайтесь:

python2.5.2 fib.py 8,64s user 0,02s system 99% cpu 8,710 total ruby1.9.0 fib.rb 9,03s user 0,02s system 99% cpu 9,064 total python3.0a5 fib.py 10,22s user 0,01s system 99% cpu 10,237 total ruby1.8.7 fib.rb 16,99s user 0,02s system 99% cpu 17,012 total ruby1.8.6 fib.rb 22,12s user 1,72s system 99% cpu 23,842 total

Все собрано под x86_64. Ось - Ubuntu 8.04, проц - Athlon 64 X2 4800+ 

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

Я дико извиняюсь, я не часто здесь пишу, так что вот еще разок:)

>А вот почему есть в проверке R-1.9.0 и нету к примеру...

python2.5.2 fib.py 8,64s user 0,02s system 99% cpu 8,710 total

ruby1.9.0 fib.rb 9,03s user 0,02s system 99% cpu 9,064 total

python3.0a5 fib.py 10,22s user 0,01s system 99% cpu 10,237 total

ruby1.8.7 fib.rb 16,99s user 0,02s system 99% cpu 17,012 total

ruby1.8.6 fib.rb 22,12s user 1,72s system 99% cpu 23,842 total

Все собрано под x86_64. Ось - Ubuntu 8.04, проц - Athlon 64 X2 4800+

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

Дык чо, похоже на правду...
Более того, если руби стремится к увеличению быстродействия, так как все понятно, что пока конкретно в этом его засада, то питон пока об этом меньше думает.

Да и проскакивало же не так давно, что питон 3000 будет совсем не столь быстр как 2.5

anonymous ()

Re: Вышел Ruby 1.8.7

Язык не поворачивается назвать фибоначчи каким бы то ни было тестом, но, тем не менее:

OCaml:
user 0m0.420s

GCC:
user 0m0.412s

seiken ★★★★★ ()

Re: Вышел Ruby 1.8.7

Такие вещи на питоне принято писать генераторами. Прошу потестить следующий код и 
выкинуть руби нафиг как тормозное гуано:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

def getfib(num):
    f = fibonacci()
    for x in xrange(num):
        f.next()

    return f.next()

print getfib(35)

redbaron ★★ ()
Ответ на: Re^2: Вышел Ruby 1.8.7 от Voker57

Re: Re^2: Вышел Ruby 1.8.7

> посасывает питон

посасывают идиоты, которые не знают, как им пользоваться. посмотри выше своего поста, как правильно реализуются подобные вещи на python теми, кто знает толк.

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от redbaron

Re: Вышел Ruby 1.8.7

> Такие вещи на питоне принято писать генераторами.

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

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от redbaron

Re: Вышел Ruby 1.8.7

Аналогичный код на Руби:

def fibo(limit)
     i = 1
     a = 1
     b = 1
     while (i < limit-1)
         t = a
         a = a + b
         b = t
         i = i+1
     end
	yield a
end 

fibo(35) {|x| print "#{x}\n" }

$ time ruby1.9 fib.rb
9227465

real    0m0.032s
user    0m0.016s
sys     0m0.000s


Voker57 ★★ ()
Ответ на: Re: Вышел Ruby 1.8.7 от Voker57

Re: Вышел Ruby 1.8.7

Да, питон:

$ time python fib.py
9227465

real    0m0.034s
user    0m0.020s
sys     0m0.004s

Voker57 ★★ ()
Ответ на: Re: Вышел Ruby 1.8.7 от Voker57

Re: Вышел Ruby 1.8.7

> Аналогичный код на Руби:

Точно аналогичный? А почему yield не в цикле?

tailgunner ★★★★★ ()
Ответ на: Re: Вышел Ruby 1.8.7 от tailgunner

Re: Вышел Ruby 1.8.7

> А почему yield не в цикле?

и зачем он там вообще, если не в цикле?

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re^2: Вышел Ruby 1.8.7

> и зачем он там вообще, если не в цикле?

Действительно, и без него отлично работает

def fibo(limit)

i = 1

a = 1

b = 1

while (i < limit-1)

t = a

a = a + b

b = t

i = i+1

end

a

end

puts fibo(35)

$ time ruby1.9 fib.rb

9227465

real 0m0.030s

user 0m0.012s

sys 0m0.004s

Сорри, код не мой, выдрал из http://langexplr.blogspot.com/2007/09/rubys-yield-statement.html и упрощал.

Voker57 ★★ ()
Ответ на: Re: Вышел Ruby 1.8.7 от redbaron

Re: Вышел Ruby 1.8.7

> Прошу потестить следующий код и 
выкинуть руби нафиг как тормозное гуано:

Оке, тогда и код на руби переделаем:

def fib(n)
 if n < 2
        n
 else
        a, b, c = 0, 1, 1
        (n - 1).times{ c = a + b; a, b = b, c }
        c
 end
end

puts fib(35)

Итого результаты:
ruby1.8.6 fib2.rb  0,00s user 0,00s system 77% cpu 0,005 total
python2.5.2 fib2.py  0,01s user 0,00s system 95% cpu 0,013 total

Остальные результаты приводить не буду, т.к. 35 считаться слишком быстро, поэтому приведу результаты для числа фибоначи под номером 150000

python2.5.2 fib2.py  1,99s user 0,01s system 98% cpu 2,034 total
ruby1.8.6 fib2.rb  1,52s user 0,04s system 98% cpu 1,592 total
ruby1.8.7 fib2.rb  1,23s user 0,02s system 97% cpu 1,277 total
ruby1.9.0 fib2.rb  6,13s user 0,00s system 98% cpu 6,205 total

На python3.0a5 запустить не получилось =( Я в питоне не силен, но что-то он там на xrange ругается.


anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

>python2.5.2 fib2.py 1,99s user 0,01s system 98% cpu 2,034 total
>ruby1.8.6 fib2.rb 1,52s user 0,04s system 98% cpu 1,592 total
>ruby1.8.7 fib2.rb 1,23s user 0,02s system 97% cpu 1,277 total
>ruby1.9.0 fib2.rb 6,13s user 0,00s system 98% cpu 6,205 total

И что, хваленый ruby 1.9.0 слил? o_O странный какой-то тест.

tailgunner ★★★★★ ()

Re: Вышел Ruby 1.8.7

Ладно, к не Ъ лоровец не стану брызгать слюной и признаю, что по скорости в этом тесте Ruby равен питону =) 1.9 уж допилят по скорости хотяб до уровня предшестевнника

Т.к. питоном 3000 не располагаю, то просьба потестить мой код и нанём, проблема с xrange решается простой заменой на range

redbaron ★★ ()

Re: Вышел Ruby 1.8.7

# fib.rb

def fib(n)
 if n < 2
        n
 else
        a, b, c = 0, 1, 1
        (n - 1).times{ c = a + b; a, b = b, c }
        c
 end
end

fib(370000)
-----------------------
# fib.py

def fib(n):
    a, b = 1, 1
    for i in xrange(n):
        a, b = b, a + b
    return b

fib(370000)
------------------------
user@box:~$ time ruby1.8 fib.rb 

real	0m19.863s
user	0m19.433s
sys	0m0.100s
user@box:~$ time ruby1.9 fib.rb 

real	0m42.242s
user	0m41.779s
sys	0m0.192s
user@box:~$ time python fib.py 

real	0m13.342s
user	0m13.249s
sys	0m0.032s

А еще красоту кода сравните :)

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

>А еще красоту кода сравните :)

Ты дурак или прикидываешься? Твой код вообще не работает, и питон ты не знаешь. О какой красоте может быть речь?

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

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

ты то точно не прикидываешься..
пусть будет

def fib(n):
    a, b = 0, 1
    for i in xrange(n):
        a, b = b, a + b
    return a

суть от этого не меняется

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

Браво! Только вначале тесть, а потом рассказывай о красоте кода.

def fib(n)
 a, b = 0, 1
 n.times{ a, b = b, a + b }
 return a
end

У мну на одну переменную меньше :-P

anonymous ()

Re: Вышел Ruby 1.8.7

А у меня все равно длинее...

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

Продолжим извращения:

~ > cat b.rb
#!/usr/local/bin/ruby19

require 'matrix'

FIB_MATRIX = Matrix[[1,1],[1,0]]
def fib(n)
(FIB_MATRIX**(n-1))[0,0]
end

fib(370000)


~ > time ./b.rb
real 0m6.634s
user 0m2.401s
sys 0m0.000s

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

Во, оптимальный вариант:

# Ruby 1.9

class Integer
  FibonacciCache = Hash.new do |hash, key|
    if hash.has_key?(key - 1) and hash.has_key?(key - 2)
      hash[key] = hash[key - 1] + hash[key - 2]
    elsif hash.has_key?(key + 1) and hash.has_key?(key + 2)
      hash[key] = hash[key + 2] - hash[key + 1]
    else
      subkey = key.div(2)
      case key.modulo(4)
        when 1
          hash[key] = (2*hash[subkey] + hash[subkey - 1])*(2*hash[subkey] - hash[subkey - 1]) + 2
        when 3
          hash[key] = (2*hash[subkey] + hash[subkey - 1])*(2*hash[subkey] - hash[subkey - 1]) - 2
        else
          hash[key] = hash[subkey] * (hash[subkey] + 2*hash[subkey - 1])
      end
    end
  end
  FibonacciCache[0] = 0
  FibonacciCache[1] = 1

  def fib
    return FibonacciCache[self]
  end

  def fib_uncached
    return FibonacciCache.dup[self]
  end
end

puts 370000.fib.size

################
32112

real    0m0.690s
user    0m0.325s
sys     0m0.000s

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

def fib(n): nums,b,c = [],1,0 while n > 1: if(n&1 == True): nums.append((b,c)) a=b*b b,c,n = a + 2*b*c, a+c*c,n/2 for i in nums: b,c = (b+c)*i[0] + b*i[1], b*i[0] + c*i[1] return b fib(370000)

~ > time real 0m0.775s user 0m0.663s sys 0m0.010s

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

def fib(n):

nums,b,c = [],1,0

while n > 1:

if(n&1 == True): nums.append((b,c))

a=b*b

b,c,n = a + 2*b*c, a+c*c,n/2

for i in nums: b,c = (b+c)*i[0] + b*i[1], b*i[0] + c*i[1]

return b

fib(370000)

-------------------

real 0m0.775s

user 0m0.663s

sys 0m0.010s

--------------------

не знаю, капча stoler должна что-то мне говорить или нет?

anonymous ()
Ответ на: Re: Вышел Ruby 1.8.7 от anonymous

Re: Вышел Ruby 1.8.7

научите дебила пользоваться форумом, а то уже два поста спортил... капча clooss

anonymous ()

Re: Вышел Ruby 1.8.7

def powLF(n): if n == 1: return (1, 1) L, F = powLF(n//2) L, F = (L**2 + 5*F**2) >> 1, L*F if n & 1: return ((L + 5*F)>>1, (L + F) >>1) else: return (L, F)

def fib(n): if n & 1: return powLF(n)[1] else: L, F = powLF(n // 2) return L * F

fib(370000)

real 0m0.193s user 0m0.176s sys 0m0.008s

anonymous ()

Re: Вышел Ruby 1.8.7

пардон

def powLF(n):
    if n == 1:
        return (1, 1)
    L, F = powLF(n//2)
    L, F = (L**2 + 5*F**2) >> 1, L*F
    if n & 1:
        return ((L + 5*F)>>1, (L + F) >>1)
    else:
        return (L, F)

def fib(n):
    if n & 1:
        return powLF(n)[1]
    else:
        L, F = powLF(n // 2)
        return L * F

fib(370000)

real	0m0.193s
user	0m0.176s
sys	0m0.008s

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