Краткое описание RubyInline

Posted on March 20, 2007
Руби конечно быстрый язык, но иногда необходимо производить вычисления ещё быстрее
Для этого существует пакет RubyInline он предназначен для включения в код на руби небольших отрезков на C. Для примера рассмотрим простейшую задачу - поиск факториала.

class Test
  def factorial(n)
    f = 1
    n.downto(2) { |x| f *= x }
    f
  end
end

t = Test.new
tstart = Time.now
t.factorial(200)
tend = Time.now
puts tend - tstart
Теперь рассмотрим код такого-же функционала но с RubyInline

require 'rubygems'
require 'inline'
class Test
   inline do |builder|
     builder.c "
     long factorial(int max) {
     int i=max, result=1;
     while (i >= 2) { result *= i--; }
      return result;
    }"
  end
end

t = Test.new
tstart = Time.now
t.factorial(200)
tend = Time.now
puts tend - tstart
И сравним время, у меня в тесте №1 время получилось равным: 0.001903
А в тесте номер №2 - 0.0000032
Так что результат на лицо ).

P.S. Под windows b системы без компилятора работать не будет.
P.P.S Под Windows используйте cygwin или просто переходите на другую OS

Comments
  1. IfalMarch 21, 2007 @ 03:29 AM
    Интересная возможность, не знал.
  2. insaMarch 27, 2007 @ 01:21 PM
    Не панацея. insa$ time ruby ./fac.rb 0.000401 **real 0m0.014s** user 0m0.006s sys 0m0.007s insa$ time ruby ./inl.rb 2.0e-06 **real 0m0.126s** user 0m0.096s sys 0m0.028s
  3. Konstantin TumalevichApril 04, 2007 @ 08:01 AM
    Ну вы не учитывайте время на прекомпиляцию, а только на работу и всё будет в ажуре. Просто если мне надо за всё время вычислить не 1 факториал а несколько тысяч то время будет ранится очень сильно